From bd376ab99b3ec6c495c0d43662ac6c42df0e35ad Mon Sep 17 00:00:00 2001 From: Lucian Balaceanu Date: Mon, 18 Jul 2016 14:04:44 +0300 Subject: [PATCH] Adding redis_expires parameter Adding redis-expires documentation in README.md --- README.md | 5 +++++ daemon/call.h | 1 + daemon/main.c | 5 +++++ daemon/redis.c | 31 +++++++++++++++++-------------- debian/ngcp-rtpengine-daemon.init | 1 + 5 files changed, 29 insertions(+), 14 deletions(-) diff --git a/README.md b/README.md index cac9cfe3a..41c05efa2 100644 --- a/README.md +++ b/README.md @@ -176,6 +176,7 @@ option and which are reproduced below: -w, --redis-write=[PW@]IP:PORT/INT Connect to Redis write database -k, --subscribe-keyspace Subscription keyspace list --redis-num-threads=INT Number of Redis restore threads + --redis-expires=INT Expire time in seconds for redis keys -q, --no-redis-required Start even if can't connect to redis databases -b, --b2b-url=STRING XMLRPC URL of B2B UA -L, --log-level=INT Mask log priorities above this level @@ -420,6 +421,10 @@ The options are described in more detail below. How many redis restore threads to create. The default is four. +* --redis-expires + + Expire time in seconds for redis keys. Default is 86400. + * -q, --no-redis-required When this paramter is present or NO_REDIS_REQUIRED='yes' or '1' in config file, rtpengine starts even if there is no initial connection to redis databases(either to -r or to -w or to both redis). diff --git a/daemon/call.h b/daemon/call.h index 9b71f9f07..8a2b77c0b 100644 --- a/daemon/call.h +++ b/daemon/call.h @@ -455,6 +455,7 @@ struct callmaster_config { struct event_base *redis_notify_event_base; GQueue *redis_subscribed_keyspaces; struct redisAsyncContext *redis_notify_async_context; + unsigned int redis_expires_secs; char *b2b_url; unsigned char default_tos; enum xmlrpc_format fmt; diff --git a/daemon/main.c b/daemon/main.c index 6fc74270f..4517ece91 100644 --- a/daemon/main.c +++ b/daemon/main.c @@ -73,12 +73,14 @@ static int no_fallback; static unsigned int timeout; static unsigned int silent_timeout; static unsigned int final_timeout; +static unsigned int redis_expires = 86400; static int port_min = 30000; static int port_max = 40000; static int max_sessions = -1; static int redis_db = -1; static int redis_write_db = -1; static int redis_num_threads; + static int no_redis_required; static char *redis_auth; static char *redis_write_auth; @@ -308,6 +310,7 @@ static void options(int *argc, char ***argv) { { "redis", 'r', 0, G_OPTION_ARG_STRING, &redisps, "Connect to Redis database", "[PW@]IP:PORT/INT" }, { "redis-write",'w', 0, G_OPTION_ARG_STRING, &redisps_write, "Connect to Redis write database", "[PW@]IP:PORT/INT" }, { "redis-num-threads", 0, 0, G_OPTION_ARG_INT, &redis_num_threads, "Number of Redis restore threads", "INT" }, + { "redis-expires", 0, 0, G_OPTION_ARG_INT, &redis_expires, "Expire time in seconds for redis keys", "INT" }, { "no-redis-required", 'q', 0, G_OPTION_ARG_NONE, &no_redis_required, "Start no matter of redis connection state", NULL }, { "b2b-url", 'b', 0, G_OPTION_ARG_STRING, &b2b_url, "XMLRPC URL of B2B UA" , "STRING" }, { "log-level", 'L', 0, G_OPTION_ARG_INT, (void *)&log_level,"Mask log priorities above this level","INT" }, @@ -660,6 +663,8 @@ no_kernel: mc.redis_write = mc.redis; } + mc.redis_expires_secs = redis_expires; + ctx->m->conf = mc; if (!foreground) diff --git a/daemon/redis.c b/daemon/redis.c index f47d89b2f..9026f136d 100644 --- a/daemon/redis.c +++ b/daemon/redis.c @@ -1681,6 +1681,7 @@ void redis_update(struct call *c, struct redis *r) { struct intf_list *il; struct endpoint_map *ep; struct rtp_payload_type *pt; + unsigned int redis_expires_s; if (!r) return; @@ -1693,6 +1694,8 @@ void redis_update(struct call *c, struct redis *r) { rwlock_lock_r(&c->master_lock); + redis_expires_s = c->callmaster->conf.redis_expires_secs; + c->redis_hosted_db = r->db; if (redisCommandNR(r->ctx, "SELECT %i", c->redis_hosted_db)) { rlog(LOG_ERR, " >>>>>>>>>>>>>>>>> Redis error."); @@ -1732,7 +1735,7 @@ void redis_update(struct call *c, struct redis *r) { sfd->stream->unique_id); redis_update_crypto_context(r, "sfd", &c->callid, sfd->unique_id, &sfd->crypto); /* XXX DTLS?? */ - redis_pipe(r, "EXPIRE sfd-"PB"-%u 86400", STR(&c->callid), sfd->unique_id); + redis_pipe(r, "EXPIRE sfd-"PB"-%u %u", STR(&c->callid), sfd->unique_id, redis_expires_s); redis_pipe(r, "DEL sfd-"PB"-%u", STR(&c->callid), sfd->unique_id + 1); } @@ -1774,8 +1777,8 @@ void redis_update(struct call *c, struct redis *r) { mutex_unlock(&ps->in_lock); mutex_unlock(&ps->out_lock); - redis_pipe(r, "EXPIRE stream-"PB"-%u 86400", STR(&c->callid), ps->unique_id); - redis_pipe(r, "EXPIRE stream_sfds-"PB"-%u 86400", STR(&c->callid), ps->unique_id); + redis_pipe(r, "EXPIRE stream-"PB"-%u %u", STR(&c->callid), ps->unique_id, redis_expires_s); + redis_pipe(r, "EXPIRE stream_sfds-"PB"-%u %u", STR(&c->callid), ps->unique_id, redis_expires_s); redis_pipe(r, "DEL stream-"PB"-%u stream_sfds-"PB"-%u", STR(&c->callid), ps->unique_id + 1, @@ -1818,9 +1821,9 @@ void redis_update(struct call *c, struct redis *r) { media->unique_id); } - redis_pipe(r, "EXPIRE tag-"PB"-%u 86400", STR(&c->callid), ml->unique_id); - redis_pipe(r, "EXPIRE other_tags-"PB"-%u 86400", STR(&c->callid), ml->unique_id); - redis_pipe(r, "EXPIRE medias-"PB"-%u 86400", STR(&c->callid), ml->unique_id); + redis_pipe(r, "EXPIRE tag-"PB"-%u %u", STR(&c->callid), ml->unique_id, redis_expires_s); + redis_pipe(r, "EXPIRE other_tags-"PB"-%u %u", STR(&c->callid), ml->unique_id, redis_expires_s); + redis_pipe(r, "EXPIRE medias-"PB"-%u %u", STR(&c->callid), ml->unique_id, redis_expires_s); redis_pipe(r, "DEL tag-"PB"-%u other_tags-"PB"-%u medias-"PB"-%u", STR(&c->callid), ml->unique_id + 1, @@ -1878,10 +1881,10 @@ void redis_update(struct call *c, struct redis *r) { } g_list_free(k); - redis_pipe(r, "EXPIRE media-"PB"-%u 86400", STR(&c->callid), media->unique_id); - redis_pipe(r, "EXPIRE streams-"PB"-%u 86400", STR(&c->callid), media->unique_id); - redis_pipe(r, "EXPIRE maps-"PB"-%u 86400", STR(&c->callid), media->unique_id); - redis_pipe(r, "EXPIRE payload_types-"PB"-%u 86400", STR(&c->callid), media->unique_id); + redis_pipe(r, "EXPIRE media-"PB"-%u %u", STR(&c->callid), media->unique_id, redis_expires_s); + redis_pipe(r, "EXPIRE streams-"PB"-%u %u", STR(&c->callid), media->unique_id, redis_expires_s); + redis_pipe(r, "EXPIRE maps-"PB"-%u %u", STR(&c->callid), media->unique_id, redis_expires_s); + redis_pipe(r, "EXPIRE payload_types-"PB"-%u %u", STR(&c->callid), media->unique_id, redis_expires_s); redis_pipe(r, "DEL media-"PB"-%u streams-"PB"-%u maps-"PB"-%u payload_types-"PB"-%u", STR(&c->callid), media->unique_id + 1, @@ -1922,18 +1925,18 @@ void redis_update(struct call *c, struct redis *r) { } - redis_pipe(r, "EXPIRE map-"PB"-%u 86400", STR(&c->callid), ep->unique_id); - redis_pipe(r, "EXPIRE map_sfds-"PB"-%u 86400", STR(&c->callid), ep->unique_id); + redis_pipe(r, "EXPIRE map-"PB"-%u %u", STR(&c->callid), ep->unique_id, redis_expires_s); + redis_pipe(r, "EXPIRE map_sfds-"PB"-%u %u", STR(&c->callid), ep->unique_id, redis_expires_s); redis_pipe(r, "DEL map-"PB"-%u map_sfds-"PB"-%u", STR(&c->callid), ep->unique_id + 1, STR(&c->callid), ep->unique_id + 1); } - redis_pipe(r, "EXPIRE call-"PB" 86400", STR(&c->callid)); + redis_pipe(r, "EXPIRE call-"PB" %u", STR(&c->callid), redis_expires_s); redis_pipe(r, "SADD calls "PB"", STR(&c->callid)); redis_pipe(r, "SADD notifier-"PB" "PB"", STR(&c->callid), STR(&c->callid)); - redis_pipe(r, "EXPIRE notifier-"PB" 86400", STR(&c->callid)); + redis_pipe(r, "EXPIRE notifier-"PB" %u", STR(&c->callid), redis_expires_s); redis_consume(r); diff --git a/debian/ngcp-rtpengine-daemon.init b/debian/ngcp-rtpengine-daemon.init index 7c5c54158..1ff1a1f8c 100755 --- a/debian/ngcp-rtpengine-daemon.init +++ b/debian/ngcp-rtpengine-daemon.init @@ -75,6 +75,7 @@ fi [ -z "$REDIS_WRITE" -o -z "$REDIS_WRITE_DB" ] || OPTIONS="$OPTIONS --redis-write=$REDIS_WRITE/$REDIS_WRITE_DB" [ -z "$REDIS_WRITE_AUTH_PW" ] || export RTPENGINE_REDIS_WRITE_AUTH_PW="$REDIS_WRITE_AUTH_PW" [ -z "$REDIS_NUM_THREADS" ] || OPTIONS="$OPTIONS --redis-num-threads=$REDIS_NUM_THREADS" +[ -z "$REDIS_EXPIRES" ] || OPTIONS="$OPTIONS --redis-expires=$REDIS_EXPIRES" [ -z "$NO_REDIS_REQUIRED" -o \( "$NO_REDIS_REQUIRED" != "1" -a "$NO_REDIS_REQUIRED" != "yes" \) ] || OPTIONS="$OPTIONS --no-redis-required" [ -z "$B2B_URL" ] || OPTIONS="$OPTIONS --b2b-url=$B2B_URL" [ -z "$NO_FALLBACK" -o \( "$NO_FALLBACK" != "1" -a "$NO_FALLBACK" != "yes" \) ] || OPTIONS="$OPTIONS --no-fallback"