def _serialize_deserialize(self, msg): serialized_msg = Batched().prepForSending(msg) serialized_msg = ZStack.serializeMsg(serialized_msg) new_msg = node_message_factory.get_instance( **ZStack.deserializeMsg(serialized_msg)) if not isinstance(msg, MessageRep): assert MessageProcessor().toDict(msg) == MessageProcessor().toDict(new_msg), \ "\n {} \n {}".format(MessageProcessor().toDict(msg), MessageProcessor().toDict(new_msg)) return new_msg
def _serialize_deserialize(self, msg): serialized_msg = Batched().prepForSending(msg) serialized_msg = ZStack.serializeMsg(serialized_msg) new_msg = node_message_factory.get_instance(**ZStack.deserializeMsg(serialized_msg)) # TODO: Figure out why BatchIDs are not deserialized back if not isinstance(msg, (MessageRep, OldViewPrePrepareRequest, OldViewPrePrepareReply)): assert MessageProcessor().toDict(msg) == MessageProcessor().toDict(new_msg), \ "\n {} \n {}".format(MessageProcessor().toDict(msg), MessageProcessor().toDict(new_msg)) return new_msg
def handleOneNodeMsg(self, wrappedMsg, excludeFromCli=None) -> None: """ Handles single message from a node, and appends it to a queue :param wrappedMsg: Reply received by the client from the node """ self.inBox.append(wrappedMsg) msg, frm = wrappedMsg # Do not print result of transaction type `POOL_LEDGER_TXNS` on the CLI ledgerTxnTypes = (POOL_LEDGER_TXNS, LEDGER_STATUS, CONSISTENCY_PROOF, CATCHUP_REP) printOnCli = not excludeFromCli and msg.get(OP_FIELD_NAME) not \ in ledgerTxnTypes logger.info("Client {} got msg from node {}: {}". format(self.name, frm, msg), extra={"cli": printOnCli}) if OP_FIELD_NAME in msg: if msg[OP_FIELD_NAME] in ledgerTxnTypes and self.ledger: cMsg = node_message_factory.get_instance(**msg) if msg[OP_FIELD_NAME] == POOL_LEDGER_TXNS: self.poolTxnReceived(cMsg, frm) if msg[OP_FIELD_NAME] == LEDGER_STATUS: self.ledgerManager.processLedgerStatus(cMsg, frm) if msg[OP_FIELD_NAME] == CONSISTENCY_PROOF: self.ledgerManager.processConsistencyProof(cMsg, frm) if msg[OP_FIELD_NAME] == CATCHUP_REP: self.ledgerManager.processCatchupRep(cMsg, frm) elif msg[OP_FIELD_NAME] == REQACK: self.reqRepStore.addAck(msg, frm) self._got_expected(msg, frm) elif msg[OP_FIELD_NAME] == REQNACK: self.reqRepStore.addNack(msg, frm) self._got_expected(msg, frm) elif msg[OP_FIELD_NAME] == REJECT: self.reqRepStore.addReject(msg, frm) self._got_expected(msg, frm) elif msg[OP_FIELD_NAME] == REPLY: result = msg[f.RESULT.nm] identifier = get_reply_itentifier(result) reqId = get_reply_reqId(result) numReplies = self.reqRepStore.addReply(identifier, reqId, frm, result) self._got_expected(msg, frm) self.postReplyRecvd(identifier, reqId, frm, result, numReplies)