Browse Source

MT#55283 scale redis timers

Change-Id: I8b9fcbb63ab096c7f1362f2df2f137258c45dc12
pull/1938/head
Richard Fuchs 8 months ago
parent
commit
e12ba22a7c
4 changed files with 16 additions and 13 deletions
  1. +3
    -3
      daemon/cli.c
  2. +4
    -2
      daemon/main.c
  3. +8
    -7
      daemon/redis.c
  4. +1
    -1
      include/main.h

+ 3
- 3
daemon/cli.c View File

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


+ 4
- 2
daemon/main.c View File

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


+ 8
- 7
daemon/redis.c View File

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


+ 1
- 1
include/main.h View File

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


Loading…
Cancel
Save