diff --git a/daemon/main.c b/daemon/main.c index 9f5b465fc..8becb4db7 100644 --- a/daemon/main.c +++ b/daemon/main.c @@ -255,6 +255,7 @@ int main(int argc, char **argv) { m->redis = redis_new(redis_ip, redis_port, redis_key); if (!m->redis) die("Failed to connect to Redis database\n"); + mylog(LOG_INFO, "Connected to Redis\n"); } mylog(LOG_INFO, "Startup complete"); diff --git a/daemon/redis.c b/daemon/redis.c index 34d14434d..875ab2fcf 100644 --- a/daemon/redis.c +++ b/daemon/redis.c @@ -15,6 +15,7 @@ struct redis *redis_new(u_int32_t ip, u_int16_t port, char *key) { struct redis *r; struct timeval tv; redisReply *rp; + char *s; r = malloc(sizeof(*r)); ZERO(*r); @@ -37,10 +38,29 @@ struct redis *redis_new(u_int32_t ip, u_int16_t port, char *key) { goto err; freeReplyObject(rp); + rp = redisCommand(r->ctx, "INFO"); + if (!rp) + goto err; + s = strstr(rp->str, "role:"); + if (!s) { + freeReplyObject(rp); + goto err; + } + if (!memcmp(s, "role:master", 9)) + r->active = 1; + else if (!memcmp(s, "role:slave", 8)) + ; /* it's already 0 */ + else { + mylog(LOG_ERR, "Unable to determine Redis master/slave state\n"); + freeReplyObject(rp); + goto err; + } + freeReplyObject(rp); + return r; err: - if (r->ctx && r->ctx->errstr) + if (r->ctx && r->ctx->err && r->ctx->errstr) mylog(LOG_CRIT, "Redis error: %s\n", r->ctx->errstr); if (r->ctx) redisFree(r->ctx);