• 小五
    2021-12-04
    masterTryPartialResynchronization 函数中的相关代码如下: /* We still have the data our slave is asking for? */ if (!server.repl_backlog || psync_offset < server.repl_backlog_off || psync_offset > (server.repl_backlog_off + server.repl_backlog_histlen)) { serverLog(LL_NOTICE, "Unable to partial resync with replica %s for lack of backlog (Replica request was: %lld).", replicationGetSlaveName(c), psync_offset); if (psync_offset > server.master_repl_offset) { serverLog(LL_WARNING, "Warning: replica %s tried to PSYNC with an offset that is greater than the master replication offset.", replicationGetSlaveName(c)); } goto need_full_resync; } 上面的代码进行了前置判断,如果从节点的读位置对应的数据丢失了,就需要执行全量复制。这种情况不会执行到 addReplyReplicationBacklog 函数中。
    展开
    
    4
  • 末日,成欢
    2022-03-22
    想问下老师, 当主从建立好连接后, 主节点接收到的操作会往循环缓冲区写一份,同时会将命令同步给从节点, 此时缓冲区中的全量偏移量在增量, 而从节点的的偏移量是什么时候变动的? 如果不变动, 那么主从一旦断开, 势必就会发生全量复制。
    
    