Beispiel #1
0
    def testBatchPutGet(self):
        self.node.shutdown()

        size = 50
        batch1 = ['1' * 20, '2' * 20]
        batch2 = ['3' * 20, '4' * 20]

        self.node = Node(self.dir_, size)

        self.assertEqual(self.node.put(batch1), batch1)
        self.assertEqual(self.node.put(batch2), batch2)

        self.assertEqual(len(self.node.map_files), 2)

        gets = sorted([self.node.get() for _ in range(4)])
        res = batch1
        res.extend(batch2)
        self.assertEqual(gets, res)

        self.node.put('5' * 20)
        self.assertEqual(self.node.get(), '5' * 20)

        self.node.put('6' * 20)

        self.node.merge()
        self.assertEqual(len(self.node.map_files), 1)

        self.assertEqual(self.node.get(), '6' * 20)
        self.assertEqual(self.node.get(), None)

        self.assertRaises(NodeNoSpaceForPut, lambda: self.node.put('7' * 100))
Beispiel #2
0
 def setUp(self):
     self.dir_ = tempfile.mkdtemp()
     self.node_dir = os.path.join(self.dir_, 'node')
     os.mkdir(self.node_dir)
     bloom_filter_hook = FileBloomFilter(
         os.path.join(self.dir_, 'bloomfilter'), 10)
     self.node = Node(self.node_dir, verify_exists_hook=bloom_filter_hook)
Beispiel #3
0
    def init_store(self,
                   local_store_path,
                   backup_stores_path,
                   verify_exists_hook=None):
        self.local_store = Node(local_store_path,
                                verify_exists_hook=verify_exists_hook)
        self.backup_stores_path = backup_stores_path

        backup_nodes = self.nodes[:]
        backup_nodes.remove(self.local_node)
        self.backup_stores = {}
        for backup_node in backup_nodes:
            backup_node_dir = backup_node.replace(':', '_')
            backup_path = os.path.join(backup_stores_path, backup_node_dir)
            if not os.path.exists(backup_path):
                os.makedirs(backup_path)
            self.backup_stores[backup_node] = Node(backup_path,
                                                   size=512 * 1024)

        self._register_rpc()
Beispiel #4
0
 def add_node(self, node, backup_store=None):
     self.nodes.append(node)
     self.hash_ring = HashRing(self.nodes)
     if backup_store is not None:
         self.backup_stores[node] = backup_store
     else:
         backup_stores_path = getattr(self, 'backup_stores_path')
         if backup_stores_path is not None:
             path = os.path.join(backup_stores_path, node.replace(':', '_'))
             if not os.path.exists(path):
                 os.makedirs(path)
             self.backup_stores[node] = Node(path, size=512 * 1024)
Beispiel #5
0
    def testPutGet(self):
        num = str(12345)

        self.assertEqual(self.node.put(num), num)
        self.assertEqual(self.node.put(num), '')

        num2 = str(67890)
        nums = [num, num2]
        self.assertEqual(self.node.put(nums), [num2])

        self.node.shutdown()
        self.assertGreater(
            os.path.getsize(os.path.join(self.dir_, 'bloomfilter')), 0)

        bloom_filter_hook = FileBloomFilter(
            os.path.join(self.dir_, 'bloomfilter'), 5)
        self.node = Node(self.node_dir, verify_exists_hook=bloom_filter_hook)

        num3 = str(13579)
        nums = [num, num2, num3]
        self.assertEqual(self.node.put(nums), [num3])
Beispiel #6
0
 def setUp(self):
     self.dir_ = tempfile.mkdtemp()
     self.node = Node(self.dir_)