示例#1
0
 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), [])
示例#2
0
 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')
示例#3
0
    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")])
示例#4
0
 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")])
示例#5
0
 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)])
示例#6
0
 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")])
示例#7
0
 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")])
示例#8
0
 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")
示例#9
0
 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')
示例#10
0
 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()
示例#11
0
 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')
示例#12
0
 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!")