上下滑动可查看完整代码
- /* Replication cron function, called 1 time per second. */
- void replicationCron(void) { static long long
- replication_cron_loops = 0;
- /* Non blocking connection timeout? */
- if
- (server.masterhost &&
- (server.repl_state == REDIS_REPL_CONNECTING ||
- slaveIsInHandshakeState()) &&
- (time
- (NULL)-server.repl_transfer_lastio)> server.repl_timeout)
- {
- redisLog(REDIS_WARNING,
- "Timeout connecting to the MASTER..."
- );
- undoConnectWithMaster();
- }
- /* Bulk transfer I/O timeout? */
- if
- (server.masterhost && server.repl_state == REDIS_REPL_TRANSFER &&
- (time
- (NULL)-server.repl_transfer_lastio)> server.repl_timeout)
- {
- redisLog(REDIS_WARNING,
- "Timeout receiving bulk data from MASTER... If the problem persists try to set the'repl-timeout'parameter in redis.conf to a larger value."
- );
- replicationAbortSyncTransfer();
- }
- /* Timed out master when we are an already connected slave? */
- if
- (server.masterhost && server.repl_state == REDIS_REPL_CONNECTED &&
- (time
- (NULL)-server.master->lastinteraction)> server.repl_timeout)
- {
- redisLog(REDIS_WARNING,
- "MASTER timeout: no data nor PING received..."
- );
- freeClient(server.master);
- }
- // 此处省略无关代码......
- /* Disconnect timedout slaves. */
- if
- (listLength(server.slaves)) {
- listIter li; listNode *ln;
- listRewind(server.slaves,&li);
- while
- ((ln = listNext(&li))) {
- redisClient *slave = ln->value;
- if
- (slave->replstate != REDIS_REPL_ONLINE)
- continue; if
- (slave->flags & REDIS_PRE_PSYNC)
- continue; if
- ((server.unixtime - slave->repl_ack_time)> server.repl_timeout)
- {
- redisLog(REDIS_WARNING,
- "Disconnecting timedout slave: %s"
- ,
- replicationGetSlaveName(slave));
- freeClient(slave); } } }
- // 此处省略无关代码......
- }
来源: https://juejin.im/entry/5b90a96a5188255c48348e15