5.2. Iroha Shared Objects Description
This document describes access to shared objects in a multithreaded scenario, whether or not is properly synchronized.
5.2.1. Document Structure
Each component in this document has its own diagram describing all members, and whether or not access to them is synchronized or not:
- Synchronized
- Not Synchronized
5.2.2. Query Service
Query Service |
Cache |
Query Processor |
Query service is a grpc endpoint for queries from clients.
It has cache, from which it receives responses.
Access to the cache is protected by an internal mutex.
Query processor actually fetches data from the storage.
It is not synchronized here since all synchronization is internal.
5.2.3. Query Processor
Query Processor |
Query Response Observable |
Block Query Observable |
Storage |
5.2.4. Transaction Service
Transaction Service |
Response Cache |
Transaction Processor |
Storage |
Transaction Service uses response cache to send transaction statuses.
Also, transaction processor is synchronized in status streaming.
5.2.5. Transaction Processor
Transaction Processor |
Peer Communication Service |
Transaction Status Notifier |
Proposal Set |
Candidate Set |
5.2.6. Simulator
Simulator |
Proposal Notifier |
Block Notifier |
Stateful Validator |
Temporary Factory |
Block Query |
5.2.7. Synchronizer
Synchronizer |
Chain Validator |
Mutable Factory |
Block Loader |
5.2.8. Yac Gate
Yac Gate |
Hash Gate |
Peer Orderer |
Hash Provider |
Block Creator |
Block Loader |
5.2.9. Yac
Yac |
Yac Vote Storage |
Yac Network |