You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: doc/dev_guide/internals/box_protocol.rst
+38Lines changed: 38 additions & 0 deletions
Original file line number
Diff line number
Diff line change
@@ -70,6 +70,9 @@ The IPROTO constants that identify requests that we will mention in this section
70
70
IPROTO_ROLLBACK=0x10
71
71
IPROTO_RAFT_CONFIRM=0x28
72
72
IPROTO_RAFT_ROLLBACK=0x29
73
+
IPROTO_RAFT=0x1e
74
+
IPROTO_RAFT_PROMOTE=0x1f
75
+
IPROTO_RAFT_DEMOTE=0x20
73
76
IPROTO_PING=0x40
74
77
IPROTO_JOIN=0x41
75
78
IPROTO_SUBSCRIBE=0x42
@@ -132,6 +135,10 @@ The IPROTO constants that appear within requests or responses that we will descr
132
135
IPROTO_FIELD_IS_NULLABLE=0x03
133
136
IPROTO_FIELD_IS_AUTOINCREMENT=0x04
134
137
IPROTO_FIELD_SPAN=0x05
138
+
IPROTO_RAFT_TERM=0x00
139
+
IPROTO_RAFT_VOTE=0x01
140
+
IPROTO_RAFT_STATE=0x02
141
+
IPROTO_RAFT_VCLOCK=0x03
135
142
136
143
To denote message descriptions we will say ``msgpack(...)`` and within it we will use modified
137
144
`YAML <https://en.wikipedia.org/wiki/YAML>`_ so: |br|
@@ -1406,6 +1413,37 @@ IPROTO_FLAG_COMMIT (0x01) will be set if this is the last message for a transact
1406
1413
IPROTO_FLAG_WAIT_SYNC (0x02) will be set if this is the last message for a transaction which cannot be completed immediately,
1407
1414
IPROTO_FLAG_WAIT_ACK (0x04) will be set if this is the last message for a synchronous transaction.
1408
1415
1416
+
.. _box_protocol-raft:
1417
+
1418
+
IPROTO_RAFT = 0x1e
1419
+
~~~~~~~~~~~~~~~~~~
1420
+
1421
+
A node broadcasts the IPROTO_RAFT request to all the replicas connected to it when the RAFT state of the node changes.
1422
+
It can be any actions changing the state, like starting a new election, bumping the term, voting for another node, becoming the leader, and so on.
1423
+
1424
+
If there should be a response, for example, in case of a vote request to other nodes, the response will also be an IPROTO_RAFT message.
1425
+
In this case, the node should be connected as a replica to another node from which the response is expected because the response is sent via the replication channel.
1426
+
In other words, there should be a full-mesh connection between the nodes.
IPROTO_REPLICA_ID: :samp:`{{MP_INT integer}}`, # ID of the replica which the request came from
1437
+
1438
+
})
1439
+
# <body>
1440
+
msgpack({
1441
+
IPROTO_RAFT_TERM: :samp:`{{MP_UINT unsigned integer}}`, # RAFT term of the instance
1442
+
IPROTO_RAFT_VOTE: :samp:`{{MP_UINT unsigned integer}}`, # Instance vote in the current term (if any).
1443
+
IPROTO_RAFT_STATE: :samp:`{{MP_UINT unsigned integer}}`, # Instance state; one of the three numbers: 1---follower, 2---candidate, 3---leader.
1444
+
IPROTO_RAFT_VCLOCK: :samp:`{{MP_ARRAY {{MP_INT SRV_ID, MP_INT SRV_LSN}, {MP_INT SRV_ID, MP_INT SRV_LSN}, ...}}}` # Current vclock of the instance. Presents only on the instances in the "candidate" state (IPROTO_RAFT_STATE == 2).
0 commit comments