def migrate_txn_log(db_dir, db_name): def put_into_seq_no_db(txn): # If there is no reqId, then it's genesis txn if get_req_id(txn) is None: return txn_new = copy.deepcopy(txn) operation = get_payload_data(txn_new) operation[TXN_TYPE] = get_type(txn_new) dct = { f.IDENTIFIER.nm: get_from(txn_new), f.REQ_ID.nm: get_req_id(txn_new), OPERATION: operation, } if get_protocol_version(txn_new) is not None: dct[f.PROTOCOL_VERSION.nm] = get_protocol_version(txn_new) digest = sha256(serialize_msg_for_signing(dct)).hexdigest() seq_no = get_seq_no(txn_new) ledger_id = get_ledger_id_by_txn_type(operation[TXN_TYPE]) line_to_record = str(ledger_id) + ReqIdrToTxn.delimiter + str(seq_no) dest_seq_no_db_storage.put(digest, line_to_record) return digest new_db_name = db_name + '_new' old_path = os.path.join(db_dir, db_name) new_path = os.path.join(db_dir, new_db_name) new_seqno_db_name = config.seqNoDbName + '_new' try: dest_seq_no_db_storage = initKeyValueStorage(config.reqIdToTxnStorage, db_dir, new_seqno_db_name) except Exception: logger.error(traceback.print_exc()) logger.error("Could not open new seq_no_db storage") return False # open new and old ledgers try: src_storage = KeyValueStorageRocksdbIntKeys(db_dir, db_name, read_only=True) except Exception: logger.error(traceback.print_exc()) logger.error("Could not open old ledger: {}".format(os.path.join(db_dir, db_name))) return False try: dest_storage = KeyValueStorageRocksdbIntKeys(db_dir, new_db_name) except Exception: logger.error(traceback.print_exc()) logger.error("Could not open new ledger: {}".format(os.path.join(db_dir, new_db_name))) return False # put values from old ledger to the new one try: for key, val in src_storage.iterator(): key = key.decode() val = ledger_txn_serializer.deserialize(val) new_val = transform_to_new_format(txn=val, seq_no=int(key)) digest = put_into_seq_no_db(new_val) # add digest into txn if get_req_id(new_val): new_val[TXN_PAYLOAD][TXN_PAYLOAD_METADATA][TXN_PAYLOAD_METADATA_DIGEST] = digest new_val = ledger_txn_serializer.serialize(new_val) dest_storage.put(key, new_val) except Exception: logger.error(traceback.print_exc()) logger.error("Could not put key/value to the new ledger '{}'".format(db_name)) return False src_storage.close() dest_storage.close() dest_seq_no_db_storage.close() # Remove old ledger try: shutil.rmtree(old_path) except Exception: logger.error(traceback.print_exc()) logger.error("Could not remove old ledger: {}" .format(old_path)) return False # Rename new ledger to old one try: shutil.move(new_path, old_path) except Exception: logger.error(traceback.print_exc()) logger.error("Could not rename temporary new ledger from '{}' to '{}'" .format(new_path, old_path)) return False try: set_own_perm("indy", old_path) except Exception: pass return True
def migrate_txn_log(db_dir, db_name): def put_into_seq_no_db(txn): # If there is no reqId, then it's genesis txn if get_req_id(txn) is None: return txn_new = copy.deepcopy(txn) operation = get_payload_data(txn_new) operation[TXN_TYPE] = get_type(txn_new) dct = { f.IDENTIFIER.nm: get_from(txn_new), f.REQ_ID.nm: get_req_id(txn_new), OPERATION: operation, } if get_protocol_version(txn_new) is not None: dct[f.PROTOCOL_VERSION.nm] = get_protocol_version(txn_new) digest = sha256(serialize_msg_for_signing(dct)).hexdigest().encode() seq_no = get_seq_no(txn_new) ledger_id = get_ledger_id_by_txn_type(operation[TXN_TYPE]) line_to_record = str(ledger_id) + ReqIdrToTxn.delimiter + str(seq_no) dest_seq_no_db_storage.put(digest, line_to_record) return digest new_db_name = db_name + '_new' old_path = os.path.join(db_dir, db_name) new_path = os.path.join(db_dir, new_db_name) new_seqno_db_name = config.seqNoDbName + '_new' try: dest_seq_no_db_storage = initKeyValueStorage(config.reqIdToTxnStorage, db_dir, new_seqno_db_name) except Exception: logger.error(traceback.print_exc()) logger.error("Could not open new seq_no_db storage") return False # open new and old ledgers try: src_storage = KeyValueStorageRocksdbIntKeys(db_dir, db_name, read_only=True) except Exception: logger.error(traceback.print_exc()) logger.error("Could not open old ledger: {}".format( os.path.join(db_dir, db_name))) return False try: dest_storage = KeyValueStorageRocksdbIntKeys(db_dir, new_db_name) except Exception: logger.error(traceback.print_exc()) logger.error("Could not open new ledger: {}".format( os.path.join(db_dir, new_db_name))) return False # put values from old ledger to the new one try: for key, val in src_storage.iterator(): key = key.decode() val = ledger_txn_serializer.deserialize(val) new_val = transform_to_new_format(txn=val, seq_no=int(key)) digest = put_into_seq_no_db(new_val) # add digest into txn if get_req_id(new_val): new_val[TXN_PAYLOAD][TXN_PAYLOAD_METADATA][ TXN_PAYLOAD_METADATA_DIGEST] = digest new_val = ledger_txn_serializer.serialize(new_val) dest_storage.put(key, new_val) except Exception: logger.error(traceback.print_exc()) logger.error( "Could not put key/value to the new ledger '{}'".format(db_name)) return False src_storage.close() dest_storage.close() dest_seq_no_db_storage.close() # Remove old ledger try: shutil.rmtree(old_path) except Exception: logger.error(traceback.print_exc()) logger.error("Could not remove old ledger: {}".format(old_path)) return False # Rename new ledger to old one try: shutil.move(new_path, old_path) except Exception: logger.error(traceback.print_exc()) logger.error( "Could not rename temporary new ledger from '{}' to '{}'".format( new_path, old_path)) return False try: set_own_perm("indy", old_path) except Exception: pass return True
def migrate_txn_log(db_dir, db_name): new_db_name = db_name + '_new' old_path = os.path.join(db_dir, db_name) new_path = os.path.join(db_dir, new_db_name) # open new and old ledgers try: src_storage = KeyValueStorageRocksdbIntKeys(db_dir, db_name, read_only=True) except Exception: logger.error(traceback.print_exc()) logger.error("Could not open old ledger: {}".format( os.path.join(db_dir, db_name))) return False try: dest_storage = KeyValueStorageRocksdbIntKeys(db_dir, new_db_name) except Exception: logger.error(traceback.print_exc()) logger.error("Could not open new ledger: {}".format( os.path.join(db_dir, new_db_name))) return False # put values from old ledger to the new one try: for key, val in src_storage.iterator(): val = ledger_txn_serializer.deserialize(val) new_val = transform_to_new_format(txn=val, seq_no=int(key)) new_val = ledger_txn_serializer.serialize(new_val) dest_storage.put(key, new_val) except Exception: logger.error(traceback.print_exc()) logger.error( "Could not put key/value to the new ledger '{}'".format(db_name)) return False src_storage.close() dest_storage.close() # Remove old ledger try: shutil.rmtree(old_path) except Exception: logger.error(traceback.print_exc()) logger.error("Could not remove old ledger: {}".format(old_path)) return False # Rename new ledger to old one try: shutil.move(new_path, old_path) except Exception: logger.error(traceback.print_exc()) logger.error( "Could not rename temporary new ledger from '{}' to '{}'".format( new_path, old_path)) return False set_own_perm("indy", old_path) return True