diff --git a/daemon/cli.c b/daemon/cli.c index f8b371373..057550578 100644 --- a/daemon/cli.c +++ b/daemon/cli.c @@ -519,7 +519,7 @@ RTPE_CONFIG_ENDPOINT_QUEUE_PARAMS X(final_timeout_us, "final-timeout") \ X(control_tos, "control-tos") \ X(redis_allowed_errors, "redis_allowed_errors") \ - X(redis_disable_time, "redis_disable_time") \ + X(redis_disable_time_us, "redis_disable_time") \ X(redis_cmd_timeout, "redis_cmd_timeout") \ X(redis_connect_timeout, "redis_connect_timeout-db") \ @@ -1450,7 +1450,7 @@ static void cli_incoming_set_redisallowederrors(str *instr, struct cli_writer *c } static void cli_incoming_list_redisdisabletime(str *instr, struct cli_writer *cw, const cli_handler_t *handler) { - cw->cw_printf(cw, "%d\n", atomic_get_na(&rtpe_config.redis_disable_time)); + cw->cw_printf(cw, "%" PRId64 "\n", atomic_get_na(&rtpe_config.redis_disable_time_us) / 1000000L); } static void cli_incoming_set_redisdisable(str *instr, struct cli_writer *cw, const cli_handler_t *handler) { @@ -1509,7 +1509,7 @@ static void cli_incoming_set_redisdisabletime(str *instr, struct cli_writer *cw, return; } - atomic_set_na(&rtpe_config.redis_disable_time, seconds); + atomic_set_na(&rtpe_config.redis_disable_time_us, seconds * 1000000LL); cw->cw_printf(cw, "Success setting redis-disable-time to %ld\n", seconds); } diff --git a/daemon/main.c b/daemon/main.c index 7b448af09..3b08637a4 100644 --- a/daemon/main.c +++ b/daemon/main.c @@ -97,7 +97,6 @@ struct rtpengine_config rtpe_config = { .redis_db = -1, .redis_write_db = -1, .redis_allowed_errors = -1, - .redis_disable_time = 10, .redis_connect_timeout = 1000, .media_num_threads = -1, .dtls_rsa_key_size = 2048, @@ -678,6 +677,7 @@ static void options(int *argc, char ***argv, charp_ht templates) { int media_expire = 0; int db_expire = 0; int rtcp_interval = 0; + int redis_disable_time = 10; GOptionEntry e[] = { { "table", 't', 0, G_OPTION_ARG_INT, &rtpe_config.kernel_table, "Kernel table to use", "INT" }, @@ -722,7 +722,7 @@ static void options(int *argc, char ***argv, charp_ht templates) { { "redis-expires", 0, 0, G_OPTION_ARG_INT, &rtpe_config.redis_expires_secs, "Expire time in seconds for redis keys", "INT" }, { "no-redis-required", 'q', 0, G_OPTION_ARG_NONE, &rtpe_config.no_redis_required, "Start no matter of redis connection state", NULL }, { "redis-allowed-errors", 0, 0, G_OPTION_ARG_INT, &rtpe_config.redis_allowed_errors, "Number of allowed errors before redis is temporarily disabled", "INT" }, - { "redis-disable-time", 0, 0, G_OPTION_ARG_INT, &rtpe_config.redis_disable_time, "Number of seconds redis communication is disabled because of errors", "INT" }, + { "redis-disable-time", 0, 0, G_OPTION_ARG_INT, &redis_disable_time, "Number of seconds redis communication is disabled because of errors", "INT" }, { "redis-cmd-timeout", 0, 0, G_OPTION_ARG_INT, &rtpe_config.redis_cmd_timeout, "Sets a timeout in milliseconds for redis commands", "INT" }, { "redis-connect-timeout", 0, 0, G_OPTION_ARG_INT, &rtpe_config.redis_connect_timeout, "Sets a timeout in milliseconds for redis connections", "INT" }, { "redis-format", 0, 0, G_OPTION_ARG_STRING, &redis_format, "Format for persistent storage in Redis/KeyDB", "native|bencode|JSON" }, @@ -1109,6 +1109,8 @@ static void options(int *argc, char ***argv, charp_ht templates) { if (rtpe_config.rtcp_interval_us <= 0) rtpe_config.rtcp_interval_us = 5000 * 1000LL; + rtpe_config.redis_disable_time_us = redis_disable_time * 1000000LL; + if (redisps) { if (redis_ep_parse(&rtpe_config.redis_ep, &rtpe_config.redis_db, &rtpe_config.redis_hostname, &rtpe_config.redis_auth, "RTPENGINE_REDIS_AUTH_PW", redisps)) diff --git a/daemon/redis.c b/daemon/redis.c index 52d1232e7..57121c0e3 100644 --- a/daemon/redis.c +++ b/daemon/redis.c @@ -823,7 +823,8 @@ void redis_delete_async_loop(void *d) { } void redis_notify_loop(void *d) { - int seconds = 1, redis_notify_return = 0; + int redis_notify_return = 0; + const int64_t microseconds = 1000000L; int64_t next_run = rtpe_now; struct redis *r; @@ -862,7 +863,7 @@ void redis_notify_loop(void *d) { continue; } - next_run = rtpe_now + seconds * 1000000L; // XXX scale to micro + next_run = rtpe_now + microseconds; if (redis_check_conn(r) == REDIS_STATE_CONNECTED || redis_notify_return < 0) { r->async_ctx = NULL; @@ -946,10 +947,10 @@ void redis_close(struct redis *r) { static void redis_count_err_and_disable(struct redis *r) { int allowed_errors; - int disable_time; + int64_t disable_time_us; allowed_errors = atomic_get_na(&rtpe_config.redis_allowed_errors); - disable_time = atomic_get_na(&rtpe_config.redis_disable_time); + disable_time_us = atomic_get_na(&rtpe_config.redis_disable_time_us); if (allowed_errors < 0) { return; @@ -957,10 +958,10 @@ static void redis_count_err_and_disable(struct redis *r) r->consecutive_errors++; if (r->consecutive_errors > allowed_errors) { - r->restore_tick_us = rtpe_now + disable_time * 1000000LL; // XXX scale to micro - ilog(LOG_WARNING, "Redis server %s disabled for %d seconds", + r->restore_tick_us = rtpe_now + disable_time_us; + ilog(LOG_WARNING, "Redis server %s disabled for %" PRId64 " seconds", endpoint_print_buf(&r->endpoint), - disable_time); + disable_time_us / 1000000L); } } diff --git a/include/main.h b/include/main.h index b1f2adb6c..1b228a277 100644 --- a/include/main.h +++ b/include/main.h @@ -53,7 +53,6 @@ enum endpoint_learning { X(redis_write_db) \ X(redis_subscribe_db) \ X(redis_allowed_errors) \ - X(redis_disable_time) \ X(redis_cmd_timeout) \ X(redis_connect_timeout) \ X(redis_delete_async) \ @@ -106,6 +105,7 @@ enum endpoint_learning { X(media_expire_us) \ X(db_expire_us) \ X(rtcp_interval_us) \ + X(redis_disable_time_us) \ #define RTPE_CONFIG_BOOL_PARAMS \ X(homer_rtcp_off) \