Пример #1
0
 def get_storage_idxs(self):
     KEY = self._key("storage_idxs")
     if not self.config_db.has_key(KEY):
         logging.debug("--- Storage manager knows of no storage idxs")
         return []
     idxs_str = self.config_db[KEY]
     storage_idxs = IE.binary_decode_int_varlen_list(idxs_str)
     logging.debug("--- Storage manager knows of idxs: %s" % str(storage_idxs))
     return storage_idxs
Пример #2
0
    def __init__(self, db_manager, txn_manager):
        self.db_manager = db_manager
        self.txn_manager = txn_manager
        self.block_manager = BlockManager.BlockManager(self.db_manager, self.txn_manager)
        self.block_sequencer = BlockSequencer.BlockSequencer(
            self.db_manager, self.txn_manager, self, self.block_manager
        )
        self.report_manager = Reporting.DummyReportManager()
        self.block_listeners = []

        self.config_db = db_manager.get_database_btree("config.db", "storage", txn_manager)
        logging.debug("Loaded storage manager db")
        for key, val in self.config_db.iteritems():
            logging.debug("Storage manager db: [%s]->[%s]" % (base64.b64encode(key), (base64.b64encode(val))))
        self.block_container_db = db_manager.get_database_hash("storage.db", "blocks", txn_manager)
        logging.debug("********** Loaded storage manager logs")
        for key, val in self.config_db.iteritems():
            logging.debug("Storage manager blocks: [%s]->[%s]" % (base64.b64encode(key), base64.b64encode(val)))

        # Mapping of storage sequences to indices and vice versa
        # The storage sequence data consists of storage index and sequence
        # ID string
        # In the config_db we store the persistent copy of the information
        # in the seq_to_index and index_to_seq:
        # repo.%index.seq = sequence
        # repo.%index.storage = storage index
        # repo.next_index = <the next index>
        self.seq_to_index = {}
        self.index_to_seq = {}
        NS_KEY = self._key("next_seq")
        if self.config_db.has_key(NS_KEY):
            self.next_seq_idx = int(self.config_db[NS_KEY])
        else:
            self.next_seq_idx = 0
        SEQ_PREFIX = self._key("SEQ.")
        for key, val in self.config_db.iteritems_prefix(SEQ_PREFIX):
            sequence_id = key[len(SEQ_PREFIX) :]
            storage_idx, sequence_idx = IE.binary_decode_int_varlen_list(val)
            self.seq_to_index[sequence_id] = (storage_idx, sequence_idx)
            self.index_to_seq[sequence_idx] = (storage_idx, sequence_id)