Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
29 commits
Select commit Hold shift + click to select a range
d8b8608
feat(events): remove --x-emit-load-events CLI flag
glevco Apr 13, 2023
60a5764
feat(events): implement node state related methods on EventStorage
glevco Apr 13, 2023
6e1266c
feat(events): implement load phase related methods on EventManager
glevco Apr 13, 2023
c381a5b
feat(events): implement load phase event handling on HathorManager
glevco Apr 13, 2023
02f95a6
feat(events): update tests
glevco Apr 13, 2023
2eb1342
feat(events): implement event storage tests for new methods
glevco Apr 14, 2023
2b30bc9
feat(events): fix rocksdb event storage bugs
glevco Apr 14, 2023
2d33315
feat(events): fix bug on load phase events
glevco Apr 14, 2023
ce74889
feat(events): remove TODOs
glevco Apr 17, 2023
1e0fa87
feat(events): lint code and improve method name
glevco Apr 17, 2023
e071b4c
feat(events): add missing docstring and other minor changes
glevco Apr 18, 2023
8f32d43
feat(events): lint code
glevco Apr 18, 2023
d24de68
feat(events): fix bug in load phase events
glevco Apr 19, 2023
a4e44d3
feat(events): remove wrong docstring
glevco Apr 19, 2023
1b990e9
feat(events): remove emit-load-events tests from test_cli_builder
glevco Apr 20, 2023
a0872c0
feat(events): implement event queue feature state methods in event st…
glevco Apr 26, 2023
505b240
feat(events): set event_storage on HathorManager
glevco Apr 26, 2023
efb9797
feat(events): reorganize rebased code
glevco Apr 26, 2023
54029a2
chore(builder): fix tests
glevco Apr 26, 2023
5485e09
feat(events): reorganize event manager and storage initialization
glevco May 2, 2023
7f4cdc8
feat(events): implement DummyMiner
glevco Apr 22, 2023
85e2469
feat(events): implement test_fresh_start and test_single_chain
glevco Apr 23, 2023
6a5e5af
feat(events): implement test_single_chain_blocks_and_transactions
glevco Apr 24, 2023
4f94680
feat(events): implement test_reorg_blocks_and_transactions and improv…
glevco Apr 24, 2023
ba2b0c6
feat(events): implement event simulator scenarios
glevco Apr 24, 2023
963b5bf
feat(events): implement create_dummy_miner
glevco Apr 24, 2023
b06bd2c
feat(events): lint code
glevco Apr 24, 2023
819bc43
feat(events): implement missing abstract method
glevco May 4, 2023
74f9730
feat(events): stop simulator in tests
glevco May 8, 2023
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 8 additions & 5 deletions hathor/builder/builder.py
Original file line number Diff line number Diff line change
Expand Up @@ -83,6 +83,7 @@ def __init__(self) -> None:

self._event_manager: Optional[EventManager] = None
self._event_ws_factory: Optional[EventWebsocketFactory] = None
self._enable_event_queue: Optional[bool] = None

self._rocksdb_path: Optional[str] = None
self._rocksdb_storage: Optional[RocksDBStorage] = None
Expand Down Expand Up @@ -126,7 +127,6 @@ def build(self) -> BuildArtifacts:
consensus_algorithm = ConsensusAlgorithm(soft_voided_tx_ids, pubsub)

wallet = self._get_or_create_wallet()
event_storage = self._get_or_create_event_storage()
event_manager = self._get_or_create_event_manager()
tx_storage = self._get_or_create_tx_storage()
indexes = tx_storage.indexes
Expand Down Expand Up @@ -158,20 +158,22 @@ def build(self) -> BuildArtifacts:
if self._full_verification is not None:
kwargs['full_verification'] = self._full_verification

if self._enable_event_queue is not None:
kwargs['enable_event_queue'] = self._enable_event_queue

manager = HathorManager(
reactor,
pubsub=pubsub,
consensus_algorithm=consensus_algorithm,
peer_id=peer_id,
tx_storage=tx_storage,
event_storage=event_storage,
event_manager=event_manager,
network=self._network,
wallet=wallet,
rng=self._rng,
checkpoints=self._checkpoints,
capabilities=self._capabilities,
environment_info=get_environment_info(self._cmdline, peer_id.id),
event_manager=event_manager,
**kwargs
)

