Ejemplo n.º 1
0
 def test_delete_version(self):
     self.backend1.start()
     store = MCStore(self.backend1_addr)
     key = "key2"
     store.set(key, "aaa")
     self.assertEqual(self._get_version(store, key), 1)
     store.delete(key)
     self.assertEqual(self._get_version(store, key), None)
     store.set(key, "bbb")
     self.assertEqual(store.get(key), 'bbb')
     self.assertEqual(self._get_version(store, key), 3)
Ejemplo n.º 2
0
 def _delete_data(self, prefix='', loop_num=10 * 1024):
     store = MCStore(self.backend1_addr)
     for key in self.backend1.generate_key(prefix=prefix,
                                           count=loop_num,
                                           sector=0):
         if not store.delete(key):
             return self.fail("fail to delete %s" % (key))
Ejemplo n.º 3
0
    def test_delete_version(self):
        self.backend1.start()
        store = MCStore(self.backend1_addr)
        key = "key1"

        store.set(key, "aaa")
        self.append(256)
        self.assertEqual(self._get_meta(store, key), (1, 0, self.last_pos))

        store.delete(key)
        self.append(256)
        self.assertEqual(self._get_meta(store, key), (-2, 0, self.last_pos))

        store.set(key, "bbb")
        self.append(256)
        self.assertEqual(store.get(key), 'bbb')
        self.assertEqual(self._get_meta(store, key), (3, 0, self.last_pos))
Ejemplo n.º 4
0
    def test_delete_version(self):
        self.backend1.start()
        store = MCStore(self.backend1_addr)
        key = "key1"

        store.set(key, "aaa")
        self.append(256)
        self.assertEqual(self._get_meta(store, key), (1, 0, self.last_pos))

        store.delete(key)
        self.append(256)
        self.assertEqual(self._get_meta(store, key), (-2, 0, self.last_pos))

        store.set(key, "bbb")
        self.append(256)
        self.assertEqual(store.get(key), 'bbb')
        self.assertEqual(self._get_meta(store, key), (3, 0, self.last_pos))
Ejemplo n.º 5
0
    def test_gc(self):
        self.backend1.start()
        store = MCStore(self.backend1_addr)
        ver_key = 'test_version_key'
        store.set(ver_key, 1)
        store.set(ver_key, 1, rev=3)  # will only raise version in htree
        self.assertEqual(self._get_version(store, ver_key), 3)

        self._gen_data(1)
        print "done set data to 1"
        time.sleep(10)
        self._gen_data(2)
        self._gen_data(1, prefix='delete_group')
        time.sleep(2)
        self.assertEqual(self.backend1.item_count(), 20481)
        self._delete_data(prefix='delete_group')
        self.assertEqual(self.backend1.item_count(), 10241)
        self.assert_(not store.delete('key not exists'))
        self.assertEqual(self.backend1.item_count(), 10241)

        print "stop beansdb to rotate data file and produce hint"
        self.backend1.stop()
        self.backend1.start()

        print "deleted key should exists in data"
        assert locate_key_iterate(self.backend1.db_home, db_depth=self.backend1.db_depth, key="delete_group" + "test0", ver_=1)
        assert locate_key_with_hint(self.backend1.db_home, db_depth=self.backend1.db_depth, key="delete_group" + "test0", ver_=-2)
        print "done set data to 2"
        self._start_gc(0)
        print "gc started"
        while True:
            status = self._gc_status()
            if status.find('running') >= 0:
                self._check_data(2)
                continue
            elif status == 'success':
                print "done gc"
                break
            elif status == 'fail':
                return self.fail("optimize_stat = fail")
            else:
                self.fail(status)
        self._check_data(2)
        store = MCStore(self.backend1_addr)
        self.assertEqual(self._get_version(store, ver_key), 3) # version 3 should be in data
        print "check test key version, old version should not exist"
        assert locate_key_with_hint(self.backend1.db_home, db_depth=self.backend1.db_depth, key=ver_key, ver_=3)
        assert not locate_key_iterate(self.backend1.db_home, db_depth=self.backend1.db_depth, key=ver_key, ver_=1)
        print "check data & hint"
        check_data_hint_integrity(self.backend1.db_home, db_depth=self.backend1.db_depth)

        print "deleted key got deleted from data file during gc"
        assert not locate_key_iterate(self.backend1.db_home, db_depth=self.backend1.db_depth, key="delete_group" + "test0")
        self.assertEqual(self.backend1.item_count(), 10241)

        self.backend1.stop()
Ejemplo n.º 6
0
    def test_gc(self):
        self.backend1.start()
        store = MCStore(self.backend1_addr)
        ver_key = 'test_version_key'
        store.set(ver_key, 1)
        store.set(ver_key, 1, rev=3)  # will only raise version in htree
        self.assertEqual(self._get_version(store, ver_key), 3)

        self._gen_data(1)
        print "done set data to 1"
        time.sleep(10)
        self._gen_data(2)
        self._gen_data(1, prefix='delete_group')
        time.sleep(2)
        self.assertEqual(self.backend1.item_count(), 20481)
        self._delete_data(prefix='delete_group')
        self.assertEqual(self.backend1.item_count(), 10241)
        self.assert_(not store.delete('key not exists'))
        self.assertEqual(self.backend1.item_count(), 10241)

        print "stop beansdb to rotate data file and produce hint"
        self.backend1.stop()
        self.backend1.start()

        print "deleted key should exists in data"
        assert locate_key_iterate(self.backend1.db_home,
                                  db_depth=self.backend1.db_depth,
                                  key="delete_group" + "test0",
                                  ver_=1)
        assert locate_key_with_hint(self.backend1.db_home,
                                    db_depth=self.backend1.db_depth,
                                    key="delete_group" + "test0",
                                    ver_=-2)
        print "done set data to 2"
        self._start_gc(0)
        print "gc started"
        while True:
            status = self._gc_status()
            if status.find('running') >= 0:
                self._check_data(2)
                continue
            elif status == 'success':
                print "done gc"
                break
            elif status == 'fail':
                return self.fail("optimize_stat = fail")
            else:
                self.fail(status)
        self._check_data(2)
        store = MCStore(self.backend1_addr)
        self.assertEqual(self._get_version(store, ver_key),
                         3)  # version 3 should be in data
        print "check test key version, old version should not exist"
        assert locate_key_with_hint(self.backend1.db_home,
                                    db_depth=self.backend1.db_depth,
                                    key=ver_key,
                                    ver_=3)
        assert not locate_key_iterate(self.backend1.db_home,
                                      db_depth=self.backend1.db_depth,
                                      key=ver_key,
                                      ver_=1)
        print "check data & hint"
        check_data_hint_integrity(self.backend1.db_home,
                                  db_depth=self.backend1.db_depth)

        print "deleted key got deleted from data file during gc"
        assert not locate_key_iterate(self.backend1.db_home,
                                      db_depth=self.backend1.db_depth,
                                      key="delete_group" + "test0")
        self.assertEqual(self.backend1.item_count(), 10241)

        self.backend1.stop()
Ejemplo n.º 7
0
 def _delete_data(self, prefix='', loop_num=10 * 1024):
     store = MCStore(self.backend1_addr)
     for key in self.backend1.generate_key(prefix=prefix, count=loop_num):
         if not store.delete(key):
             return self.fail("fail to delete %s" % (key))