// Read reads from the object a specific length starting at the given offset. The read data is stored in an io.Reader // and is appended at the end of the args passed to the onComplete and onSafe callbacks. func (ao *AsyncObject) Read(length, offset uint64) { go func() { oid := C.CString(ao.name) defer freeString(oid) bufAddr := bufferAddress(int(length)) ret := C.rados_aio_read(ao.ioContext, oid, ao.completion, bufAddr, C.size_t(length), C.uint64_t(offset)) hasErr := ao.processError(ret, fmt.Sprintf("Unable to read from object %s", ao.name)) if hasErr { return } go func() { C.rados_aio_wait_for_complete(ao.completion) ret = C.rados_aio_get_return_value(ao.completion) data := bufToReader(bufAddr, ret) ao.args = append(ao.args, data) argCopy := make([]interface{}, len(ao.args)) copy(argCopy, ao.args) ao.onComplete(argCopy...) }() go func() { C.rados_aio_wait_for_safe(ao.completion) ret = C.rados_aio_get_return_value(ao.completion) data := bufToReader(bufAddr, ret) ao.args = append(ao.args, data) argCopy := make([]interface{}, len(ao.args)) copy(argCopy, ao.args) ao.onSafe(argCopy...) }() }() }
func (c *AioCompletion) GetReturnValue() int { ret := int(C.rados_aio_get_return_value(c.completion)) return ret }