Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP

Loading…

repl_ping_slave_period and repl_timeout configs #149

Merged
merged 3 commits into from

4 participants

Herbert Fischer Fábio Gomes dos Santos Jeremy Zawodny Salvatore Sanfilippo
Herbert Fischer

Hi,

About that feature request I did, to be able to setup ping slave period/interval and replication timeout, I decided to do a small patch to help you out.

best regards,

Herbert

Herbert G. F... added some commits
Fábio Gomes dos Santos

good feature!

I need this for my cluster solution.

Congratulations!

Jeremy Zawodny

Ditto. Thanks for adding this.

Salvatore Sanfilippo
Owner

I think this is a good idea! thank you. I'll review the code today and merge it.

Salvatore Sanfilippo antirez merged commit 7e11ca0 into from
Salvatore Sanfilippo
Owner

Merged, thanks. Also porting this to unstable as well.

Herbert Fischer

Thanks! :)

Shuge Lee shuge referenced this pull request from a commit
Commit has since been removed from the repository and is no longer available.
Herbert Fischer hgfischer deleted the branch
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Commits on Oct 18, 2011
  1. Added repl_ping_slave_period and repl_timeout options support

    Herbert G. Fischer authored
  2. fixed typo in comments

    Herbert G. Fischer authored
  3. fixed source indenting

    Herbert G. Fischer authored
This page is out of date. Refresh to see the latest.
11 redis.conf
View
@@ -135,6 +135,17 @@ dir ./
#
slave-serve-stale-data yes
+# Slaves send PINGs to server in a predefined interval. It's possible to change
+# this interval with the repl_ping_slave_period option. The default value is 10
+# seconds.
+#
+# repl-ping-slave-period 10
+
+# The following option sets a timeout for both Bulk transfer I/O timeout and
+# master data or ping response timeout. The default value is 60 seconds.
+#
+# repl-timeout 60
+
################################## SECURITY ###################################
# Require clients to issue AUTH <PASSWORD> before processing any other
12 src/config.c
View
@@ -194,6 +194,18 @@ void loadServerConfig(char *filename) {
server.masterhost = sdsnew(argv[1]);
server.masterport = atoi(argv[2]);
server.replstate = REDIS_REPL_CONNECT;
+ } else if (!strcasecmp(argv[0],"repl-ping-slave-period") && argc == 2) {
+ server.repl_ping_slave_period = atoi(argv[1]);
+ if (server.repl_ping_slave_period <= 0) {
+ err = "repl-ping-slave-period must be 1 or greater";
+ goto loaderr;
+ }
+ } else if (!strcasecmp(argv[0],"repl-timeout") && argc == 2) {
+ server.repl_timeout = atoi(argv[1]);
+ if (server.repl_timeout <= 0) {
+ err = "repl-timeout must be 1 or greater";
+ goto loaderr;
+ }
} else if (!strcasecmp(argv[0],"masterauth") && argc == 2) {
server.masterauth = zstrdup(argv[1]);
} else if (!strcasecmp(argv[0],"slave-serve-stale-data") && argc == 2) {
2  src/redis.c
View
@@ -848,6 +848,8 @@ void initServerConfig() {
server.zset_max_ziplist_entries = REDIS_ZSET_MAX_ZIPLIST_ENTRIES;
server.zset_max_ziplist_value = REDIS_ZSET_MAX_ZIPLIST_VALUE;
server.shutdown_asap = 0;
+ server.repl_ping_slave_period = REDIS_REPL_PING_SLAVE_PERIOD;
+ server.repl_timeout = REDIS_REPL_TIMEOUT;
updateLRUClock();
resetServerSaveParams();
5 src/redis.h
View
@@ -54,6 +54,9 @@
#define REDIS_SLOWLOG_LOG_SLOWER_THAN 10000
#define REDIS_SLOWLOG_MAX_LEN 64
+#define REDIS_REPL_TIMEOUT 60
+#define REDIS_REPL_PING_SLAVE_PERIOD 10
+
/* Hash table parameters */
#define REDIS_HT_MINFILL 10 /* Minimal hash table fill 10% */
@@ -452,6 +455,8 @@ struct redisServer {
char *masterauth;
char *masterhost;
int masterport;
+ int repl_ping_slave_period;
+ int repl_timeout;
redisClient *master; /* client that is master for this slave */
int repl_syncio_timeout; /* timeout for synchronous I/O calls */
int replstate; /* replication status if the instance is a slave */
9 src/replication.c
View
@@ -504,13 +504,10 @@ void slaveofCommand(redisClient *c) {
/* --------------------------- REPLICATION CRON ---------------------------- */
-#define REDIS_REPL_TIMEOUT 60
-#define REDIS_REPL_PING_SLAVE_PERIOD 10
-
void replicationCron(void) {
/* Bulk transfer I/O timeout? */
if (server.masterhost && server.replstate == REDIS_REPL_TRANSFER &&
- (time(NULL)-server.repl_transfer_lastio) > REDIS_REPL_TIMEOUT)
+ (time(NULL)-server.repl_transfer_lastio) > server.repl_timeout)
{
redisLog(REDIS_WARNING,"Timeout receiving bulk data from MASTER...");
replicationAbortSyncTransfer();
@@ -518,7 +515,7 @@ void replicationCron(void) {
/* Timed out master when we are an already connected slave? */
if (server.masterhost && server.replstate == REDIS_REPL_CONNECTED &&
- (time(NULL)-server.master->lastinteraction) > REDIS_REPL_TIMEOUT)
+ (time(NULL)-server.master->lastinteraction) > server.repl_timeout)
{
redisLog(REDIS_WARNING,"MASTER time out: no data nor PING received...");
freeClient(server.master);
@@ -536,7 +533,7 @@ void replicationCron(void) {
* So slaves can implement an explicit timeout to masters, and will
* be able to detect a link disconnection even if the TCP connection
* will not actually go down. */
- if (!(server.cronloops % (REDIS_REPL_PING_SLAVE_PERIOD*10))) {
+ if (!(server.cronloops % (server.repl_ping_slave_period*10))) {
listIter li;
listNode *ln;
Something went wrong with that request. Please try again.