def test_clear_omap(self): keys = ("1", "2", "3") values = (b"aaa", b"bbb", b"ccc") with WriteOpCtx(self.ioctx) as write_op: self.ioctx.set_omap(write_op, keys, values) self.ioctx.operate_write_op(write_op, "hw") with WriteOpCtx(self.ioctx) as write_op_1: self.ioctx.clear_omap(write_op_1) self.ioctx.operate_write_op(write_op_1, "hw") with ReadOpCtx(self.ioctx) as read_op: iter, ret = self.ioctx.get_omap_vals_by_keys(read_op, ("1", )) self.ioctx.operate_read_op(read_op, "hw") eq(list(iter), [])
def test_write_ops(self): with WriteOpCtx(self.ioctx) as write_op: write_op.new(0) self.ioctx.operate_write_op(write_op, "write_ops") eq(self.ioctx.read('write_ops'), b'') write_op.write_full(b'1') write_op.append(b'2') self.ioctx.operate_write_op(write_op, "write_ops") eq(self.ioctx.read('write_ops'), b'12') write_op.write_full(b'12345') write_op.write(b'x', 2) self.ioctx.operate_write_op(write_op, "write_ops") eq(self.ioctx.read('write_ops'), b'12x45') write_op.write_full(b'12345') write_op.zero(2, 2) self.ioctx.operate_write_op(write_op, "write_ops") eq(self.ioctx.read('write_ops'), b'12\x00\x005') write_op.write_full(b'12345') write_op.truncate(2) self.ioctx.operate_write_op(write_op, "write_ops") eq(self.ioctx.read('write_ops'), b'12') write_op.remove() self.ioctx.operate_write_op(write_op, "write_ops") with assert_raises(ObjectNotFound): self.ioctx.read('write_ops')
def test_set_omap_aio(self): lock = threading.Condition() count = [0] def cb(blah): with lock: count[0] += 1 lock.notify() return 0 keys = ("1", "2", "3", "4") values = (b"aaa", b"bbb", b"ccc", b"\x04\x04\x04\x04") with WriteOpCtx(self.ioctx) as write_op: self.ioctx.set_omap(write_op, keys, values) comp = self.ioctx.operate_aio_write_op(write_op, "hw", cb, cb) comp.wait_for_complete() comp.wait_for_safe() with lock: while count[0] < 2: lock.wait() eq(comp.get_return_value(), 0) with ReadOpCtx(self.ioctx) as read_op: iter, ret = self.ioctx.get_omap_vals(read_op, "", "", 4) eq(ret, 0) comp = self.ioctx.operate_aio_read_op(read_op, "hw", cb, cb) comp.wait_for_complete() comp.wait_for_safe() with lock: while count[0] < 4: lock.wait() eq(comp.get_return_value(), 0) next(iter) eq(list(iter), [("2", b"bbb"), ("3", b"ccc"), ("4", b"\x04\x04\x04\x04")])
def test_set_omap(self): keys = ("1", "2", "3", "4") values = (b"aaa", b"bbb", b"ccc", b"\x04\x04\x04\x04") with WriteOpCtx(self.ioctx) as write_op: self.ioctx.set_omap(write_op, keys, values) write_op.set_flags(LIBRADOS_OPERATION_SKIPRWLOCKS) self.ioctx.operate_write_op(write_op, "hw") with ReadOpCtx(self.ioctx) as read_op: iter, ret = self.ioctx.get_omap_vals(read_op, "", "", 4) eq(ret, 0) self.ioctx.operate_read_op(read_op, "hw") next(iter) eq(list(iter), [("2", b"bbb"), ("3", b"ccc"), ("4", b"\x04\x04\x04\x04")]) with ReadOpCtx(self.ioctx) as read_op: iter, ret = self.ioctx.get_omap_vals(read_op, "2", "", 4) eq(ret, 0) self.ioctx.operate_read_op(read_op, "hw") eq(("3", b"ccc"), next(iter)) eq(list(iter), [("4", b"\x04\x04\x04\x04")]) with ReadOpCtx(self.ioctx) as read_op: iter, ret = self.ioctx.get_omap_vals(read_op, "", "2", 4) eq(ret, 0) read_op.set_flags(LIBRADOS_OPERATION_BALANCE_READS) self.ioctx.operate_read_op(read_op, "hw") eq(list(iter), [("2", b"bbb")])
def test_get_omap_keys(self): keys = ("1", "2", "3") values = (b"aaa", b"bbb", b"ccc") with WriteOpCtx(self.ioctx) as write_op: self.ioctx.set_omap(write_op, keys, values) self.ioctx.operate_write_op(write_op, "hw") with ReadOpCtx(self.ioctx) as read_op: iter, ret = self.ioctx.get_omap_keys(read_op, "", 2) self.ioctx.operate_read_op(read_op, "hw") eq(list(iter), [("1", None), ("2", None)])
def test_set_omap(self): keys = ("1", "2", "3", "4") values = (b"aaa", b"bbb", b"ccc", b"\x04\x04\x04\x04") with WriteOpCtx(self.ioctx) as write_op: self.ioctx.set_omap(write_op, keys, values) self.ioctx.operate_write_op(write_op, "hw") with ReadOpCtx(self.ioctx) as read_op: iter, ret = self.ioctx.get_omap_vals(read_op, "", "", 4) self.ioctx.operate_read_op(read_op, "hw") iter.next() eq(list(iter), [("2", b"bbb"), ("3", b"ccc"), ("4", b"\x04\x04\x04\x04")])
def test_get_omap_vals_by_keys(self): keys = ("1", "2", "3", "4") values = ("aaa", "bbb", "ccc", "\x04\x04\x04\x04") with WriteOpCtx(self.ioctx) as write_op: self.ioctx.set_omap(write_op, keys, values) self.ioctx.operate_write_op(write_op, "hw") with ReadOpCtx(self.ioctx) as read_op: iter, ret = self.ioctx.get_omap_vals_by_keys( read_op, ( "3", "4", )) self.ioctx.operate_read_op(read_op, "hw") eq(list(iter), [("3", "ccc"), ("4", "\x04\x04\x04\x04")])
def test_get_omap_keys(self): keys = ("1", "2", "3") values = (b"aaa", b"bbb", b"ccc") with WriteOpCtx(self.ioctx) as write_op: self.ioctx.set_omap(write_op, keys, values) self.ioctx.operate_write_op(write_op, "hw") with ReadOpCtx(self.ioctx) as read_op: iter, ret = self.ioctx.get_omap_keys(read_op, "", 2) eq(ret, 0) self.ioctx.operate_read_op(read_op, "hw") eq(list(iter), [("1", None), ("2", None)]) with ReadOpCtx(self.ioctx) as read_op: iter, ret = self.ioctx.get_omap_keys(read_op, "", 2) eq(ret, 0) with assert_raises(ObjectNotFound): self.ioctx.operate_read_op(read_op, "no_such")
def test_operate_aio_write_op(self): lock = threading.Condition() count = [0] def cb(blah): with lock: count[0] += 1 lock.notify() return 0 with WriteOpCtx() as write_op: write_op.write(b'rzx') comp = self.ioctx.operate_aio_write_op(write_op, "object", cb, cb) comp.wait_for_complete() with lock: while count[0] < 2: lock.wait() eq(comp.get_return_value(), 0) eq(self.ioctx.read('object'), b'rzx')
def test_xattrs_op(self): xattrs = dict(a=b'1', b=b'2', c=b'3', d=b'a\0b', e=b'\0') with WriteOpCtx() as write_op: write_op.new(LIBRADOS_CREATE_EXCLUSIVE) for key, value in xattrs.items(): write_op.set_xattr(key, value) self.ioctx.operate_write_op(write_op, "abc") eq(self.ioctx.get_xattr('abc', key), value) stored_xattrs_1 = {} for key, value in self.ioctx.get_xattrs('abc'): stored_xattrs_1[key] = value eq(stored_xattrs_1, xattrs) for key in xattrs.keys(): write_op.rm_xattr(key) self.ioctx.operate_write_op(write_op, "abc") stored_xattrs_2 = {} for key, value in self.ioctx.get_xattrs('abc'): stored_xattrs_2[key] = value eq(stored_xattrs_2, {}) write_op.remove()
def test_writesame_op(self): with WriteOpCtx() as write_op: write_op.writesame(b'rzx', 9) self.ioctx.operate_write_op(write_op, 'abc') eq(self.ioctx.read('abc'), b'rzxrzxrzx')
def test_execute_op(self): with WriteOpCtx() as write_op: write_op.execute("hello", "record_hello", b"ebs") self.ioctx.operate_write_op(write_op, "object") eq(self.ioctx.read('object'), b"Hello, ebs!")