def test_get_broken(self): print print "test get broken data" self.backend1.start() self._gen_data("some value", prefix='test1', loop_num=1024, sector=0) tempered_key = None for key in self.backend1.generate_key(prefix="test2", count=1, sector=0): tempered_key = key store = MCStore(self.backend1_addr) store.set(tempered_key, string_large) store.close() self._gen_data("other value", prefix='test3', loop_num=1024, sector=0) self.assertEqual(self.backend1.item_count(), 2049) # flush hint self.backend1.stop() self.backend1.start() #make sure we produce a crc error temper_with_key_value(self.backend1.db_home, self.backend1.db_depth, tempered_key, delete_hint=False) self.assertEqual(self.backend1.item_count(), 2049) print "when beansdb encounter broken data when reading, it should delete it from htree" store = MCStore(self.backend1_addr) store.get(tempered_key) is None store.close() self.assertEqual(self.backend1.item_count(), 2048) self._check_data("some value", prefix="test1", loop_num=1024, sector=0) self._check_data("other value", prefix="test3", loop_num=1024, sector=0) self.backend1.stop()
def test_gc_broken(self): print print "test gc broken data" self.backend1.start() self._gen_data("some value", prefix='test1', loop_num=1024, sector=0) tempered_key = None for key in self.backend1.generate_key(prefix="test2", count=1, sector=0): tempered_key = key store = MCStore(self.backend1_addr) store.set(tempered_key, string_large) store.close() self._gen_data("other value", prefix='test1', loop_num=1024, sector=0) self.assertEqual(self.backend1.item_count(), 1025) # flush hint self.backend1.stop() self.backend1.start() #make sure we produce a crc error temper_with_key_value(self.backend1.db_home, self.backend1.db_depth, tempered_key, delete_hint=False) self._start_gc() while True: status = self._gc_status() if status == 'success': print "done gc" break elif status == 'fail': return self.fail("optimize_stat = fail") self.assertEqual(self.backend1.item_count(), 1024) self._check_data("other value", prefix="test1", loop_num=1024, sector=0)
def test_bc_scan(self): print "" print "test bc scan broken data" self.backend1.start() self._gen_data("some value", prefix='test1', loop_num=1024, sector=0) tempered_key = None for key in self.backend1.generate_key(prefix="test2", count=1, sector=0): tempered_key = key store = MCStore(self.backend1_addr) store.set(tempered_key, string_large) store.close() self._gen_data("other value", prefix='test3', loop_num=1024, sector=0) self.assertEqual(self.backend1.item_count(), 2049) self.backend1.stop() #make sure we produce a crc error assert temper_with_key_value(self.backend1.db_home, self.backend1.db_depth, tempered_key, delete_hint=True) delete_hint_and_htree(self.backend1.db_home, self.backend1.db_depth) self.backend1.start() self.assertEqual(self.backend1.item_count(), 2048) self._check_data("some value", prefix="test1", loop_num=1024, sector=0) self._check_data("other value", prefix="test3", loop_num=1024, sector=0) self.backend1.stop()