diff options
author | Adam Ierymenko <adam.ierymenko@gmail.com> | 2015-02-24 16:15:01 -0800 |
---|---|---|
committer | Adam Ierymenko <adam.ierymenko@gmail.com> | 2015-02-24 16:15:01 -0800 |
commit | ecffa9f5e719ee3e236b84645c4c6992693bf30a (patch) | |
tree | b041e74ac63b5f5b8e41fcce7b3cb3a4b05fa4ee /netconf/RedisNetworkConfigMaster.cpp | |
parent | b6fba5934a07b719d1b2fb97f1a06c336072ee9d (diff) | |
download | infinitytier-ecffa9f5e719ee3e236b84645c4c6992693bf30a.tar.gz infinitytier-ecffa9f5e719ee3e236b84645c4c6992693bf30a.zip |
Redis network config master work, and the beginnings of some actual unit test code.
Diffstat (limited to 'netconf/RedisNetworkConfigMaster.cpp')
-rw-r--r-- | netconf/RedisNetworkConfigMaster.cpp | 37 |
1 files changed, 31 insertions, 6 deletions
diff --git a/netconf/RedisNetworkConfigMaster.cpp b/netconf/RedisNetworkConfigMaster.cpp index f7be2698..f6d310dd 100644 --- a/netconf/RedisNetworkConfigMaster.cpp +++ b/netconf/RedisNetworkConfigMaster.cpp @@ -87,7 +87,7 @@ NetworkConfigMaster::ResultCode RedisNetworkConfigMaster::doNetworkConfigRequest // Check to make sure network itself exists and is valid if (!_hget(nwKey,"id",tmps2)) { - netconf["error"] = "Redis error retrieving network record"; + netconf["error"] = "Redis error retrieving network record ID field"; return NetworkConfigMaster::NETCONF_QUERY_INTERNAL_SERVER_ERROR; } if (tmps2 != nwids) @@ -317,6 +317,30 @@ bool RedisNetworkConfigMaster::_get(const char *key,std::string &value) return true; } +bool RedisNetworkConfigMaster::_sadd(const char *key,const char *value) +{ + if (!_rc) { + if (!_reconnect()) + return false; + } + + redisReply *reply = (redisReply *)redisCommand(_rc,"SADD %s %s",key,value); + if (!reply) { + if (_reconnect()) + return _sadd(key,value); + return false; + } + + if (reply->type == REDIS_REPLY_ERROR) { + freeReplyObject(reply); + return false; + } + + freeReplyObject(reply); + + return true; +} + bool RedisNetworkConfigMaster::_smembers(const char *key,std::vector<std::string> &sdata) { if (!_rc) { @@ -344,13 +368,14 @@ bool RedisNetworkConfigMaster::_smembers(const char *key,std::vector<std::string bool RedisNetworkConfigMaster::_initNewMember(uint64_t nwid,const Identity &member,const Dictionary &metaData,Dictionary &memberRecord) { - char memberKey[256],nwids[24],addrs[16],nwKey[256]; + char memberKey[128],nwids[24],addrs[16],nwKey[128],membersKey[128]; Dictionary networkRecord; Utils::snprintf(nwids,sizeof(nwids),"%.16llx",(unsigned long long)nwid); Utils::snprintf(addrs,sizeof(addrs),"%.10llx",(unsigned long long)member.address().toInt()); Utils::snprintf(memberKey,sizeof(memberKey),"zt1:network:%s:member:%s:~",nwids,addrs); Utils::snprintf(nwKey,sizeof(nwKey),"zt1:network:%s:~",nwids); + Utils::snprintf(membersKey,sizeof(membersKey),"zt1:network:%s:members",nwids); if (!_hgetall(nwKey,networkRecord)) { //LOG("netconf: Redis error retrieving %s",nwKey); @@ -364,14 +389,14 @@ bool RedisNetworkConfigMaster::_initNewMember(uint64_t nwid,const Identity &memb memberRecord.clear(); memberRecord["id"] = addrs; memberRecord["nwid"] = nwids; - memberRecord["authorized"] = (networkRecord.getBoolean("private",true) ? "0" : "1"); // auto-authorize on public networks + memberRecord["authorized"] = ((networkRecord.get("private","1") == "0") ? "1" : "0"); // auto-authorize on public networks memberRecord.set("firstSeen",Utils::now()); memberRecord["identity"] = member.toString(false); - if (!_hmset(memberKey,memberRecord)) { - //LOG("netconf: Redis error storing %s for new member %s",memberKey,addrs); + if (!_hmset(memberKey,memberRecord)) + return false; + if (!_sadd(membersKey,addrs)) return false; - } return true; } |