def migrate_all_hash_stores(node_data_directory): # the new hash store (merkle tree) will be recovered from the new transaction log after re-start # just delete the current hash store new_merkle_nodes = os.path.join(node_data_directory, '_merkleNodes') new_merkle_leaves = os.path.join(node_data_directory, '_merkleLeaves') new_merkle_nodes_bin = os.path.join( node_data_directory, '_merkleNodes.bin') new_merkle_leaves_bin = os.path.join( node_data_directory, '_merkleLeaves.bin') new_merkle_nodes_config_bin = os.path.join( node_data_directory, 'config_merkleNodes.bin') new_merkle_leaves_config_bin = os.path.join( node_data_directory, 'config_merkleLeaves.bin') if os.path.exists(new_merkle_nodes): shutil.rmtree(new_merkle_nodes) if os.path.exists(new_merkle_leaves): shutil.rmtree(new_merkle_leaves) if os.path.exists(new_merkle_nodes_bin): os.remove(new_merkle_nodes_bin) if os.path.exists(new_merkle_leaves_bin): os.remove(new_merkle_leaves_bin) if os.path.exists(new_merkle_nodes_config_bin): os.remove(new_merkle_nodes_config_bin) if os.path.exists(new_merkle_leaves_config_bin): os.remove(new_merkle_leaves_config_bin) # open new Ledgers fields = getTxnOrderedFields() __open_old_ledger(node_data_directory, config.poolTransactionsFile, 'pool', serializer=JsonSerializer()) __open_old_ledger(node_data_directory, config.domainTransactionsFile, 'domain', serializer=CompactSerializer(fields=fields)) __open_old_ledger(node_data_directory, config.configTransactionsFile, 'config', serializer=JsonSerializer())
def _generate_genesis_files(self): pool_txns, domain_txns = self._split_pool_and_domain() # TODO make Ledger a context manager pl = TestNetworkSetup.init_pool_ledger(appendToLedgers=False, baseDir=self.base_dir, config=self.config, envName='test') pl_lines = self._add_and_stop(pool_txns, pl) dl = TestNetworkSetup.init_domain_ledger( appendToLedgers=False, baseDir=self.base_dir, config=self.config, envName='test', domainTxnFieldOrder=getTxnOrderedFields()) dl_lines = self._add_and_stop(domain_txns, dl) return adict(pool=adict(lines=pl_lines, root=pl.root_hash, size=pl.size), domain=adict(lines=dl_lines, root=dl.root_hash, size=dl.size))
def getPrimaryStorage(self): """ This is usually an implementation of Ledger """ if self.config.primaryStorage is None: fields = getTxnOrderedFields() defaultTxnFile = os.path.join(self.basedirpath, self.config.domainTransactionsFile) if not os.path.exists(defaultTxnFile): logger.debug( "Not using default initialization file for " "domain ledger, since it does not exist: {}".format( defaultTxnFile)) defaultTxnFile = None return Ledger(CompactMerkleTree(hashStore=self.hashStore), dataDir=self.dataLocation, serializer=CompactSerializer(fields=fields), fileName=self.config.domainTransactionsFile, ensureDurability=self.config.EnsureLedgerDurability, defaultFile=defaultTxnFile) else: return initStorage(self.config.primaryStorage, name=self.name + NODE_PRIMARY_STORAGE_SUFFIX, dataDir=self.dataLocation, config=self.config)
def migrate_genesis_txn(base_dir): for suffix in ('sandbox', 'live', 'local'): old_domain_genesis = os.path.join( base_dir, 'transactions_{}'.format(suffix)) old_pool_genesis = os.path.join( base_dir, 'pool_transactions_{}'.format(suffix)) new_domain_genesis = os.path.join( base_dir, 'domain_transactions_{}_genesis'.format(suffix)) new_pool_genesis = os.path.join( base_dir, 'pool_transactions_{}_genesis'.format(suffix)) if os.path.exists(old_domain_genesis): os.remove(old_domain_genesis) if os.path.exists(old_pool_genesis): os.remove(old_pool_genesis) if os.path.exists(new_domain_genesis): old_ser = CompactSerializer(getTxnOrderedFields()) new_ser = JsonSerializer() with open(new_domain_genesis, 'r') as f1: with open(old_domain_genesis, 'w') as f2: for line in store_utils.cleanLines(f1): txn = new_ser.deserialize(line) txn = old_ser.serialize(txn) f2.write(txn) os.remove(new_domain_genesis) if os.path.exists(new_pool_genesis): os.rename(new_pool_genesis, old_domain_genesis)
def getPrimaryStorage(self): """ This is usually an implementation of Ledger """ if self.config.primaryStorage is None: fields = getTxnOrderedFields() defaultTxnFile = os.path.join(self.basedirpath, self.config.domainTransactionsFile) if not os.path.exists(defaultTxnFile): logger.debug("Not using default initialization file for " "domain ledger, since it does not exist: {}" .format(defaultTxnFile)) defaultTxnFile = None return Ledger(CompactMerkleTree(hashStore=self.hashStore), dataDir=self.dataLocation, serializer=CompactSerializer(fields=fields), fileName=self.config.domainTransactionsFile, ensureDurability=self.config.EnsureLedgerDurability, defaultFile=defaultTxnFile) else: return initStorage(self.config.primaryStorage, name=self.name + NODE_PRIMARY_STORAGE_SUFFIX, dataDir=self.dataLocation, config=self.config)
def addTxnToFile(dir, file, txns, fields=getTxnOrderedFields()): ledger = Ledger(CompactMerkleTree(), dataDir=dir, serializer=CompactSerializer(fields=fields), fileName=file) for txn in txns: ledger.add(txn) ledger.stop()
def addTxnToFile(dir, file, txns, fields=getTxnOrderedFields()): ledger = Ledger(CompactMerkleTree(), dataDir=dir, serializer=CompactSerializer(fields=fields), fileName=file) for txn in txns: ledger.add(txn) ledger.stop()
def getPrimaryStorage(self): """ This is usually an implementation of Ledger """ if self.config.primaryStorage is None: fields = getTxnOrderedFields() return Ledger(CompactMerkleTree(hashStore=self.hashStore), dataDir=self.dataLocation, serializer=CompactSerializer(fields=fields), fileName=self.config.domainTransactionsFile, ensureDurability=self.config.EnsureLedgerDurability) else: return initStorage(self.config.primaryStorage, name=self.name + NODE_PRIMARY_STORAGE_SUFFIX, dataDir=self.dataLocation, config=self.config)
def migrate_all_ledgers_for_node(node_data_directory): # using default ledger names __migrate_ledger(node_data_directory, config.poolTransactionsFile, config.poolTransactionsFile, serializer=JsonSerializer()) __migrate_ledger( node_data_directory, config.configTransactionsFile, config.configTransactionsFile, serializer=JsonSerializer()) # domain ledger uses custom CompactSerializer and old file name fields = getTxnOrderedFields() __migrate_ledger(node_data_directory, config.domainTransactionsFile.replace( 'domain_', ''), config.domainTransactionsFile, serializer=CompactSerializer(fields=fields))
def _generate_genesis_files(self): pool_txns, domain_txns = self._split_pool_and_domain() # TODO make Ledger a context manager pl = TestNetworkSetup.init_pool_ledger(appendToLedgers=False, baseDir=self.base_dir, config=self.config, envName='test') pl_lines = self._add_and_stop(pool_txns, pl) dl = TestNetworkSetup.init_domain_ledger(appendToLedgers=False, baseDir=self.base_dir, config=self.config, envName='test', domainTxnFieldOrder=getTxnOrderedFields()) dl_lines = self._add_and_stop(domain_txns, dl) return adict(pool=adict(lines=pl_lines, root=pl.root_hash, size=pl.size), domain=adict(lines=dl_lines, root=dl.root_hash, size=dl.size))
def domainTxnOrderedFields(): return getTxnOrderedFields()
def txnFieldOrdering(self): fields = getTxnOrderedFields() return updateFieldsWithSeqNo(fields)
def txnFieldOrdering(self): fields = getTxnOrderedFields() return updateFieldsWithSeqNo(fields)
def addTxnToGenesisFile(dir, file, txns, fields=getTxnOrderedFields()): ledger = create_genesis_txn_init_ledger(dir, file) for txn in txns: ledger.add(txn) ledger.stop()
def domainTxnOrderedFields(): return getTxnOrderedFields()