def post_batch_applied(self, three_pc_batch: ThreePcBatch, prev_handler_result=None): node_reg = list(self.node.nodeReg.keys()) number_of_inst = getMaxFailures(len(node_reg)) + 1 view_no = self.node.viewNo if three_pc_batch.original_view_no is None else three_pc_batch.original_view_no validators = TxnPoolManager.calc_node_names_ordered_by_rank( node_reg, copy.deepcopy(self.node.nodeIds)) three_pc_batch.primaries = self.node.primaries_selector.select_primaries( view_no=view_no, instance_count=number_of_inst, validators=validators) return three_pc_batch.primaries
def post_batch_applied(self, three_pc_batch: ThreePcBatch, prev_handler_result=None): view_no = self.node.viewNo if three_pc_batch.original_view_no is None else three_pc_batch.original_view_no primaries = self.get_primaries(view_no) if primaries is None: # In case of reordering after view_change # we can trust for list of primaries from PrePrepare # because this PrePrepare was validated on all the nodes primaries = three_pc_batch.primaries self.set_primaries(view_no, primaries) three_pc_batch.primaries = primaries return three_pc_batch.primaries
def post_batch_applied(self, three_pc_batch: ThreePcBatch, prev_handler_result=None): node_txn_count = 0 last_state = None if len(self.node_states) == 0: last_state = self.create_node_state_from_current_node() else: last_state = copy.deepcopy(self.node_states[-1]) for digest in three_pc_batch.valid_digests: if digest not in self.node.requests: raise LogicError('Request is absent when it is applying') request = self.node.requests[digest].request if request.operation.get(TXN_TYPE) == NODE \ and request.operation.get(DATA).get(SERVICES) is not None: node_txn_count += 1 node_nym = request.operation.get(TARGET_NYM) node_name = request.operation.get(DATA).get(ALIAS) curName = last_state.node_ids.get(node_nym) if curName is None: last_state.node_ids[node_nym] = node_name elif curName != node_name: raise LogicError("Alias inconsistency") serv = request.operation.get(DATA).get(SERVICES) if VALIDATOR in serv and node_name not in last_state.node_reg: last_state.node_reg.append(node_name) elif serv == [] and node_name in last_state.node_reg: last_state.node_reg.remove(node_name) count = self.get_required_number_of_instances( len(last_state.node_reg)) if last_state.number_of_inst != count: last_state.number_of_inst = count new_validators = TxnPoolManager.calc_node_names_ordered_by_rank( last_state.node_reg, last_state.node_ids) last_state.primaries = self.node.primaries_selector.select_primaries( view_no=self.node.viewNo, instance_count=last_state.number_of_inst, validators=new_validators) # We will save node state at every pool batch, so we could revert it correctly self.node_states.append(last_state) three_pc_batch.primaries = last_state.primaries return last_state.primaries
def post_batch_applied(self, three_pc_batch: ThreePcBatch, prev_handler_result=None): view_no = three_pc_batch.original_view_no if three_pc_batch.original_view_no is not None else three_pc_batch.view_no three_pc_batch.primaries = self.primaries_selector.select_primaries( view_no)