Revision 47462eda snf-pithos-backend/pithos/backends/lib/hashfiler/blocker.py

b/snf-pithos-backend/pithos/backends/lib/hashfiler/blocker.py
48 48

  
49 49
class Blocker(object):
50 50
    """Blocker.
51
       Required constructor parameters: blocksize, blockpath, hashtype,
52
       blockpool.
51
       Required constructor parameters: blocksize, blockpath, hashtype.
52
       Optional blockpool.
53 53
    """
54 54

  
55 55
    def __init__(self, **params):
56
        params['blockpool'] = 'blocks'
57
        self.rblocker = RadosBlocker(**params)
58
        self.fblocker = FileBlocker(**params)
59
        self.hashlen = self.rblocker.hashlen
60

  
61
#    def _get_rear_block(self, blkhash, create=0):
62
#        return self.rblocker._get_rear_block(blkhash, create)
56
        self.rblocker = None
57
        try:
58
            if params['blockpool']:
59
                self.rblocker = RadosBlocker(**params)
60
        except:
61
            pass
63 62

  
64
#    def _check_rear_block(self, blkhash):
65
#        return self.rblocker._check_rear_block(blkhash)
66
#        return self.rblocker._check_rear_block(blkhash) and
67
#                self.fblocker._check_rear_block(blkhash)
63
        self.fblocker = FileBlocker(**params)
64
        self.hashlen = self.fblocker.hashlen
68 65

  
69 66
    def block_hash(self, data):
70 67
        """Hash a block of data"""
71
        return self.rblocker.block_hash(data)
68
        return self.fblocker.block_hash(data)
72 69

  
73 70
    def block_ping(self, hashes):
74 71
        """Check hashes for existence and
75 72
           return those missing from block storage.
76 73
        """
77
#        return self.rblocker.block_ping(hashes)
78
        r = self.rblocker.block_ping(hashes)
74
        r = []
75
        if self.rblocker:
76
            r = self.rblocker.block_ping(hashes)
79 77
        f = self.fblocker.block_ping(hashes)
80 78
        return union(r, f)
81 79

  
......
89 87
           missing is a list of indices in that list indicating
90 88
           which blocks were missing from the store.
91 89
        """
92
#        return self.rblocker.block_stor(blocklist)
93
        (hashes, r_missing) = self.rblocker.block_stor(blocklist)
94
        (_, f_missing) = self.fblocker.block_stor(blocklist)
90
        r_missing = []
91
        (hashes, f_missing) = self.fblocker.block_stor(blocklist)
92
        if self.rblocker:
93
            (_, r_missing) = self.rblocker.block_stor(blocklist)
95 94
        return (hashes, union(r_missing, f_missing))
96 95

  
97 96

  
......
100 99
           and a data 'patch' applied at offset. Return:
101 100
           (the hash of the new block, if the block already existed)
102 101
        """
103
#        return self.rblocker.block_delta(blkhash, offset, data)
104

  
102
        r_hash = None
103
        r_existed = True
105 104
        (f_hash, f_existed) = self.fblocker.block_delta(blkhash, offset, data)
106
        (r_hash, r_existed) = self.rblocker.block_delta(blkhash, offset, data)
105
        if self.rblocker:
106
            (r_hash, r_existed) = self.rblocker.block_delta(blkhash, offset, data)
107 107
        if not r_hash and not f_hash:
108 108
            return None, None
109
        if not r_hash:
109
        if self.rblocker and not r_hash:
110 110
            block = self.fblocker.block_retr((blkhash,))
111 111
            if not block:
112 112
                return None, None

Also available in: Unified diff