mirror of https://github.com/ceph/go-ceph
rados: simplified GetOmapStep and ReadOp.GetOmapValues
C strings that are passed in to rados_read_op_omap_get_vals2() are copied by the function, see [1][2] for its implementation. It's therefore not necessary for them to be owned by GetOmapStep. It's enough to construct and destruct them in ReadOp.GetOmapValues. [1]2bd3dd512a/src/librados/librados_c.cc (L4334-L4358)
[2]2bd3dd512a/src/include/rados/librados.hpp (L572-L587)
This commit is contained in:
parent
8371a1377d
commit
3f9bcf03cc
|
@ -88,15 +88,6 @@ type OmapKeyValue struct {
|
||||||
// Release method is called the public methods of the step must no longer be
|
// Release method is called the public methods of the step must no longer be
|
||||||
// used and may return errors.
|
// used and may return errors.
|
||||||
type GetOmapStep struct {
|
type GetOmapStep struct {
|
||||||
// inputs:
|
|
||||||
startAfter string
|
|
||||||
filterPrefix string
|
|
||||||
maxReturn uint64
|
|
||||||
|
|
||||||
// arguments:
|
|
||||||
cStartAfter *C.char
|
|
||||||
cFilterPrefix *C.char
|
|
||||||
|
|
||||||
// C returned data:
|
// C returned data:
|
||||||
iter C.rados_omap_iter_t
|
iter C.rados_omap_iter_t
|
||||||
more *C.uchar
|
more *C.uchar
|
||||||
|
@ -109,15 +100,10 @@ type GetOmapStep struct {
|
||||||
canIterate bool
|
canIterate bool
|
||||||
}
|
}
|
||||||
|
|
||||||
func newGetOmapStep(startAfter, filterPrefix string, maxReturn uint64) *GetOmapStep {
|
func newGetOmapStep() *GetOmapStep {
|
||||||
gos := &GetOmapStep{
|
gos := &GetOmapStep{
|
||||||
startAfter: startAfter,
|
more: (*C.uchar)(C.malloc(C.sizeof_uchar)),
|
||||||
filterPrefix: filterPrefix,
|
rval: (*C.int)(C.malloc(C.sizeof_int)),
|
||||||
maxReturn: maxReturn,
|
|
||||||
cStartAfter: C.CString(startAfter),
|
|
||||||
cFilterPrefix: C.CString(filterPrefix),
|
|
||||||
more: (*C.uchar)(C.malloc(C.sizeof_uchar)),
|
|
||||||
rval: (*C.int)(C.malloc(C.sizeof_int)),
|
|
||||||
}
|
}
|
||||||
runtime.SetFinalizer(gos, opStepFinalizer)
|
runtime.SetFinalizer(gos, opStepFinalizer)
|
||||||
return gos
|
return gos
|
||||||
|
@ -133,10 +119,6 @@ func (gos *GetOmapStep) free() {
|
||||||
gos.more = nil
|
gos.more = nil
|
||||||
C.free(unsafe.Pointer(gos.rval))
|
C.free(unsafe.Pointer(gos.rval))
|
||||||
gos.rval = nil
|
gos.rval = nil
|
||||||
C.free(unsafe.Pointer(gos.cStartAfter))
|
|
||||||
gos.cStartAfter = nil
|
|
||||||
C.free(unsafe.Pointer(gos.cFilterPrefix))
|
|
||||||
gos.cFilterPrefix = nil
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (gos *GetOmapStep) update() error {
|
func (gos *GetOmapStep) update() error {
|
||||||
|
|
|
@ -69,13 +69,19 @@ func (r *ReadOp) AssertExists() {
|
||||||
// function. The GetOmapStep may be used to iterate over the key-value
|
// function. The GetOmapStep may be used to iterate over the key-value
|
||||||
// pairs after the Operate call has been performed.
|
// pairs after the Operate call has been performed.
|
||||||
func (r *ReadOp) GetOmapValues(startAfter, filterPrefix string, maxReturn uint64) *GetOmapStep {
|
func (r *ReadOp) GetOmapValues(startAfter, filterPrefix string, maxReturn uint64) *GetOmapStep {
|
||||||
gos := newGetOmapStep(startAfter, filterPrefix, maxReturn)
|
gos := newGetOmapStep()
|
||||||
r.steps = append(r.steps, gos)
|
r.steps = append(r.steps, gos)
|
||||||
|
|
||||||
|
cStartAfter := C.CString(startAfter)
|
||||||
|
cFilterPrefix := C.CString(filterPrefix)
|
||||||
|
defer C.free(unsafe.Pointer(cStartAfter))
|
||||||
|
defer C.free(unsafe.Pointer(cFilterPrefix))
|
||||||
|
|
||||||
C.rados_read_op_omap_get_vals2(
|
C.rados_read_op_omap_get_vals2(
|
||||||
r.op,
|
r.op,
|
||||||
gos.cStartAfter,
|
cStartAfter,
|
||||||
gos.cFilterPrefix,
|
cFilterPrefix,
|
||||||
C.uint64_t(gos.maxReturn),
|
C.uint64_t(maxReturn),
|
||||||
&gos.iter,
|
&gos.iter,
|
||||||
gos.more,
|
gos.more,
|
||||||
gos.rval,
|
gos.rval,
|
||||||
|
|
Loading…
Reference in New Issue