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)
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))
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))
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()
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))