Browse Source

Push viabranch info into redis and restore it as well

git.mgm/mediaproxy-ng/2.0
Richard Fuchs 14 years ago
parent
commit
241d479de2
3 changed files with 34 additions and 11 deletions
  1. +11
    -5
      daemon/call.c
  2. +1
    -1
      daemon/call.h
  3. +22
    -5
      daemon/redis.c

+ 11
- 5
daemon/call.c View File

@ -1108,7 +1108,6 @@ static void call_destroy(struct call *c) {
g_hash_table_remove(m->callhash, c->callid);
#ifndef NO_REDIS
/* TODO: take into account the viabranch list */
redis_delete(c);
#endif
@ -1309,7 +1308,6 @@ char *call_update_udp(const char **out, struct callmaster *m) {
g_queue_clear(&q);
#ifndef NO_REDIS
/* TODO: need to change structure in regards to viabranch as well */
redis_update(c);
#endif
@ -1352,7 +1350,6 @@ char *call_lookup_udp(const char **out, struct callmaster *m) {
g_queue_clear(&q);
#ifndef NO_REDIS
/* TODO: need to change structure in regards to viabranch as well */
redis_update(c);
#endif
@ -1577,14 +1574,14 @@ void calls_status(struct callmaster *m, struct control_stream *s) {
#ifndef NO_REDIS
void call_restore(struct callmaster *m, char *uuid, redisReply **hash, GList *streams) {
void call_restore(struct callmaster *m, char *uuid, redisReply **hash, GList *streams, redisReply *branches) {
struct call *c;
struct callstream *cs;
redisReply *rps[2], *rp;
int i, kernel;
struct peer *p;
c = call_get_or_create(hash[0]->str, NULL, m); /* TODO: restore viabranch as well */
c = call_get_or_create(hash[0]->str, NULL, m);
strcpy(c->redis_uuid, uuid);
c->created = strtoll(hash[1]->str, NULL, 10);
strdupfree(&c->calling_agent, "UNKNOWN(recovered)");
@ -1618,6 +1615,15 @@ void call_restore(struct callmaster *m, char *uuid, redisReply **hash, GList *st
if (kernel)
kernelize(cs);
}
if (branches) {
for (i = 0; i < branches->elements; i++) {
rp = branches->element[i];
if (rp->type != REDIS_REPLY_STRING)
continue;
g_hash_table_insert(c->branches, strdup(rp->str), (void *) 0x1);
}
}
}


+ 1
- 1
daemon/call.h View File

@ -131,7 +131,7 @@ char *call_delete_udp(const char **, struct callmaster *);
void calls_status(struct callmaster *, struct control_stream *);
#ifndef NO_REDIS
void call_restore(struct callmaster *, char *, redisReply **, GList *);
void call_restore(struct callmaster *, char *, redisReply **, GList *, redisReply *);
void calls_dump_redis(struct callmaster *);
#endif


+ 22
- 5
daemon/redis.c View File

@ -197,7 +197,7 @@ static void redis_delete_uuid(char *uuid, struct callmaster *m) {
count++;
}
redisAppendCommand(r->ctx, "DEL %s-streams %s", uuid, uuid);
redisAppendCommand(r->ctx, "DEL %s-streams %s-viabranches %s", uuid, uuid, uuid);
redisAppendCommand(r->ctx, "SREM calls %s", uuid);
count += 2;
@ -210,7 +210,7 @@ static void redis_delete_uuid(char *uuid, struct callmaster *m) {
int redis_restore(struct callmaster *m) {
struct redis *r = m->redis;
redisReply *rp, *rp2, *rp3, *rp4, *rp5, *rp6;
redisReply *rp, *rp2, *rp3, *rp4, *rp5, *rp6, *rp7;
GQueue q = G_QUEUE_INIT;
int i, j, k, l;
@ -266,13 +266,21 @@ int redis_restore(struct callmaster *m) {
}
}
call_restore(m, rp2->str, rp3->element, q.head);
rp7 = redisCommand(r->ctx, "LRANGE %s-viabranches 0 -1", rp2->str);
if (rp7 && rp7->type != REDIS_REPLY_ARRAY) {
freeReplyObject(rp7);
rp7 = NULL;
}
call_restore(m, rp2->str, rp3->element, q.head, rp7);
if (q.head)
g_list_foreach(q.head, (GFunc) freeReplyObject, NULL);
g_queue_clear(&q);
freeReplyObject(rp4);
freeReplyObject(rp3);
if (rp7)
freeReplyObject(rp7);
continue;
@ -324,7 +332,8 @@ void redis_update(struct call *c) {
redisAppendCommand(r->ctx, "HMSET %s callid %s created %i", c->redis_uuid, c->callid, c->created);
redisAppendCommand(r->ctx, "DEL %s-streams-temp", c->redis_uuid);
count += 2;
redisAppendCommand(r->ctx, "DEL %s-viabranches-temp", c->redis_uuid);
count += 3;
for (l = c->callstreams->head; l; l = l->next) {
cs = l->data;
@ -344,11 +353,19 @@ void redis_update(struct call *c) {
count++;
}
for (l = g_hash_table_get_keys(c->branches); l; l = l->next) {
redisAppendCommand(r->ctx, "RPUSH %s-viabranches-temp %s", c->redis_uuid, l->data);
count++;
}
g_list_free(l);
redisAppendCommand(r->ctx, "RENAME %s-streams-temp %s-streams", c->redis_uuid, c->redis_uuid);
redisAppendCommand(r->ctx, "RENAME %s-viabranches-temp %s-viabranches", c->redis_uuid, c->redis_uuid);
redisAppendCommand(r->ctx, "EXPIRE %s-streams 86400", c->redis_uuid);
redisAppendCommand(r->ctx, "EXPIRE %s-viabranches 86400", c->redis_uuid);
redisAppendCommand(r->ctx, "EXPIRE %s 86400", c->redis_uuid);
redisAppendCommand(r->ctx, "SADD calls %s", c->redis_uuid);
count += 4;
count += 6;
if (oldstreams) {
if (oldstreams->type == REDIS_REPLY_ARRAY) {


Loading…
Cancel
Save