Goal is a communication protocol that able to work between nodes with different Ignite versions.
Prerequisites:
- It's an internal communication protocol between Ignite nodes:
- There is a limited amount of peers, and all peers are aware of each other.
- All peers are aware of messages schemas.
- At most time peers use schemas of same version. In short period of time (during RU) schemas might differ, but not much (few messages might differ with few fields only).
- It is proposed to provide compatibility between versions that differ by 1 minor version, for example between 2.20.X and 2.19.X (but not between 2.20.X and 2.18.X).
- Peers are aware of messages schemas (
Message class). Older versions aren't aware of new fields only. - Schema changes are rare.
Code changes should be minimal- Code changes should be minimal.
Current implementation of Communication protocol is inspired by Avro:
- Order of fields is guaranteed → it send messages as byte stream serializing fields one by one, no delimiters are used between fields and messages.
- There is API for sending field names for schema resolving.
Communication protocol
Communication protocol consist of 2 parts:
...