Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

In Stable mode logic of exchanging messages is not changed. Between nodes open channel, messages are written to the channel one by one as byte stream. There is no delimeters between messages, each message starts with direct type. Reader knows reads full message with Message#readFrom logic.

Message headerMessage

2 bytes: direct type

fields

Rolling upgrade mode 

In Rolling upgrade mode logic is different, because node can't know whether it reads full message - Message#readFrom can't guarantee that.

  • Sender splits every message on frames. One frame cannot contain more than one message (part of single message, or one message with trailing zeros).
  • Frame header contains: 
    • continuation bit - flag that shows whether this frame is a part of previous message, or start of new message.
    • frame size - can be default for varlen messages, or set defined by Message class for fixed sized messages.
  • Message header contains direct type and fields count:
    • Let receiver expects N fields, but sender sends (N-1) fields. This field protect of reading random bytes to the Nth field.
  • After message is fully written, writer fills remaining frame buffer with zeros. 
  • Reader reads message from frames util Message#readFrom returns true or fields count is achieved. Then the message is processed.
    • After that, reader reads to /dev/null until continuation bit is
    set. It fills Message until fieldsCount, then skips others bytes until the new message
    • unset.
Frame headerMessage headerMessage

1 byte:

1bit - continuation bit

2-7bit - reserved

2 bytes:

unsigned frame size

(frame size limit 64Kb)

2 bytes:

direct type

1 byte:

fields count

(max 255 fields)

fieldstrailing zeros