diff --git a/daemon/cli.c b/daemon/cli.c index 59f7c316b..2db4f3171 100644 --- a/daemon/cli.c +++ b/daemon/cli.c @@ -64,6 +64,7 @@ static void cli_incoming_set_finaltimeout(str *instr, struct cli_writer *cw); static void cli_incoming_set_loglevel(str *instr, struct cli_writer *cw); static void cli_incoming_set_redisallowederrors(str *instr, struct cli_writer *cw); static void cli_incoming_set_redisdisabletime(str *instr, struct cli_writer *cw); +static void cli_incoming_set_redisdisable(str *instr, struct cli_writer *cw); static void cli_incoming_set_redisconnecttimeout(str *instr, struct cli_writer *cw); static void cli_incoming_set_rediscmdtimeout(str *instr, struct cli_writer *cw); static void cli_incoming_set_controltos(str *instr, struct cli_writer *cw); @@ -138,6 +139,7 @@ static const cli_handler_t cli_set_handlers[] = { { "loglevel", cli_incoming_set_loglevel }, { "redisallowederrors", cli_incoming_set_redisallowederrors }, { "redisdisabletime", cli_incoming_set_redisdisabletime }, + { "redisdisable", cli_incoming_set_redisdisable }, { "redisconnecttimeout", cli_incoming_set_redisconnecttimeout }, { "rediscmdtimeout", cli_incoming_set_rediscmdtimeout }, { "controltos", cli_incoming_set_controltos }, @@ -1360,6 +1362,46 @@ static void cli_incoming_list_redisdisabletime(str *instr, struct cli_writer *cw rwlock_unlock_r(&rtpe_config.config_lock); } +static void cli_incoming_set_redisdisable(str *instr, struct cli_writer *cw) { + int disable = 0; + char *endptr; + + if (str_shift(instr, 1)) { + cw->cw_printf(cw, "%s\n", "More parameters required."); + return; + } + + errno = 0; + disable = strtol(instr->s, &endptr, 10); + if (disable < 0) { + cw->cw_printf(cw, "Invalid redis-disable value %d, must be >= 0\n", disable); + return; + } + + // disable write redis + if (disable > 0) { + // check if NOT previously disabled + if (!rtpe_redis_write_disabled && rtpe_redis) { + rtpe_redis_write_disabled = rtpe_redis_write; + rtpe_redis_write = rtpe_redis; + cw->cw_printf(cw, "Success disable redis write\n"); + } else { + cw->cw_printf(cw, "No redis write to disable\n"); + } + + // enable write redis + } else { + // check if previously disabled + if (rtpe_redis_write_disabled) { + rtpe_redis_write = rtpe_redis_write_disabled; + rtpe_redis_write_disabled = NULL; + cw->cw_printf(cw, "Success re-enable redis write\n"); + } else { + cw->cw_printf(cw, "No redis write to re-enable\n"); + } + } +} + static void cli_incoming_set_redisdisabletime(str *instr, struct cli_writer *cw) { long seconds; char *endptr; diff --git a/daemon/redis.c b/daemon/redis.c index 477506058..6bb40621f 100644 --- a/daemon/redis.c +++ b/daemon/redis.c @@ -36,6 +36,7 @@ struct redis *rtpe_redis; struct redis *rtpe_redis_write; +struct redis *rtpe_redis_write_disabled; struct redis *rtpe_redis_notify; diff --git a/include/redis.h b/include/redis.h index 14f9c1299..8a1a210fe 100644 --- a/include/redis.h +++ b/include/redis.h @@ -83,6 +83,7 @@ struct redis_list { extern struct redis *rtpe_redis; extern struct redis *rtpe_redis_write; +extern struct redis *rtpe_redis_write_disabled; extern struct redis *rtpe_redis_notify;