예제 #1
0
    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()
예제 #2
0
    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)
예제 #3
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()
예제 #4
0
    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)
예제 #5
0
    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()
예제 #6
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()