From 5af1d8fcca777e6e8ce6fc70e4278997ee15d245 Mon Sep 17 00:00:00 2001 From: Frederic-Philippe Metz Date: Sun, 7 Feb 2016 14:06:51 +0100 Subject: [PATCH] redis operations on the keyspace are now related to the keyspace they belong to --- daemon/redis.c | 39 ++++++++++++++++++++++----------------- 1 file changed, 22 insertions(+), 17 deletions(-) diff --git a/daemon/redis.c b/daemon/redis.c index db96bca0f..ac1085471 100644 --- a/daemon/redis.c +++ b/daemon/redis.c @@ -233,15 +233,6 @@ void onRedisNotification(redisAsyncContext *actx, void *reply, void *privdata) { r = cm->conf.redis_read_notify; -// if (cm->conf.redis_read) { -// r = cm->conf.redis_read_notify; -// } else if (cm->conf.redis) { -// r = cm->conf.redis_read_notify; -// } else { -// rlog(LOG_ERROR, "A redis notification has been there but role was not 'master' or 'read'"); -// return; -// } - redisReply *rr = (redisReply*)reply; if (reply == NULL || rr->type != REDIS_REPLY_ARRAY) @@ -1360,6 +1351,9 @@ void redis_update(struct call *c, struct redis *r, int role, enum call_opmode op rwlock_lock_r(&c->master_lock); + if (redisCommandNR(r->ctx, "SELECT %i", c->redis_hosted_db)) + goto err; + redis_pipe(r, "DEL notifier-"PB"", STR(&c->callid)); redis_pipe(r, "SREM calls "PB"", STR(&c->callid)); redis_pipe(r, "DEL call-"PB"", STR(&c->callid)); @@ -1591,21 +1585,23 @@ void redis_update(struct call *c, struct redis *r, int role, enum call_opmode op redis_pipe(r, "EXPIRE call-"PB" 86400", STR(&c->callid)); redis_pipe(r, "SADD calls "PB"", STR(&c->callid)); -// if (opmode==OP_ANSWER) { - redis_pipe(r, "SADD notifier-"PB" "PB"", STR(&c->callid), STR(&c->callid)); -// } - c->redis_hosted_db = r->db; + redis_pipe(r, "SADD notifier-"PB" "PB"", STR(&c->callid), STR(&c->callid)); + if (!c->redis_hosted_db) + c->redis_hosted_db = r->db; c->redis_call_responsible = 1; redis_consume(r); + +err: + mutex_unlock(&r->lock); rwlock_unlock_r(&c->master_lock); + if (r->ctx->err) + rlog(LOG_ERR, "Redis error: %s", r->ctx->errstr); + redisFree(r->ctx); + r->ctx = NULL; } - - - - /* must be called lock-free */ void redis_delete(struct call *c, struct redis *r, int role) { if (!r) @@ -1615,10 +1611,19 @@ void redis_delete(struct call *c, struct redis *r, int role) { redis_check_conn(r, role); rwlock_lock_r(&c->master_lock); + if (redisCommandNR(r->ctx, "SELECT %i", c->redis_hosted_db)) + goto err; + redis_delete_call(c, r); +err: rwlock_unlock_r(&c->master_lock); mutex_unlock(&r->lock); + + if (r->ctx->err) + rlog(LOG_ERR, "Redis error: %s", r->ctx->errstr); + redisFree(r->ctx); + r->ctx = NULL; }