Skip to content

Commit

Permalink
Fix replication state diagram
Browse files Browse the repository at this point in the history
1. Make the diagram narrower
2. Replce slave with replica
3. Postpone master capa check

Signed-off-by: naglera <[email protected]>
  • Loading branch information
naglera committed Jun 18, 2024
1 parent eedb6db commit a9ec933
Showing 1 changed file with 49 additions and 38 deletions.
87 changes: 49 additions & 38 deletions src/replication.c
Original file line number Diff line number Diff line change
Expand Up @@ -3335,44 +3335,55 @@ void setupMainConnForPsync(connection *conn) {
* - Once the replica completes loading the rdb, it drops the rdb-connection and streams the accumulated incremental
* changes into memory. Repl steady state continues normally.
*
* * Replica state machine *
* RDB Channel Sync
* ┌──────────────────────────────────────────────────────────────┐
* │ RDB connection states Main connection state │
* ┌───────────────────┐ ┌────────────┐ │ ┌────────────────────────────┐ ┌───────────────────┐ │
* │RECEIVE_PING_REPLY │ ┌───►SEND_PSYNC │ -FULLSYNCNEEDED─┤REPL_RDB_CONN_SEND_HANDSHAKE│ ┌──►SEND_HANDSHAKE │ │
* └────────┬──────────┘ │ └─┬──────────┘ │ │ └────┬───────────────────────┘ │ └──┬────────────────┘ │
* │+PONG │ │PSYNC (use cached-master) │ │ │REPLCONF set-rdb-conn-id
* ┌────────▼──────────┐ │ ┌─▼─────────────────┐ │ │ ┌───────▼───────────────────────┐ │ ┌──▼────────────────┐ │
* │SEND_HANDSHAKE │ │ ┌─┤RECEIVE_PSYNC_REPLY├─┘ │ │RDB_CONN_RECEIVE_AUTH_REPLY │ │ │RECEIVE_CAPA_REPLY │ │
* └────────┬──────────┘ │ │ └─┬─────────────────┘ │ └───────┬───────────────────────┘ │ └──┬────────────────┘ │
* │ │ │ │+FULLRESYNC │ │+OK │ │+OK │
* ┌────────▼──────────┐ │ │ ┌─▼─────────────────┐ │ ┌───────▼───────────────────────┐ │ ┌──▼────────────────┐ │
* │RECEIVE_AUTH_REPLY │ │ │ │TRANSFER │ │ │RDB_CONN_RECEIVE_REPLCONF_REPLY│ │ │SEND_PSYNC │ │
* └────────┬──────────┘ │ │ └───────────────────┘ │ └───────┬───────────────────────┘ │ └──┬────────────────┘ │
* │+OK │ │ │ │+OK │ │PSYNC use snapshot │
* ┌────────▼──────────┐ │ │ │ ┌───────▼───────────────┐ │ │end-offset provided│
* │RECEIVE_PORT_REPLY │ │ │ │ │RDB_CONN_RECEIVE_ENDOFF│ │ │by the master │
* └────────┬──────────┘ │ │ │ └───────┬───────────────┘ │ ┌──▼────────────────┐ │
* │+OK │ │+CONTINUE │ │$ENDOFF │ │RECEIVE_PSYNC_REPLY│ │
* ┌────────▼──────────┐ │ │ │ ├─────────────────────────┘ └──┬────────────────┘ │
* │RECEIVE_IP_REPLY │ │ │ │ │ │+CONTINUE │
* └────────┬──────────┘ │ │ │ ┌───────▼───────────────┐ ┌──▼────────────────┐ │
* │+OK │ │ │ │RDB_CONN_RDB_LOAD │ │TRANSFER │ │
* ┌────────▼──────────┐ │ │ │ └───────┬───────────────┘ └────┬──────────────┘ │
* │RECEIVE_IP_REPLY │ │ │ │ │Done loading snapshot │ │
* └────────┬──────────┘ │ │ │ ┌───────▼───────────────┐ │ │
* │+OK │ │ │ │RDB_CONN_RDB_LOADED │ │ │
* ┌────────▼────────────────┐ │ │ │ └───────┬───────────────┘ │ │
* │RECEIVE_NO_FULLSYNC_REPLY│ │ │ │ │ │ │
* └─┬────┬──────────────────┘ │ └────┐ │ │Slave loads local replication │ │
* │+OK │Unrecognized REPLCONF │ │ │buffer into memory │ │
* ┌─▼────▼────────────┐ │ │ ┌────────┼──────────┴─────────────────────────────────┘ │
* │RECEIVE_CAPA_REPLY ├───────┘ │ │ │ │
* └───────────────────┘ ┌──▼────────────▼───┐ │ │
* │CONNECTED │ └──────────────────────────────────────────────────────────────┘
* └───────────────────┘
*/
* * Replica state machine *
* ┌───────────────────┐ RDB Channel Sync
* │RECEIVE_PING_REPLY │ ┌──────────────────────────────────────────────────────────────┐
* └────────┬──────────┘ │ RDB connection states Main connection state │
* │+PONG │ ┌────────────────────────────┐ ┌───────────────────┐ │
* ┌────────▼──────────┐ ┌─┼─────►REPL_RDB_CONN_SEND_HANDSHAKE│ ┌─►SEND_HANDSHAKE │ │
* │SEND_HANDSHAKE │ │ │ └────┬───────────────────────┘ │ └──┬────────────────┘ │
* └────────┬──────────┘ │ │ │ │ │REPLCONF set-rdb-conn-id
* │ │ │ ┌───────▼───────────────────────┐ │ ┌──▼────────────────┐ │
* ┌────────▼──────────┐ │ │ │RDB_CONN_RECEIVE_AUTH_REPLY │ │ │RECEIVE_CAPA_REPLY │ │
* │RECEIVE_AUTH_REPLY │ │ │ └───────┬───────────────────────┘ │ └──┬────────────────┘ │
* └────────┬──────────┘ │ │ │+OK │ │+OK │
* │+OK │ │ ┌───────▼───────────────────────┐ │ ┌──▼────────────────┐ │
* ┌────────▼──────────┐ │ │ │RDB_CONN_RECEIVE_REPLCONF_REPLY│ │ │SEND_PSYNC │ │
* │RECEIVE_PORT_REPLY │ │ │ └───────┬───────────────────────┘ │ └──┬────────────────┘ │
* └────────┬──────────┘ │ │ │+OK │ │PSYNC use snapshot │
* │+OK │ │ ┌───────▼───────────────┐ │ │end-offset provided │
* ┌────────▼──────────┐ │ │ │RDB_CONN_RECEIVE_ENDOFF│ │ │by the master │
* │RECEIVE_IP_REPLY │ │ │ └───────┬───────────────┘ │ ┌──▼────────────────┐ │
* └────────┬──────────┘ │ │ │$ENDOFF │ │RECEIVE_PSYNC_REPLY│ │
* │+OK │ │ ├─────────────────────────┘ └──┬────────────────┘ │
* ┌────────▼──────────┐ │ │ │ │+CONTINUE │
* │RECEIVE_IP_REPLY │ │ │ ┌───────▼───────────────┐ ┌──▼────────────────┐ │
* └────────┬──────────┘ │ │ │RDB_CONN_RDB_LOAD │ │TRANSFER │ │
* │+OK │ │ └───────┬───────────────┘ └─────┬─────────────┘ │
* ┌────────▼────────────────┐ │ │ │Done loading │ │
* │RECEIVE_NO_FULLSYNC_REPLY│ │ │ ┌───────▼───────────────┐ │ │
* └─┬────┬──────────────────┘ │ │ │RDB_CONN_RDB_LOADED │ │ │
* │+OK │Unrecognized REPLCONF│ │ └───────┬───────────────┘ │ │
* ┌─▼────▼────────────┐ │ │ │ │ │
* │RECEIVE_CAPA_REPLY │ │ │ │Replica loads local replication │ │
* └────────┬──────────┘ │ │ │buffer into memory │ │
* │ │ │ └──────────────┬──────────────────┘ │
* ┌────────▼───┐ │ │ │ │
* │SEND_PSYNC │ │ └─────────────────────────┼────────────────────────────────────┘
* └─┬──────────┘ │ │
* │PSYNC (use cached-master) │ │
* ┌─▼─────────────────┐ │ │
* │RECEIVE_PSYNC_REPLY│ │ │
* └────────┬─┬────────┘ │ │
* +CONTINUE│ │-FULLSYNCNEEDED │ │
* │ │ └─────────────────┘ │
* │ │+FULLRESYNC │
* │ ┌─▼─────────────────┐ ┌─────────▼─────────┐
* │ │TRANSFER ├───────────────────►CONNECTED │
* │ └───────────────────┘ └─────────▲─────────┘
* │ │
* └──────────────────────────────────────────────────────┘
*/
/* This handler fires when the non blocking connect was able to
* establish a connection with the master. */
void syncWithMaster(connection *conn) {
Expand Down

0 comments on commit a9ec933

Please sign in to comment.