Implent the force-backlog-disk-reserve flag
Former-commit-id: d39f7f4407f8935b1540dd302be3e24ac02c5700
This commit is contained in:
parent
d0e9aab2e7
commit
3b83248db6
2
deps/rocksdb
vendored
2
deps/rocksdb
vendored
@ -1 +1 @@
|
||||
Subproject commit c3034fce329017036c807e01261729bfc11a5d62
|
||||
Subproject commit e3169e3ea8762d2f34880742106858a23c8dc8b7
|
@ -2852,6 +2852,7 @@ standardConfig configs[] = {
|
||||
createULongConfig("loading-process-events-interval-bytes", NULL, MODIFIABLE_CONFIG, 0, LONG_MAX, g_pserver->loading_process_events_interval_bytes, 2*1024*1024, MEMORY_CONFIG, NULL, NULL),
|
||||
createBoolConfig("multi-master-no-forward", NULL, MODIFIABLE_CONFIG, cserver.multimaster_no_forward, 0, validateMultiMasterNoForward, NULL),
|
||||
createBoolConfig("allow-write-during-load", NULL, MODIFIABLE_CONFIG, g_pserver->fWriteDuringActiveLoad, 0, NULL, NULL),
|
||||
createBoolConfig("force-backlog-disk-reserve", NULL, MODIFIABLE_CONFIG, cserver.force_backlog_disk, 0, NULL, NULL),
|
||||
|
||||
#ifdef USE_OPENSSL
|
||||
createIntConfig("tls-port", NULL, MODIFIABLE_CONFIG, 0, 65535, g_pserver->tls_port, 0, INTEGER_CONFIG, NULL, updateTLSPort), /* TCP port. */
|
||||
|
@ -220,7 +220,12 @@ void createReplicationBacklog(void) {
|
||||
serverLog(LL_WARNING, "Failed to create disk backlog, will use memory only");
|
||||
}
|
||||
}
|
||||
g_pserver->repl_backlog = (char*)zmalloc(g_pserver->repl_backlog_size, MALLOC_LOCAL);
|
||||
if (cserver.force_backlog_disk && g_pserver->repl_backlog_disk != nullptr) {
|
||||
g_pserver->repl_backlog = g_pserver->repl_backlog_disk;
|
||||
g_pserver->repl_backlog_size = cserver.repl_backlog_disk_size;
|
||||
} else {
|
||||
g_pserver->repl_backlog = (char*)zmalloc(g_pserver->repl_backlog_size, MALLOC_LOCAL);
|
||||
}
|
||||
g_pserver->repl_backlog_histlen = 0;
|
||||
g_pserver->repl_backlog_idx = 0;
|
||||
g_pserver->repl_backlog_start = g_pserver->master_repl_offset;
|
||||
@ -272,7 +277,7 @@ void resizeReplicationBacklog(long long newsize) {
|
||||
newsize = std::max(newsize, g_pserver->master_repl_offset - earliest_off);
|
||||
|
||||
if (cserver.repl_backlog_disk_size != 0) {
|
||||
if (newsize > g_pserver->repl_backlog_config_size) {
|
||||
if (newsize > g_pserver->repl_backlog_config_size || cserver.force_backlog_disk) {
|
||||
if (g_pserver->repl_backlog == g_pserver->repl_backlog_disk)
|
||||
return; // Can't do anything more
|
||||
serverLog(LL_NOTICE, "Switching to disk backed replication backlog due to exceeding memory limits");
|
||||
@ -5718,6 +5723,8 @@ void trimReplicationBacklog() {
|
||||
return; // We're already a good size
|
||||
if (g_pserver->repl_lowest_off > 0 && (g_pserver->master_repl_offset - g_pserver->repl_lowest_off + 1) > g_pserver->repl_backlog_config_size)
|
||||
return; // There is untransmitted data we can't truncate
|
||||
if (cserver.force_backlog_disk && g_pserver->repl_backlog == g_pserver->repl_backlog_disk)
|
||||
return; // We're already in the disk backlog and we're told to stay there
|
||||
|
||||
serverLog(LL_NOTICE, "Reclaiming %lld replication backlog bytes", g_pserver->repl_backlog_size - g_pserver->repl_backlog_config_size);
|
||||
resizeReplicationBacklog(g_pserver->repl_backlog_config_size);
|
||||
|
@ -2178,6 +2178,7 @@ struct redisServerConst {
|
||||
int fForkBgSave = false;
|
||||
int time_thread_priority = false;
|
||||
long long repl_backlog_disk_size = 0;
|
||||
int force_backlog_disk = 0;
|
||||
};
|
||||
|
||||
struct redisServer {
|
||||
|
Loading…
x
Reference in New Issue
Block a user