Expand Down Expand Up @@ -299,8 +301,8 @@ def _get_or_create_event_storage(self) -> EventStorage:

return self._event_storage

def _get_or_create_event_manager(self) -> Optional[EventManager]:
if self._event_manager is None and self._event_ws_factory is not None:
def _get_or_create_event_manager(self) -> EventManager:
if self._event_manager is None:
self._event_manager = EventManager(
reactor=self._get_reactor(),
pubsub=self._get_or_create_pubsub(),
Expand Down Expand Up @@ -385,6 +387,7 @@ def enable_wallet_index(self) -> 'Builder':

def enable_event_manager(self, *, event_ws_factory: EventWebsocketFactory) -> 'Builder':
self.check_if_can_modify()
self._enable_event_queue = True
self._event_ws_factory = event_ws_factory
return self

Expand Down
26 changes: 11 additions & 15 deletions hathor/builder/cli_builder.py
Original file line number Diff line number Diff line change
Expand Up @@ -143,19 +143,15 @@ def create_manager(self, reactor: PosixReactorBase, args: Namespace) -> HathorMa

pubsub = PubSubManager(reactor)

event_manager: Optional[EventManager] = None
if args.x_enable_event_queue:
self.event_ws_factory = EventWebsocketFactory(reactor, event_storage)
event_manager = EventManager(
event_storage=event_storage,
event_ws_factory=self.event_ws_factory,
pubsub=pubsub,
reactor=reactor,
emit_load_events=args.x_emit_load_events
)
else:
self.check_or_raise(not args.x_emit_load_events, '--x-emit-load-events cannot be used without '
'--x-enable-event-queue')

event_manager = EventManager(
event_storage=event_storage,
event_ws_factory=self.event_ws_factory,
pubsub=pubsub,
reactor=reactor
)

if args.wallet_index and tx_storage.indexes is not None:
self.log.debug('enable wallet indexes')
Expand All @@ -181,7 +177,6 @@ def create_manager(self, reactor: PosixReactorBase, args: Namespace) -> HathorMa
network=network,
hostname=hostname,
tx_storage=tx_storage,
event_storage=event_storage,
event_manager=event_manager,
wallet=self.wallet,
stratum_port=args.stratum,
Expand All @@ -191,7 +186,8 @@ def create_manager(self, reactor: PosixReactorBase, args: Namespace) -> HathorMa
enable_sync_v2=enable_sync_v2,
consensus_algorithm=consensus_algorithm,
environment_info=get_environment_info(args=str(args), peer_id=peer_id.id),
full_verification=full_verification
full_verification=full_verification,
enable_event_queue=bool(args.x_enable_event_queue)
)

if args.allow_mining_without_peers:
Expand Down Expand Up @@ -235,7 +231,7 @@ def create_manager(self, reactor: PosixReactorBase, args: Namespace) -> HathorMa

self.manager.enable_event_queue = True
self.log.info('--x-enable-event-queue flag provided. '
'The events detected by the full node will be stored and retrieved to clients')
'The events detected by the full node will be stored and can be retrieved by clients')

for description in args.listen:
self.manager.add_listen_address(description)
Expand Down Expand Up @@ -508,7 +504,7 @@ def create_resources(self, args: Namespace) -> server.Site:
ws_factory.subscribe(self.manager.pubsub)

# Event websocket resource
if args.x_enable_event_queue and self.event_ws_factory is not None:
if args.x_enable_event_queue:
root.putChild(b'event_ws', WebSocketResource(self.event_ws_factory))
root.putChild(b'event', EventResource(self.manager._event_manager))

Expand Down
2 changes: 1 addition & 1 deletion hathor/cli/events_simulator/events_simulator.py
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ def execute(args: Namespace) -> None:

storage = EventMemoryStorage()

for event in args.scenario.get_events():
for event in args.scenario.value:
storage.save_event(event)

factory = EventWebsocketFactory(reactor, storage)
Expand Down
Loading