int rados_aio_write(rados_ioctx_t io, const char * oid, rados_completion_t completion, const char * buf, size_t len, uint64_t off)
int rados_aio_append(rados_ioctx_t io, const char * oid, rados_completion_t completion, const char * buf, size_t len)
int rados_aio_write_full(rados_ioctx_t io, const char * oid, rados_completion_t completion, const char * buf, size_t len)
+ int rados_aio_writesame(rados_ioctx_t io, const char *oid, rados_completion_t completion, const char *buf, size_t data_len, size_t write_len, uint64_t off)
int rados_aio_remove(rados_ioctx_t io, const char * oid, rados_completion_t completion)
int rados_aio_read(rados_ioctx_t io, const char * oid, rados_completion_t completion, char * buf, size_t len, uint64_t off)
int rados_aio_flush(rados_ioctx_t io)
raise make_ex(ret, "error writing object %s" % object_name)
return completion
+ @requires(('object_name', str_type), ('to_write', bytes), ('write_len', int),
+ ('offset', int), ('oncomplete', opt(Callable)))
+ def aio_writesame(self, object_name, to_write, write_len, offset=0,
+ oncomplete=None):
+ """
+ Asynchronously write the same buffer multiple times
+
+ :param object_name: name of the object
+ :type object_name: str
+ :param to_write: data to write
+ :type to_write: bytes
+ :param write_len: total number of bytes to write
+ :type write_len: int
+ :param offset: byte offset in the object to begin writing at
+ :type offset: int
+ :param oncomplete: what to do when the writesame is safe and
+ complete in memory on all replicas
+ :type oncomplete: completion
+ :raises: :class:`Error`
+ :returns: completion object
+ """
+
+ object_name = cstr(object_name, 'object_name')
+
+ cdef:
+ Completion completion
+ char* _object_name = object_name
+ char* _to_write = to_write
+ size_t _data_len = len(to_write)
+ size_t _write_len = write_len
+ uint64_t _offset = offset
+
+ completion = self.__get_completion(oncomplete, None)
+ self.__track_completion(completion)
+ with nogil:
+ ret = rados_aio_writesame(self.io, _object_name, completion.rados_comp,
+ _to_write, _data_len, _write_len, _offset)
+
+ if ret < 0:
+ completion._cleanup()
+ raise make_ex(ret, "error writing object %s" % object_name)
+ return completion
+
@requires(('object_name', str_type), ('to_append', bytes), ('oncomplete', opt(Callable)),
('onsafe', opt(Callable)))
def aio_append(self, object_name, to_append, oncomplete=None, onsafe=None):