Revision 7ca7bb08 pithos/backends/modular.py

b/pithos/backends/modular.py
123 123
        __import__(block_module)
124 124
        self.block_module = sys.modules[block_module]
125 125
        
126
        if block_path and not os.path.exists(block_path):
127
            os.makedirs(block_path)
128
        if not os.path.isdir(block_path):
129
            raise RuntimeError("Cannot open path '%s'" % (block_path,))
130
        
131
        params = {'blocksize': self.block_size,
132
                  'blockpath': os.path.join(block_path + '/blocks'),
133
                  'hashtype': self.hash_algorithm}
134
        self.blocker = self.block_module.Blocker(**params)
135
        params = {'mappath': os.path.join(block_path + '/maps'),
136
                  'namelen': self.blocker.hashlen}
137
        self.mapper = self.block_module.Mapper(**params)
126
        params = {'path': block_path,
127
                  'block_size': self.block_size,
128
                  'hash_algorithm': self.hash_algorithm}
129
        self.store = self.block_module.Store(**params)
138 130
    
139 131
    def close(self):
140 132
        self.wrapper.close()
......
525 517
        self._can_read(user, account, container, name)
526 518
        path, node = self._lookup_object(account, container, name)
527 519
        props = self._get_version(node, version)
528
        hashmap = self.mapper.map_retr(binascii.unhexlify(props[self.HASH]))
520
        hashmap = self.store.map_get(binascii.unhexlify(props[self.HASH]))
529 521
        return props[self.SIZE], [binascii.hexlify(x) for x in hashmap]
530 522
    
531 523
    def _update_object_hash(self, user, account, container, name, size, hash, meta={}, replace_meta=False, permissions=None):
......
567 559
            hashmap = [self.put_block('')]
568 560
        map = HashMap(self.block_size, self.hash_algorithm)
569 561
        map.extend([binascii.unhexlify(x) for x in hashmap])
570
        missing = self.blocker.block_ping(map)
562
        missing = self.store.block_search(map)
571 563
        if missing:
572 564
            ie = IndexError()
573 565
            ie.data = [binascii.hexlify(x) for x in missing]
......
575 567
        
576 568
        hash = map.hash()
577 569
        dest_version_id = self._update_object_hash(user, account, container, name, size, binascii.hexlify(hash), meta, replace_meta, permissions)
578
        self.mapper.map_stor(hash, map)
570
        self.store.map_put(hash, map)
579 571
        return dest_version_id
580 572
    
581 573
    def _copy_object(self, user, src_account, src_container, src_name, dest_account, dest_container, dest_name, dest_meta={}, replace_meta=False, permissions=None, src_version=None):
......
660 652
        """Return a block's data."""
661 653
        
662 654
        logger.debug("get_block: %s", hash)
663
        blocks = self.blocker.block_retr((binascii.unhexlify(hash),))
664
        if not blocks:
655
        block = self.store.block_get(binascii.unhexlify(hash))
656
        if not block:
665 657
            raise NameError('Block does not exist')
666
        return blocks[0]
658
        return block
667 659
    
668 660
    @backend_method(autocommit=0)
669 661
    def put_block(self, data):
670 662
        """Store a block and return the hash."""
671 663
        
672 664
        logger.debug("put_block: %s", len(data))
673
        hashes, absent = self.blocker.block_stor((data,))
674
        return binascii.hexlify(hashes[0])
665
        return binascii.hexlify(self.store.block_put(data))
675 666
    
676 667
    @backend_method(autocommit=0)
677 668
    def update_block(self, hash, data, offset=0):
......
680 671
        logger.debug("update_block: %s %s %s", hash, len(data), offset)
681 672
        if offset == 0 and len(data) == self.block_size:
682 673
            return self.put_block(data)
683
        h, e = self.blocker.block_delta(binascii.unhexlify(hash), ((offset, data),))
674
        h = self.store.block_update(binascii.unhexlify(hash), offset, data)
684 675
        return binascii.hexlify(h)
685 676
    
686 677
    # Path functions.

Also available in: Unified diff