summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorantirez <antirez@gmail.com>2014-10-27 10:36:30 +0100
committerantirez <antirez@gmail.com>2014-10-27 10:36:30 +0100
commit707352439c317dd2151d02606de25d2d2a147a67 (patch)
tree93ff35a900b5095346e220fb4e6145a02851f01e
parentc4dbc7cdecd876635318aff409e4382780ba2b15 (diff)
downloadredis-707352439c317dd2151d02606de25d2d2a147a67.tar.gz
Diskless sync delay is now configurable.
-rw-r--r--src/config.c12
-rw-r--r--src/redis.c1
-rw-r--r--src/redis.h1
-rw-r--r--src/replication.c6
4 files changed, 17 insertions, 3 deletions
diff --git a/src/config.c b/src/config.c
index 1b7b16f67..05cb7c9fe 100644
--- a/src/config.c
+++ b/src/config.c
@@ -274,6 +274,12 @@ void loadServerConfigFromString(char *config) {
if ((server.repl_diskless_sync = yesnotoi(argv[1])) == -1) {
err = "argument must be 'yes' or 'no'"; goto loaderr;
}
+ } else if (!strcasecmp(argv[0],"repl-diskless-sync-delay") && argc==2) {
+ server.repl_diskless_sync_delay = atoi(argv[1]);
+ if (server.repl_diskless_sync_delay < 0) {
+ err = "repl-diskless-sync-delay can't be negative";
+ goto loaderr;
+ }
} else if (!strcasecmp(argv[0],"repl-backlog-size") && argc == 2) {
long long size = memtoll(argv[1],NULL);
if (size <= 0) {
@@ -920,6 +926,10 @@ void configSetCommand(redisClient *c) {
if (yn == -1) goto badfmt;
server.repl_diskless_sync = yn;
+ } else if (!strcasecmp(c->argv[2]->ptr,"repl-diskless-sync-delay")) {
+ if (getLongLongFromObject(o,&ll) == REDIS_ERR ||
+ ll < 0) goto badfmt;
+ server.repl_diskless_sync_delay = ll;
} else if (!strcasecmp(c->argv[2]->ptr,"slave-priority")) {
if (getLongLongFromObject(o,&ll) == REDIS_ERR ||
ll < 0) goto badfmt;
@@ -1058,6 +1068,7 @@ void configGetCommand(redisClient *c) {
config_get_numerical_field("cluster-node-timeout",server.cluster_node_timeout);
config_get_numerical_field("cluster-migration-barrier",server.cluster_migration_barrier);
config_get_numerical_field("cluster-slave-validity-factor",server.cluster_slave_validity_factor);
+ config_get_numerical_field("repl-diskless-sync-delay",server.repl_diskless_sync_delay);
/* Bool (yes/no) values */
config_get_bool_field("cluster-require-full-coverage",
@@ -1804,6 +1815,7 @@ int rewriteConfig(char *path) {
rewriteConfigBytesOption(state,"repl-backlog-ttl",server.repl_backlog_time_limit,REDIS_DEFAULT_REPL_BACKLOG_TIME_LIMIT);
rewriteConfigYesNoOption(state,"repl-disable-tcp-nodelay",server.repl_disable_tcp_nodelay,REDIS_DEFAULT_REPL_DISABLE_TCP_NODELAY);
rewriteConfigYesNoOption(state,"repl-diskless-sync",server.repl_diskless_sync,REDIS_DEFAULT_REPL_DISKLESS_SYNC);
+ rewriteConfigNumericalOption(state,"repl-diskless-sync-delay",server.repl_diskless_sync_delay,REDIS_DEFAULT_REPL_DISKLESS_SYNC_DELAY);
rewriteConfigNumericalOption(state,"slave-priority",server.slave_priority,REDIS_DEFAULT_SLAVE_PRIORITY);
rewriteConfigNumericalOption(state,"min-slaves-to-write",server.repl_min_slaves_to_write,REDIS_DEFAULT_MIN_SLAVES_TO_WRITE);
rewriteConfigNumericalOption(state,"min-slaves-max-lag",server.repl_min_slaves_max_lag,REDIS_DEFAULT_MIN_SLAVES_MAX_LAG);
diff --git a/src/redis.c b/src/redis.c
index 61a103aaf..09b8103bc 100644
--- a/src/redis.c
+++ b/src/redis.c
@@ -1481,6 +1481,7 @@ void initServerConfig(void) {
server.repl_down_since = 0; /* Never connected, repl is down since EVER. */
server.repl_disable_tcp_nodelay = REDIS_DEFAULT_REPL_DISABLE_TCP_NODELAY;
server.repl_diskless_sync = REDIS_DEFAULT_REPL_DISKLESS_SYNC;
+ server.repl_diskless_sync_delay = REDIS_DEFAULT_REPL_DISKLESS_SYNC_DELAY;
server.slave_priority = REDIS_DEFAULT_SLAVE_PRIORITY;
server.master_repl_offset = 0;
diff --git a/src/redis.h b/src/redis.h
index 8583beae6..f4f933eb9 100644
--- a/src/redis.h
+++ b/src/redis.h
@@ -802,6 +802,7 @@ struct redisServer {
int repl_min_slaves_max_lag; /* Max lag of <count> slaves to write. */
int repl_good_slaves_count; /* Number of slaves with lag <= max_lag. */
int repl_diskless_sync; /* Send RDB to slaves sockets directly. */
+ int repl_diskless_sync_delay; /* Delay to start a diskless repl BGSAVE. */
/* Replication (slave) */
char *masterauth; /* AUTH with this password with master */
char *masterhost; /* Hostname of master */
diff --git a/src/replication.c b/src/replication.c
index 24b3455c8..0b40110a6 100644
--- a/src/replication.c
+++ b/src/replication.c
@@ -2034,9 +2034,9 @@ void replicationCron(void) {
}
}
- if (slaves_waiting && max_idle > REDIS_DEFAULT_REPL_DISKLESS_SYNC_DELAY)
- {
- /* Let's start a BGSAVE with disk target. */
+ if (slaves_waiting && max_idle > server.repl_diskless_sync_delay) {
+ /* Start a BGSAVE. Usually with socket target, or with disk target
+ * if there was a recent socket -> disk config change. */
if (startBgsaveForReplication() == REDIS_OK) {
/* It started! We need to change the state of slaves
* from WAIT_BGSAVE_START to WAIT_BGSAVE_END. */