Implent the force-backlog-disk-reserve flag

Former-commit-id: d39f7f4407f8935b1540dd302be3e24ac02c5700
This commit is contained in:
John Sully 2021-12-04 02:07:03 +00:00
parent d0e9aab2e7
commit 3b83248db6
4 changed files with 12 additions and 3 deletions

2
deps/rocksdb vendored

@ -1 +1 @@
Subproject commit c3034fce329017036c807e01261729bfc11a5d62
Subproject commit e3169e3ea8762d2f34880742106858a23c8dc8b7

View File

@ -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. */

View File

@ -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);

View File

@ -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 {