def view_change_trigger_service(internal_bus, external_bus, timer, stasher, validators): # TODO: Use validators fixture data = ConsensusSharedData("some_name", genNodeNames(4), 0) data.node_mode = Mode.participating data.node_status = Status.started return ViewChangeTriggerService(data=data, timer=timer, bus=internal_bus, network=external_bus, db_manager=DatabaseManager(), stasher=stasher, is_master_degraded=lambda: False)
def _init_view_change_trigger_service( self) -> Optional[ViewChangeTriggerService]: if not self.isMaster: return None return ViewChangeTriggerService( data=self._consensus_data, timer=self.node.timer, bus=self.internal_bus, network=self._external_bus, db_manager=self.node.db_manager, stasher=self.stasher, metrics=self.metrics, is_master_degraded=self.node.monitor.isMasterDegraded)
def _service(name): data = consensus_data(name) data.node_mode = Mode.participating digest = cp_digest(DEFAULT_STABLE_CHKP) cp = Checkpoint(instId=0, viewNo=initial_view_no, seqNoStart=0, seqNoEnd=DEFAULT_STABLE_CHKP, digest=digest) data.checkpoints.append(cp) ViewChangeTriggerService(data=data, timer=timer, bus=internal_bus, network=external_bus, db_manager=DatabaseManager(), stasher=stasher, is_master_degraded=lambda: False) primaries_selector = RoundRobinConstantNodesPrimariesSelector(validators) service = ViewChangeService(data, timer, internal_bus, external_bus, stasher, primaries_selector) return service
def __init__(self, name: str, validators: List[str], primary_name: str, timer: TimerService, bus: InternalBus, network: ExternalBus, write_manager: WriteRequestManager, bls_bft_replica: BlsBftReplica = None): # ToDo: Maybe ConsensusSharedData should be initiated before and passed already prepared? self._network = network self._data = ConsensusSharedData(name, validators, 0) self._data.primary_name = generateName(primary_name, self._data.inst_id) self._timer = timer self.config = getConfig() self.stasher = StashingRouter(self.config.REPLICA_STASH_LIMIT, buses=[bus, network]) self._write_manager = write_manager self._primaries_selector = RoundRobinNodeRegPrimariesSelector(self._write_manager.node_reg_handler) self._freshness_checker = FreshnessChecker(freshness_timeout=self.config.STATE_FRESHNESS_UPDATE_INTERVAL) for ledger_id in [POOL_LEDGER_ID, DOMAIN_LEDGER_ID, CONFIG_LEDGER_ID]: self._freshness_checker.register_ledger(ledger_id=ledger_id, initial_time=self.get_time_for_3pc_batch()) self._orderer = OrderingService(data=self._data, timer=self._timer, bus=bus, network=network, write_manager=self._write_manager, bls_bft_replica=bls_bft_replica, freshness_checker=self._freshness_checker, get_time_for_3pc_batch=self.get_time_for_3pc_batch, stasher=self.stasher) self._checkpointer = CheckpointService(self._data, bus, network, self.stasher, write_manager.database_manager) self._view_changer = ViewChangeService(self._data, self._timer, bus, network, self.stasher, self._primaries_selector) self._view_change_trigger = ViewChangeTriggerService(data=self._data, timer=self._timer, bus=bus, network=network, db_manager=write_manager.database_manager, is_master_degraded=lambda: False, stasher=self.stasher) self._primary_connection_monitor = PrimaryConnectionMonitorService(data=self._data, timer=self._timer, bus=bus, network=network) self._freshness_monitor = FreshnessMonitorService(data=self._data, timer=self._timer, bus=bus, network=network, freshness_checker=self._freshness_checker, get_time_for_3pc_batch=self.get_time_for_3pc_batch) self._message_requestor = MessageReqService(self._data, bus, network) self._add_ledgers() # TODO: This is just for testing purposes only self._data.checkpoints.append( Checkpoint(instId=0, viewNo=0, seqNoStart=0, seqNoEnd=0, digest='4F7BsTMVPKFshM1MwLf6y23cid6fL3xMpazVoF9krzUw')) # ToDo: it should be done in Zero-view stage. write_manager.on_catchup_finished() # Simulate node behavior self._internal_bus = bus self._internal_bus.subscribe(NodeNeedViewChange, self.process_node_need_view_change) self._internal_bus.subscribe(Ordered, self.emulate_ordered_processing) # ToDo: ugly way to understand node_reg changing self._previous_node_reg = self._write_manager.node_reg_handler.committed_node_reg