Do not send updates to servers overly frequently during load
This commit is contained in:
parent
55dbb698e7
commit
c9d70ca62d
30
src/rdb.cpp
30
src/rdb.cpp
@ -3030,15 +3030,18 @@ void rdbLoadProgressCallback(rio *r, const void *buf, size_t len) {
|
|||||||
(r->keys_since_last_callback >= g_pserver->loading_process_events_interval_keys)))
|
(r->keys_since_last_callback >= g_pserver->loading_process_events_interval_keys)))
|
||||||
{
|
{
|
||||||
rdbAsyncWorkThread *pwthread = reinterpret_cast<rdbAsyncWorkThread*>(r->chksum_arg);
|
rdbAsyncWorkThread *pwthread = reinterpret_cast<rdbAsyncWorkThread*>(r->chksum_arg);
|
||||||
|
bool fUpdateReplication = (g_pserver->mstime - r->last_update) > 1000;
|
||||||
|
|
||||||
listIter li;
|
if (fUpdateReplication) {
|
||||||
listNode *ln;
|
listIter li;
|
||||||
listRewind(g_pserver->masters, &li);
|
listNode *ln;
|
||||||
while ((ln = listNext(&li)))
|
listRewind(g_pserver->masters, &li);
|
||||||
{
|
while ((ln = listNext(&li)))
|
||||||
struct redisMaster *mi = (struct redisMaster*)listNodeValue(ln);
|
{
|
||||||
if (mi->masterhost && mi->repl_state == REPL_STATE_TRANSFER)
|
struct redisMaster *mi = (struct redisMaster*)listNodeValue(ln);
|
||||||
replicationSendNewlineToMaster(mi);
|
if (mi->masterhost && mi->repl_state == REPL_STATE_TRANSFER)
|
||||||
|
replicationSendNewlineToMaster(mi);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
loadingProgress(r->processed_bytes);
|
loadingProgress(r->processed_bytes);
|
||||||
|
|
||||||
@ -3050,12 +3053,15 @@ void rdbLoadProgressCallback(rio *r, const void *buf, size_t len) {
|
|||||||
|
|
||||||
processModuleLoadingProgressEvent(0);
|
processModuleLoadingProgressEvent(0);
|
||||||
|
|
||||||
robj *ping_argv[1];
|
if (fUpdateReplication) {
|
||||||
|
robj *ping_argv[1];
|
||||||
|
|
||||||
ping_argv[0] = createStringObject("PING",4);
|
ping_argv[0] = createStringObject("PING",4);
|
||||||
replicationFeedSlaves(g_pserver->slaves, g_pserver->replicaseldb, ping_argv, 1);
|
replicationFeedSlaves(g_pserver->slaves, g_pserver->replicaseldb, ping_argv, 1);
|
||||||
decrRefCount(ping_argv[0]);
|
decrRefCount(ping_argv[0]);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (fUpdateReplication) r->last_update = g_pserver->mstime;
|
||||||
r->keys_since_last_callback = 0;
|
r->keys_since_last_callback = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -105,6 +105,7 @@ static const rio rioBufferIO = {
|
|||||||
0, /* bytes read or written */
|
0, /* bytes read or written */
|
||||||
0, /* keys since last callback */
|
0, /* keys since last callback */
|
||||||
0, /* read/write chunk size */
|
0, /* read/write chunk size */
|
||||||
|
0, /* last update time */
|
||||||
{ { NULL, 0 } } /* union for io-specific vars */
|
{ { NULL, 0 } } /* union for io-specific vars */
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -120,6 +121,7 @@ static const rio rioConstBufferIO = {
|
|||||||
0, /* bytes read or written */
|
0, /* bytes read or written */
|
||||||
0, /* keys since last callback */
|
0, /* keys since last callback */
|
||||||
0, /* read/write chunk size */
|
0, /* read/write chunk size */
|
||||||
|
0, /* last update time */
|
||||||
{ { NULL, 0 } } /* union for io-specific vars */
|
{ { NULL, 0 } } /* union for io-specific vars */
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -184,6 +186,7 @@ static const rio rioFileIO = {
|
|||||||
0, /* bytes read or written */
|
0, /* bytes read or written */
|
||||||
0, /* keys since last callback */
|
0, /* keys since last callback */
|
||||||
0, /* read/write chunk size */
|
0, /* read/write chunk size */
|
||||||
|
0, /* last update time */
|
||||||
{ { NULL, 0 } } /* union for io-specific vars */
|
{ { NULL, 0 } } /* union for io-specific vars */
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -284,6 +287,7 @@ static const rio rioConnIO = {
|
|||||||
0, /* bytes read or written */
|
0, /* bytes read or written */
|
||||||
0, /* keys since last callback */
|
0, /* keys since last callback */
|
||||||
0, /* read/write chunk size */
|
0, /* read/write chunk size */
|
||||||
|
0, /* last update time */
|
||||||
{ { NULL, 0 } } /* union for io-specific vars */
|
{ { NULL, 0 } } /* union for io-specific vars */
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -404,6 +408,7 @@ static const rio rioFdIO = {
|
|||||||
0, /* bytes read or written */
|
0, /* bytes read or written */
|
||||||
0, /* keys since last callback */
|
0, /* keys since last callback */
|
||||||
0, /* read/write chunk size */
|
0, /* read/write chunk size */
|
||||||
|
0, /* last update time */
|
||||||
{ { NULL, 0 } } /* union for io-specific vars */
|
{ { NULL, 0 } } /* union for io-specific vars */
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -72,6 +72,9 @@ struct _rio {
|
|||||||
/* maximum single read or write chunk size */
|
/* maximum single read or write chunk size */
|
||||||
size_t max_processing_chunk;
|
size_t max_processing_chunk;
|
||||||
|
|
||||||
|
/* last update time */
|
||||||
|
long long last_update;
|
||||||
|
|
||||||
/* Backend-specific vars. */
|
/* Backend-specific vars. */
|
||||||
union {
|
union {
|
||||||
/* In-memory buffer target. */
|
/* In-memory buffer target. */
|
||||||
|
Loading…
x
Reference in New Issue
Block a user