From 8ac42b4600c7dc81ed8c50a38af6640b1e450344 Mon Sep 17 00:00:00 2001 From: Grant Limberg Date: Tue, 19 May 2020 17:40:11 -0700 Subject: [PATCH 01/24] controller status query fix --- controller/PostgreSQL.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/controller/PostgreSQL.cpp b/controller/PostgreSQL.cpp index 286a734e0..b8fd749a5 100644 --- a/controller/PostgreSQL.cpp +++ b/controller/PostgreSQL.cpp @@ -630,8 +630,8 @@ void PostgreSQL::heartbeat() }; PGresult *res = PQexecParams(conn, - "INSERT INTO ztc_controller (id, cluster_host, last_alive, public_identity, v_major, v_minor, v_rev, v_build, host_port, use_rabbitmq, use_redis) " - "VALUES ($1, $2, TO_TIMESTAMP($3::double precision/1000), $4, $5, $6, $7, $8, $9, $10, $11) " + "INSERT INTO ztc_controller (id, cluster_host, last_alive, public_identity, v_major, v_minor, v_rev, v_build, host_port,use_redis) " + "VALUES ($1, $2, TO_TIMESTAMP($3::double precision/1000), $4, $5, $6, $7, $8, $9, $10) " "ON CONFLICT (id) DO UPDATE SET cluster_host = EXCLUDED.cluster_host, last_alive = EXCLUDED.last_alive, " "public_identity = EXCLUDED.public_identity, v_major = EXCLUDED.v_major, v_minor = EXCLUDED.v_minor, " "v_rev = EXCLUDED.v_rev, v_build = EXCLUDED.v_rev, host_port = EXCLUDED.host_port, " From ee91c8179900f4b74cdba1ecad9fc318c6a8e945 Mon Sep 17 00:00:00 2001 From: Grant Limberg Date: Tue, 19 May 2020 17:40:51 -0700 Subject: [PATCH 02/24] Initialize C arrays to NULL in NetworkConfig() constructor --- node/NetworkConfig.cpp | 8 ++++---- node/NetworkConfig.hpp | 7 +++++++ 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/node/NetworkConfig.cpp b/node/NetworkConfig.cpp index e45a111d2..97985c7af 100644 --- a/node/NetworkConfig.cpp +++ b/node/NetworkConfig.cpp @@ -22,7 +22,7 @@ namespace ZeroTier { bool NetworkConfig::toDictionary(Dictionary &d,bool includeLegacy) const { Buffer *tmp = new Buffer(); - char tmp2[128]; + char tmp2[128] = {0}; try { d.clear(); @@ -84,7 +84,7 @@ bool NetworkConfig::toDictionary(Dictionary &d,b if (((int)lastrt < 32)||(lastrt == ZT_NETWORK_RULE_MATCH_ETHERTYPE)) { if (ets.length() > 0) ets.push_back(','); - char tmp2[16]; + char tmp2[16] = {0}; ets.append(Utils::hex((uint16_t)et,tmp2)); } et = 0; @@ -104,7 +104,7 @@ bool NetworkConfig::toDictionary(Dictionary &d,b if ((this->specialists[i] & ZT_NETWORKCONFIG_SPECIALIST_TYPE_ACTIVE_BRIDGE) != 0) { if (ab.length() > 0) ab.push_back(','); - char tmp2[16]; + char tmp2[16] = {0}; ab.append(Address(this->specialists[i]).toString(tmp2)); } } @@ -220,7 +220,7 @@ bool NetworkConfig::fromDictionary(const Dictionary Date: Wed, 13 May 2020 17:23:27 -0700 Subject: [PATCH 03/24] Track member status in Redis --- controller/PostgreSQL.cpp | 136 +++++++++++++++++++++++++++++++++----- controller/PostgreSQL.hpp | 4 ++ 2 files changed, 123 insertions(+), 17 deletions(-) diff --git a/controller/PostgreSQL.cpp b/controller/PostgreSQL.cpp index b8fd749a5..05d2de7b1 100644 --- a/controller/PostgreSQL.cpp +++ b/controller/PostgreSQL.cpp @@ -229,12 +229,14 @@ void PostgreSQL::eraseNetwork(const uint64_t networkId) tmp.first["objtype"] = "_delete_network"; tmp.second = true; _commitQueue.post(tmp); + nlohmann::json nullJson; + _networkChanged(tmp.first, nullJson, true); } void PostgreSQL::eraseMember(const uint64_t networkId, const uint64_t memberId) { char tmp2[24]; - std::pair tmp; + std::pair tmp, nw; Utils::hex(networkId, tmp2); tmp.first["nwid"] = tmp2; Utils::hex(memberId, tmp2); @@ -242,6 +244,8 @@ void PostgreSQL::eraseMember(const uint64_t networkId, const uint64_t memberId) tmp.first["objtype"] = "_delete_member"; tmp.second = true; _commitQueue.post(tmp); + nlohmann::json nullJson; + _memberChanged(tmp.first, nullJson, true); } void PostgreSQL::nodeIsOnline(const uint64_t networkId, const uint64_t memberId, const InetAddress &physicalAddress) @@ -630,7 +634,7 @@ void PostgreSQL::heartbeat() }; PGresult *res = PQexecParams(conn, - "INSERT INTO ztc_controller (id, cluster_host, last_alive, public_identity, v_major, v_minor, v_rev, v_build, host_port,use_redis) " + "INSERT INTO ztc_controller (id, cluster_host, last_alive, public_identity, v_major, v_minor, v_rev, v_build, host_port, use_redis) " "VALUES ($1, $2, TO_TIMESTAMP($3::double precision/1000), $4, $5, $6, $7, $8, $9, $10) " "ON CONFLICT (id) DO UPDATE SET cluster_host = EXCLUDED.cluster_host, last_alive = EXCLUDED.last_alive, " "public_identity = EXCLUDED.public_identity, v_major = EXCLUDED.v_major, v_minor = EXCLUDED.v_minor, " @@ -1401,6 +1405,15 @@ void PostgreSQL::commitThread() } void PostgreSQL::onlineNotificationThread() +{ + if (_rc != NULL) { + onlineNotification_Redis(); + } else { + onlineNotification_Postgres(); + } +} + +void PostgreSQL::onlineNotification_Postgres() { PGconn *conn = getPgConn(); if (PQstatus(conn) == CONNECTION_BAD) { @@ -1410,9 +1423,7 @@ void PostgreSQL::onlineNotificationThread() } _connected = 1; - //int64_t lastUpdatedNetworkStatus = 0; - std::unordered_map< std::pair,int64_t,_PairHasher > lastOnlineCumulative; - + nlohmann::json jtmp1, jtmp2; while (_run == 1) { if (PQstatus(conn) != CONNECTION_OK) { fprintf(stderr, "ERROR: Online Notification thread lost connection to Postgres."); @@ -1420,9 +1431,6 @@ void PostgreSQL::onlineNotificationThread() exit(5); } - // map used to send notifications to front end - std::unordered_map> updateMap; - std::unordered_map< std::pair,std::pair,_PairHasher > lastOnline; { std::lock_guard l(_lastOnline_l); @@ -1443,20 +1451,13 @@ void PostgreSQL::onlineNotificationThread() OSUtils::ztsnprintf(nwidTmp,sizeof(nwidTmp), "%.16llx", nwid_i); OSUtils::ztsnprintf(memTmp,sizeof(memTmp), "%.10llx", i->first.second); - auto found = _networks.find(nwid_i); - if (found == _networks.end()) { - continue; // skip members trying to join non-existant networks + if(!get(nwid_i, jtmp1, i->first.second, jtmp2)) { + continue; // skip non existent networks/members } std::string networkId(nwidTmp); std::string memberId(memTmp); - std::vector &members = updateMap[networkId]; - members.push_back(memberId); - - lastOnlineCumulative[i->first] = i->second.first; - - const char *qvals[2] = { networkId.c_str(), memberId.c_str() @@ -1526,6 +1527,107 @@ void PostgreSQL::onlineNotificationThread() } } +void PostgreSQL::onlineNotification_Redis() +{ + _connected = 1; + + char buf[11] = {0}; + std::string controllerId = std::string(_myAddress.toString(buf)); + + while (_run == 1) { + std::unordered_map< std::pair,std::pair,_PairHasher > lastOnline; + { + std::lock_guard l(_lastOnline_l); + lastOnline.swap(_lastOnline); + } + + if (_rc->clusterMode) { + auto tx = _cluster->redis(controllerId).transaction(true); + _doRedisUpdate(tx, controllerId, lastOnline); + } else { + auto tx = _redis->transaction(true); + _doRedisUpdate(tx, controllerId, lastOnline); + } + + std::this_thread::sleep_for(std::chrono::milliseconds(10)); + } +} + +void PostgreSQL::_doRedisUpdate(sw::redis::Transaction &tx, std::string &controllerId, + std::unordered_map< std::pair,std::pair,_PairHasher > &lastOnline) + +{ + nlohmann::json jtmp1, jtmp2; + for (auto i=lastOnline.begin(); i != lastOnline.end(); ++i) { + uint64_t nwid_i = i->first.first; + uint64_t memberid_i = i->first.second; + char nwidTmp[64]; + char memTmp[64]; + char ipTmp[64]; + OSUtils::ztsnprintf(nwidTmp,sizeof(nwidTmp), "%.16llx", nwid_i); + OSUtils::ztsnprintf(memTmp,sizeof(memTmp), "%.10llx", memberid_i); + + if (!get(nwid_i, jtmp1, memberid_i, jtmp2)){ + continue; // skip non existent members/networks + } + auto found = _networks.find(nwid_i); + if (found == _networks.end()) { + continue; // skip members trying to join non-existant networks + } + + std::string networkId(nwidTmp); + std::string memberId(memTmp); + + int64_t ts = i->second.first; + std::string ipAddr = i->second.second.toIpString(ipTmp); + std::string timestamp = std::to_string(ts); + + std::unordered_map record = { + {"id", memberId}, + {"address", ipAddr}, + {"last_updated", std::to_string(ts)} + }; + tx.zadd("nodes-online:{"+controllerId+"}", memberId, ts) + .zadd("network-nodes-online:{"+controllerId+"}:"+networkId, memberId, ts) + .sadd("network-nodes-all:{"+controllerId+"}:"+networkId, memberId) + .hmset("network:{"+controllerId+"}:"+networkId+":"+memberId, record.begin(), record.end()); + } + + tx.exec(); + + // expire records from all-nodes and network-nodes member list + uint64_t expireOld = OSUtils::now() - 300000; + + auto cursor = 0LL; + std::unordered_set keys; + // can't scan for keys in a transaction, so we need to fall back to _cluster or _redis + // to get all network-members keys + if(_rc->clusterMode) { + auto r = _cluster->redis(controllerId); + while(true) { + cursor = r.scan(cursor, "network-nodes-online:{"+controllerId+"}:*", INT_MAX, std::inserter(keys, keys.begin())); + if (cursor == 0) { + break; + } + } + } else { + while(true) { + cursor = _redis->scan(cursor, "network-nodes-online:"+controllerId+":*", INT_MAX, std::inserter(keys, keys.begin())); + if (cursor == 0) { + break; + } + } + } + + tx.zremrangebyscore("nodes-online:{"+controllerId+"}", sw::redis::RightBoundedInterval(expireOld, sw::redis::BoundType::LEFT_OPEN)); + + for(const auto &k : keys) { + tx.zremrangebyscore(k, sw::redis::RightBoundedInterval(expireOld, sw::redis::BoundType::LEFT_OPEN)); + } + + tx.exec(); +} + PGconn *PostgreSQL::getPgConn(OverrideMode m) { if (m == ALLOW_PGBOUNCER_OVERRIDE) { diff --git a/controller/PostgreSQL.hpp b/controller/PostgreSQL.hpp index 44347cd81..f61670132 100644 --- a/controller/PostgreSQL.hpp +++ b/controller/PostgreSQL.hpp @@ -70,6 +70,10 @@ private: void commitThread(); void onlineNotificationThread(); + void onlineNotification_Postgres(); + void onlineNotification_Redis(); + void _doRedisUpdate(sw::redis::Transaction &tx, std::string &controllerId, + std::unordered_map< std::pair,std::pair,_PairHasher > &lastOnline); enum OverrideMode { ALLOW_PGBOUNCER_OVERRIDE = 0, From 7a138f963cc8131b3d3e153f242fd1e89443f54b Mon Sep 17 00:00:00 2001 From: Grant Limberg Date: Mon, 18 May 2020 13:58:29 -0700 Subject: [PATCH 04/24] TIL: Creating a redis transaction without sending any commands throws an exception So let's not do that --- controller/PostgreSQL.cpp | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/controller/PostgreSQL.cpp b/controller/PostgreSQL.cpp index 05d2de7b1..28db4a867 100644 --- a/controller/PostgreSQL.cpp +++ b/controller/PostgreSQL.cpp @@ -1540,15 +1540,15 @@ void PostgreSQL::onlineNotification_Redis() std::lock_guard l(_lastOnline_l); lastOnline.swap(_lastOnline); } - - if (_rc->clusterMode) { - auto tx = _cluster->redis(controllerId).transaction(true); - _doRedisUpdate(tx, controllerId, lastOnline); - } else { - auto tx = _redis->transaction(true); - _doRedisUpdate(tx, controllerId, lastOnline); - } - + if (!lastOnline.empty()) { + if (_rc->clusterMode) { + auto tx = _cluster->redis(controllerId).transaction(true); + _doRedisUpdate(tx, controllerId, lastOnline); + } else { + auto tx = _redis->transaction(true); + _doRedisUpdate(tx, controllerId, lastOnline); + } + } std::this_thread::sleep_for(std::chrono::milliseconds(10)); } } @@ -1557,6 +1557,7 @@ void PostgreSQL::_doRedisUpdate(sw::redis::Transaction &tx, std::string &control std::unordered_map< std::pair,std::pair,_PairHasher > &lastOnline) { + fprintf(stderr, "Redis Update\n"); nlohmann::json jtmp1, jtmp2; for (auto i=lastOnline.begin(); i != lastOnline.end(); ++i) { uint64_t nwid_i = i->first.first; From 0f17508cac061e92d00e997a5a69fc1b7ed49553 Mon Sep 17 00:00:00 2001 From: Grant Limberg Date: Wed, 20 May 2020 11:38:04 -0700 Subject: [PATCH 05/24] error recovery in redis online notification If a redis cluster member fails over to the slave, we'll get an error from not specifying the key for the insert. Recover from that instead of crashing the controller --- controller/PostgreSQL.cpp | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/controller/PostgreSQL.cpp b/controller/PostgreSQL.cpp index 28db4a867..fb3867cac 100644 --- a/controller/PostgreSQL.cpp +++ b/controller/PostgreSQL.cpp @@ -1540,15 +1540,19 @@ void PostgreSQL::onlineNotification_Redis() std::lock_guard l(_lastOnline_l); lastOnline.swap(_lastOnline); } - if (!lastOnline.empty()) { - if (_rc->clusterMode) { - auto tx = _cluster->redis(controllerId).transaction(true); - _doRedisUpdate(tx, controllerId, lastOnline); - } else { - auto tx = _redis->transaction(true); - _doRedisUpdate(tx, controllerId, lastOnline); + try { + if (!lastOnline.empty()) { + if (_rc->clusterMode) { + auto tx = _cluster->redis(controllerId).transaction(true); + _doRedisUpdate(tx, controllerId, lastOnline); + } else { + auto tx = _redis->transaction(true); + _doRedisUpdate(tx, controllerId, lastOnline); + } } - } + } catch (sw::redis::Error &e) { + fprintf(stderr, "Error in online notification thread (redis): %s\n", e.what()); + } std::this_thread::sleep_for(std::chrono::milliseconds(10)); } } From 8b8399efbca76c7ec888276901579608562525a2 Mon Sep 17 00:00:00 2001 From: Grant Limberg Date: Wed, 20 May 2020 11:42:51 -0700 Subject: [PATCH 06/24] Error recovery for network & member stream watchers --- controller/PostgreSQL.cpp | 154 ++++++++++++++++++++------------------ 1 file changed, 81 insertions(+), 73 deletions(-) diff --git a/controller/PostgreSQL.cpp b/controller/PostgreSQL.cpp index fb3867cac..356166fb7 100644 --- a/controller/PostgreSQL.cpp +++ b/controller/PostgreSQL.cpp @@ -735,50 +735,54 @@ void PostgreSQL::_membersWatcher_Redis() { std::string key = "member-stream:{" + std::string(_myAddress.toString(buf)) + "}"; while (_run == 1) { - json tmp; - std::unordered_map result; - if (_rc->clusterMode) { - _cluster->xread(key, "$", std::chrono::seconds(1), 0, std::inserter(result, result.end())); - } else { - _redis->xread(key, "$", std::chrono::seconds(1), 0, std::inserter(result, result.end())); - } - if (!result.empty()) { - for (auto element : result) { -#ifdef ZT_TRACE - fprintf(stdout, "Received notification from: %s\n", element.first.c_str()); -#endif - for (auto rec : element.second) { - std::string id = rec.first; - auto attrs = rec.second; -#ifdef ZT_TRACE - fprintf(stdout, "Record ID: %s\n", id.c_str()); - fprintf(stdout, "attrs len: %lu\n", attrs.size()); -#endif - for (auto a : attrs) { -#ifdef ZT_TRACE - fprintf(stdout, "key: %s\nvalue: %s\n", a.first.c_str(), a.second.c_str()); -#endif - try { - tmp = json::parse(a.second); - json &ov = tmp["old_val"]; - json &nv = tmp["new_val"]; - json oldConfig, newConfig; - if (ov.is_object()) oldConfig = ov; - if (nv.is_object()) newConfig = nv; - if (oldConfig.is_object()||newConfig.is_object()) { - _memberChanged(oldConfig,newConfig,(this->_ready >= 2)); + try { + json tmp; + std::unordered_map result; + if (_rc->clusterMode) { + _cluster->xread(key, "$", std::chrono::seconds(1), 0, std::inserter(result, result.end())); + } else { + _redis->xread(key, "$", std::chrono::seconds(1), 0, std::inserter(result, result.end())); + } + if (!result.empty()) { + for (auto element : result) { + #ifdef ZT_TRACE + fprintf(stdout, "Received notification from: %s\n", element.first.c_str()); + #endif + for (auto rec : element.second) { + std::string id = rec.first; + auto attrs = rec.second; + #ifdef ZT_TRACE + fprintf(stdout, "Record ID: %s\n", id.c_str()); + fprintf(stdout, "attrs len: %lu\n", attrs.size()); + #endif + for (auto a : attrs) { + #ifdef ZT_TRACE + fprintf(stdout, "key: %s\nvalue: %s\n", a.first.c_str(), a.second.c_str()); + #endif + try { + tmp = json::parse(a.second); + json &ov = tmp["old_val"]; + json &nv = tmp["new_val"]; + json oldConfig, newConfig; + if (ov.is_object()) oldConfig = ov; + if (nv.is_object()) newConfig = nv; + if (oldConfig.is_object()||newConfig.is_object()) { + _memberChanged(oldConfig,newConfig,(this->_ready >= 2)); + } + } catch (...) { + fprintf(stderr, "json parse error in networkWatcher_Redis\n"); } - } catch (...) { - fprintf(stderr, "json parse error in networkWatcher_Redis\n"); } - } - if (_rc->clusterMode) { - _cluster->xdel(key, id); - } else { - _redis->xdel(key, id); + if (_rc->clusterMode) { + _cluster->xdel(key, id); + } else { + _redis->xdel(key, id); + } } } } + } catch (sw::redis::Error &e) { + fprintf(stderr, "Error in Redis members watcher: %s\n", e.what()); } } fprintf(stderr, "membersWatcher ended\n"); @@ -856,51 +860,55 @@ void PostgreSQL::_networksWatcher_Redis() { std::string key = "network-stream:{" + std::string(_myAddress.toString(buf)) + "}"; while (_run == 1) { - json tmp; - std::unordered_map result; - if (_rc->clusterMode) { - _cluster->xread(key, "$", std::chrono::seconds(1), 0, std::inserter(result, result.end())); - } else { - _redis->xread(key, "$", std::chrono::seconds(1), 0, std::inserter(result, result.end())); - } - - if (!result.empty()) { - for (auto element : result) { + try { + json tmp; + std::unordered_map result; + if (_rc->clusterMode) { + _cluster->xread(key, "$", std::chrono::seconds(1), 0, std::inserter(result, result.end())); + } else { + _redis->xread(key, "$", std::chrono::seconds(1), 0, std::inserter(result, result.end())); + } + + if (!result.empty()) { + for (auto element : result) { #ifdef ZT_TRACE - fprintf(stdout, "Received notification from: %s\n", element.first.c_str()); + fprintf(stdout, "Received notification from: %s\n", element.first.c_str()); #endif - for (auto rec : element.second) { - std::string id = rec.first; - auto attrs = rec.second; + for (auto rec : element.second) { + std::string id = rec.first; + auto attrs = rec.second; #ifdef ZT_TRACE - fprintf(stdout, "Record ID: %s\n", id.c_str()); - fprintf(stdout, "attrs len: %lu\n", attrs.size()); + fprintf(stdout, "Record ID: %s\n", id.c_str()); + fprintf(stdout, "attrs len: %lu\n", attrs.size()); #endif - for (auto a : attrs) { + for (auto a : attrs) { #ifdef ZT_TRACE - fprintf(stdout, "key: %s\nvalue: %s\n", a.first.c_str(), a.second.c_str()); + fprintf(stdout, "key: %s\nvalue: %s\n", a.first.c_str(), a.second.c_str()); #endif - try { - tmp = json::parse(a.second); - json &ov = tmp["old_val"]; - json &nv = tmp["new_val"]; - json oldConfig, newConfig; - if (ov.is_object()) oldConfig = ov; - if (nv.is_object()) newConfig = nv; - if (oldConfig.is_object()||newConfig.is_object()) { - _networkChanged(oldConfig,newConfig,(this->_ready >= 2)); + try { + tmp = json::parse(a.second); + json &ov = tmp["old_val"]; + json &nv = tmp["new_val"]; + json oldConfig, newConfig; + if (ov.is_object()) oldConfig = ov; + if (nv.is_object()) newConfig = nv; + if (oldConfig.is_object()||newConfig.is_object()) { + _networkChanged(oldConfig,newConfig,(this->_ready >= 2)); + } + } catch (...) { + fprintf(stderr, "json parse error in networkWatcher_Redis\n"); } - } catch (...) { - fprintf(stderr, "json parse error in networkWatcher_Redis\n"); } - } - if (_rc->clusterMode) { - _cluster->xdel(key, id); - } else { - _redis->xdel(key, id); + if (_rc->clusterMode) { + _cluster->xdel(key, id); + } else { + _redis->xdel(key, id); + } } } } + } catch (sw::redis::Error &e) { + fprintf(stderr, "Error in Redis networks watcher: %s\n", e.what()); } } fprintf(stderr, "networksWatcher ended\n"); From 879ef58565d7758b0fecf9c2275c9848f26d1d00 Mon Sep 17 00:00:00 2001 From: Grant Limberg Date: Wed, 20 May 2020 16:28:28 -0700 Subject: [PATCH 07/24] Finalize Redis integration --- controller/PostgreSQL.cpp | 152 ++++++++++++++++++++++++++++++++------ 1 file changed, 131 insertions(+), 21 deletions(-) diff --git a/controller/PostgreSQL.cpp b/controller/PostgreSQL.cpp index 356166fb7..0c81ead91 100644 --- a/controller/PostgreSQL.cpp +++ b/controller/PostgreSQL.cpp @@ -113,11 +113,8 @@ PostgreSQL::PostgreSQL(const Identity &myId, const char *path, int listenPort, R fprintf(stderr, "Central database schema version too low. This controller version requires a minimum schema version of %d. Please upgrade your Central instance", DB_MINIMUM_VERSION); exit(1); } - PQclear(res); res = NULL; - PQfinish(conn); - conn = NULL; if (_rc != NULL) { sw::redis::ConnectionOptions opts; @@ -137,6 +134,16 @@ PostgreSQL::PostgreSQL(const Identity &myId, const char *path, int listenPort, R } _readyLock.lock(); + + fprintf(stderr, "[%s] NOTICE: %.10llx controller PostgreSQL waiting for initial data download..." ZT_EOL_S, ::_timestr(), (unsigned long long)_myAddress.toInt()); + _waitNoticePrinted = true; + + initializeNetworks(conn); + initializeMembers(conn); + + PQfinish(conn); + conn = NULL; + _heartbeatThread = std::thread(&PostgreSQL::heartbeat, this); _membersDbWatcher = std::thread(&PostgreSQL::membersDbWatcher, this); _networksDbWatcher = std::thread(&PostgreSQL::networksDbWatcher, this); @@ -165,10 +172,6 @@ PostgreSQL::~PostgreSQL() bool PostgreSQL::waitForReady() { while (_ready < 2) { - if (!_waitNoticePrinted) { - _waitNoticePrinted = true; - fprintf(stderr, "[%s] NOTICE: %.10llx controller PostgreSQL waiting for initial data download..." ZT_EOL_S, ::_timestr(), (unsigned long long)_myAddress.toInt()); - } _readyLock.lock(); _readyLock.unlock(); } @@ -236,6 +239,7 @@ void PostgreSQL::eraseNetwork(const uint64_t networkId) void PostgreSQL::eraseMember(const uint64_t networkId, const uint64_t memberId) { char tmp2[24]; + waitForReady(); std::pair tmp, nw; Utils::hex(networkId, tmp2); tmp.first["nwid"] = tmp2; @@ -265,11 +269,28 @@ void PostgreSQL::initializeNetworks(PGconn *conn) fprintf(stderr, "Bad Database Connection: %s", PQerrorMessage(conn)); exit(1); } + + std::string setKey = "networks:{" + std::string(_myAddressStr.c_str()) + "}"; + if (_rc != NULL) { + try { + if (_rc->clusterMode) { + _cluster->del(setKey); + } else { + _redis->del(setKey); + } + } catch (sw::redis::Error &e) { + // del can throw an error if the key doesn't exist + // swallow it and move along + } + } + const char *params[1] = { _myAddressStr.c_str() }; + fprintf(stderr, "Initializing Networks...\n"); + PGresult *res = PQexecParams(conn, "SELECT id, EXTRACT(EPOCH FROM creation_time AT TIME ZONE 'UTC')*1000, capabilities, " "enable_broadcast, EXTRACT(EPOCH FROM last_modified AT TIME ZONE 'UTC')*1000, mtu, multicast_limit, name, private, remote_trace_level, " "remote_trace_target, revision, rules, tags, v4_assign_mode, v6_assign_mode FROM ztc_network " @@ -295,9 +316,18 @@ void PostgreSQL::initializeNetworks(PGconn *conn) const char *nwidparam[1] = { PQgetvalue(res, i, 0) }; + std::string nwid = PQgetvalue(res, i, 0); + + if (_rc != NULL) { + if (_rc->clusterMode) { + _cluster->sadd(setKey, nwid); + } else { + _redis->sadd(setKey, nwid); + } + } - config["id"] = PQgetvalue(res, i, 0); - config["nwid"] = PQgetvalue(res, i, 0); + config["id"] = nwid; + config["nwid"] = nwid; try { config["creationTime"] = std::stoull(PQgetvalue(res, i, 1)); } catch (std::exception &e) { @@ -416,8 +446,11 @@ void PostgreSQL::initializeNetworks(PGconn *conn) } _readyLock.unlock(); } + } catch (sw::redis::Error &e) { + fprintf(stderr, "ERROR: Error initializing networks in Redis: %s\n", e.what()); + exit(-1); } catch (std::exception &e) { - fprintf(stderr, "ERROR: Error initializing networks: %s", e.what()); + fprintf(stderr, "ERROR: Error initializing networks: %s\n", e.what()); exit(-1); } } @@ -429,11 +462,32 @@ void PostgreSQL::initializeMembers(PGconn *conn) fprintf(stderr, "Bad Database Connection: %s", PQerrorMessage(conn)); exit(1); } - + std::string setKeyBase = "network-nodes-all:{" + std::string(_myAddressStr.c_str()) + "}:"; + if (_rc != NULL) { + std::lock_guard l(_networks_l); + for ( auto it : _networks) { + uint64_t nwid_i = it.first; + char nwidTmp[64] = {0}; + OSUtils::ztsnprintf(nwidTmp, sizeof(nwidTmp), "%.16llx", nwid_i); + std::string nwid(nwidTmp); + std::string key = setKeyBase + nwid; + if (_rc->clusterMode) { + try { + _cluster->del(key); + } catch (...) {} + } else { + try { + _redis->del(key); + } catch (...) {} + } + } + } + const char *params[1] = { _myAddressStr.c_str() }; + fprintf(stderr, "Initializing Members...\n"); PGresult *res = PQexecParams(conn, "SELECT m.id, m.network_id, m.active_bridge, m.authorized, m.capabilities, EXTRACT(EPOCH FROM m.creation_time AT TIME ZONE 'UTC')*1000, m.identity, " " EXTRACT(EPOCH FROM m.last_authorized_time AT TIME ZONE 'UTC')*1000, " @@ -464,6 +518,15 @@ void PostgreSQL::initializeMembers(PGconn *conn) std::string memberId(PQgetvalue(res, i, 0)); std::string networkId(PQgetvalue(res, i, 1)); + + if (_rc != NULL) { + if (_rc->clusterMode) { + _cluster->sadd(setKeyBase + networkId, memberId); + } else { + _redis->sadd(setKeyBase + networkId, memberId); + } + } + std::string ctime = PQgetvalue(res, i, 5); config["id"] = memberId; config["nwid"] = networkId; @@ -564,6 +627,14 @@ void PostgreSQL::initializeMembers(PGconn *conn) config["ipAssignments"].push_back(ipaddr); } + if (_rc != NULL) { + if (_rc->clusterMode) { + _cluster->sadd(setKeyBase + networkId, memberId); + } else { + _redis->sadd(setKeyBase + networkId, memberId); + } + } + _memberChanged(empty, config, false); } @@ -575,6 +646,8 @@ void PostgreSQL::initializeMembers(PGconn *conn) } _readyLock.unlock(); } + } catch (sw::redis::Error &e) { + fprintf(stderr, "ERROR: Error initializing members (redis): %s\n", e.what()); } catch (std::exception &e) { fprintf(stderr, "ERROR: Error initializing members: %s\n", e.what()); exit(-1); @@ -670,8 +743,6 @@ void PostgreSQL::membersDbWatcher() exit(1); } - initializeMembers(conn); - if (_rc) { PQfinish(conn); conn = NULL; @@ -797,8 +868,6 @@ void PostgreSQL::networksDbWatcher() exit(1); } - initializeNetworks(conn); - if (_rc) { PQfinish(conn); conn = NULL; @@ -1344,6 +1413,20 @@ void PostgreSQL::commitThread() } catch (std::exception &e) { fprintf(stderr, "ERROR: Error updating member: %s\n", e.what()); } + if (_rc != NULL) { + try { + std::string id = (*config)["id"]; + std::string controllerId = _myAddressStr.c_str(); + std::string key = "networks:{" + controllerId + "}"; + if (_rc->clusterMode) { + _cluster->sadd(key, id); + } else { + _redis->sadd(key, id); + } + } catch (sw::redis::Error &e) { + fprintf(stderr, "ERROR: Error adding network to Redis: %s\n", e.what()); + } + } } else if (objtype == "_delete_network") { try { std::string networkId = (*config)["nwid"]; @@ -1367,6 +1450,20 @@ void PostgreSQL::commitThread() } catch (std::exception &e) { fprintf(stderr, "ERROR: Error deleting network: %s\n", e.what()); } + if (_rc != NULL) { + try { + std::string id = (*config)["id"]; + std::string controllerId = _myAddressStr.c_str(); + std::string key = "networks:{" + controllerId + "}"; + if (_rc->clusterMode) { + _cluster->srem(key, id); + } else { + _redis->srem(key, id); + } + } catch (sw::redis::Error &e) { + fprintf(stderr, "ERROR: Error adding network to Redis: %s\n", e.what()); + } + } } else if (objtype == "_delete_member") { try { std::string memberId = (*config)["id"]; @@ -1394,6 +1491,21 @@ void PostgreSQL::commitThread() } catch (std::exception &e) { fprintf(stderr, "ERROR: Error deleting member: %s\n", e.what()); } + if (_rc != NULL) { + try { + std::string memberId = (*config)["id"]; + std::string networkId = (*config)["nwid"]; + std::string controllerId = _myAddressStr.c_str(); + std::string key = "network-nodes-all:{" + controllerId + "}:" + networkId; + if (_rc->clusterMode) { + _cluster->srem(key, memberId); + } else { + _redis->srem(key, memberId); + } + } catch (sw::redis::Error &e) { + fprintf(stderr, "ERROR: Error deleting member from Redis: %s\n", e.what()); + } + } } else { fprintf(stderr, "ERROR: unknown objtype"); } @@ -1414,6 +1526,8 @@ void PostgreSQL::commitThread() void PostgreSQL::onlineNotificationThread() { + waitForReady(); + if (_rc != NULL) { onlineNotification_Redis(); } else { @@ -1569,7 +1683,6 @@ void PostgreSQL::_doRedisUpdate(sw::redis::Transaction &tx, std::string &control std::unordered_map< std::pair,std::pair,_PairHasher > &lastOnline) { - fprintf(stderr, "Redis Update\n"); nlohmann::json jtmp1, jtmp2; for (auto i=lastOnline.begin(); i != lastOnline.end(); ++i) { uint64_t nwid_i = i->first.first; @@ -1581,12 +1694,9 @@ void PostgreSQL::_doRedisUpdate(sw::redis::Transaction &tx, std::string &control OSUtils::ztsnprintf(memTmp,sizeof(memTmp), "%.10llx", memberid_i); if (!get(nwid_i, jtmp1, memberid_i, jtmp2)){ + fprintf(stderr, "network or member doesn't exist\n"); continue; // skip non existent members/networks } - auto found = _networks.find(nwid_i); - if (found == _networks.end()) { - continue; // skip members trying to join non-existant networks - } std::string networkId(nwidTmp); std::string memberId(memTmp); @@ -1603,7 +1713,7 @@ void PostgreSQL::_doRedisUpdate(sw::redis::Transaction &tx, std::string &control tx.zadd("nodes-online:{"+controllerId+"}", memberId, ts) .zadd("network-nodes-online:{"+controllerId+"}:"+networkId, memberId, ts) .sadd("network-nodes-all:{"+controllerId+"}:"+networkId, memberId) - .hmset("network:{"+controllerId+"}:"+networkId+":"+memberId, record.begin(), record.end()); + .hmset("member:{"+controllerId+"}:"+networkId+":"+memberId, record.begin(), record.end()); } tx.exec(); From d24c8d858ca9f542f304618e728e090c31b5b5ad Mon Sep 17 00:00:00 2001 From: Grant Limberg Date: Wed, 20 May 2020 16:54:18 -0700 Subject: [PATCH 08/24] include climits for Linux --- controller/PostgreSQL.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/controller/PostgreSQL.cpp b/controller/PostgreSQL.cpp index 0c81ead91..1e59365ad 100644 --- a/controller/PostgreSQL.cpp +++ b/controller/PostgreSQL.cpp @@ -22,6 +22,7 @@ #include #include +#include using json = nlohmann::json; From 08cb72bdba5bb20b5244af09445d71b0b12e727b Mon Sep 17 00:00:00 2001 From: Grant Limberg Date: Thu, 21 May 2020 09:33:03 -0700 Subject: [PATCH 09/24] Temp object was being destroyed before connection was used --- controller/PostgreSQL.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/controller/PostgreSQL.cpp b/controller/PostgreSQL.cpp index 1e59365ad..a9915ee11 100644 --- a/controller/PostgreSQL.cpp +++ b/controller/PostgreSQL.cpp @@ -1666,7 +1666,8 @@ void PostgreSQL::onlineNotification_Redis() try { if (!lastOnline.empty()) { if (_rc->clusterMode) { - auto tx = _cluster->redis(controllerId).transaction(true); + auto redis = _cluster->redis(controllerId); + auto tx = redis.transaction(true); _doRedisUpdate(tx, controllerId, lastOnline); } else { auto tx = _redis->transaction(true); From c2409ad6c993bf3222bc115e348fba3078398c7f Mon Sep 17 00:00:00 2001 From: Grant Limberg Date: Thu, 21 May 2020 09:49:41 -0700 Subject: [PATCH 10/24] fix connection to redis cluster in online notification thread --- controller/PostgreSQL.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/controller/PostgreSQL.cpp b/controller/PostgreSQL.cpp index a9915ee11..c3cfe7f04 100644 --- a/controller/PostgreSQL.cpp +++ b/controller/PostgreSQL.cpp @@ -1666,8 +1666,7 @@ void PostgreSQL::onlineNotification_Redis() try { if (!lastOnline.empty()) { if (_rc->clusterMode) { - auto redis = _cluster->redis(controllerId); - auto tx = redis.transaction(true); + auto tx = _cluster->transaction(controllerId, true); _doRedisUpdate(tx, controllerId, lastOnline); } else { auto tx = _redis->transaction(true); From 13929aee6f48cb201d4575a0095cc03704255ebc Mon Sep 17 00:00:00 2001 From: Grant Limberg Date: Thu, 21 May 2020 09:49:55 -0700 Subject: [PATCH 11/24] reduce log chattiness --- controller/PostgreSQL.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/controller/PostgreSQL.cpp b/controller/PostgreSQL.cpp index c3cfe7f04..4de01172e 100644 --- a/controller/PostgreSQL.cpp +++ b/controller/PostgreSQL.cpp @@ -1674,7 +1674,9 @@ void PostgreSQL::onlineNotification_Redis() } } } catch (sw::redis::Error &e) { +#ifdef ZT_TRACE fprintf(stderr, "Error in online notification thread (redis): %s\n", e.what()); +#endif } std::this_thread::sleep_for(std::chrono::milliseconds(10)); } @@ -1695,7 +1697,6 @@ void PostgreSQL::_doRedisUpdate(sw::redis::Transaction &tx, std::string &control OSUtils::ztsnprintf(memTmp,sizeof(memTmp), "%.10llx", memberid_i); if (!get(nwid_i, jtmp1, memberid_i, jtmp2)){ - fprintf(stderr, "network or member doesn't exist\n"); continue; // skip non existent members/networks } From fb0e8aebdb1ed168c8ff2dd7e30d110db38d6f8f Mon Sep 17 00:00:00 2001 From: Grant Limberg Date: Fri, 22 May 2020 10:07:39 -0700 Subject: [PATCH 12/24] keep list of active networks in redis --- controller/PostgreSQL.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/controller/PostgreSQL.cpp b/controller/PostgreSQL.cpp index 4de01172e..6bc2b3a4e 100644 --- a/controller/PostgreSQL.cpp +++ b/controller/PostgreSQL.cpp @@ -1714,6 +1714,7 @@ void PostgreSQL::_doRedisUpdate(sw::redis::Transaction &tx, std::string &control }; tx.zadd("nodes-online:{"+controllerId+"}", memberId, ts) .zadd("network-nodes-online:{"+controllerId+"}:"+networkId, memberId, ts) + .zadd("active-networks:{"+controllerId+"}", networkId, ts) .sadd("network-nodes-all:{"+controllerId+"}:"+networkId, memberId) .hmset("member:{"+controllerId+"}:"+networkId+":"+memberId, record.begin(), record.end()); } @@ -1745,7 +1746,7 @@ void PostgreSQL::_doRedisUpdate(sw::redis::Transaction &tx, std::string &control } tx.zremrangebyscore("nodes-online:{"+controllerId+"}", sw::redis::RightBoundedInterval(expireOld, sw::redis::BoundType::LEFT_OPEN)); - + tx.zremrangebyscore("active-networks:{"+controllerId}"}", sw::redis::RightBoundedInterval(expireOld, sw::redis::BoundType::LEFT_OPEN)); for(const auto &k : keys) { tx.zremrangebyscore(k, sw::redis::RightBoundedInterval(expireOld, sw::redis::BoundType::LEFT_OPEN)); } From beedee4401a51327935ff15ddb3a3d4e2a608ee9 Mon Sep 17 00:00:00 2001 From: Grant Limberg Date: Fri, 22 May 2020 11:07:12 -0700 Subject: [PATCH 13/24] fix typo --- controller/PostgreSQL.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/controller/PostgreSQL.cpp b/controller/PostgreSQL.cpp index 6bc2b3a4e..7e7677ad4 100644 --- a/controller/PostgreSQL.cpp +++ b/controller/PostgreSQL.cpp @@ -1746,7 +1746,7 @@ void PostgreSQL::_doRedisUpdate(sw::redis::Transaction &tx, std::string &control } tx.zremrangebyscore("nodes-online:{"+controllerId+"}", sw::redis::RightBoundedInterval(expireOld, sw::redis::BoundType::LEFT_OPEN)); - tx.zremrangebyscore("active-networks:{"+controllerId}"}", sw::redis::RightBoundedInterval(expireOld, sw::redis::BoundType::LEFT_OPEN)); + tx.zremrangebyscore("active-networks:{"+controllerId+"}", sw::redis::RightBoundedInterval(expireOld, sw::redis::BoundType::LEFT_OPEN)); for(const auto &k : keys) { tx.zremrangebyscore(k, sw::redis::RightBoundedInterval(expireOld, sw::redis::BoundType::LEFT_OPEN)); } From 39da360725cd5ff4297c504569cf20521beefe74 Mon Sep 17 00:00:00 2001 From: Grant Limberg Date: Fri, 22 May 2020 14:16:04 -0700 Subject: [PATCH 14/24] add online controller list in Redis --- controller/PostgreSQL.cpp | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/controller/PostgreSQL.cpp b/controller/PostgreSQL.cpp index 7e7677ad4..36d6da0a5 100644 --- a/controller/PostgreSQL.cpp +++ b/controller/PostgreSQL.cpp @@ -686,12 +686,13 @@ void PostgreSQL::heartbeat() PQfinish(conn); exit(6); } + int64_t ts = OSUtils::now(); if (conn) { std::string major = std::to_string(ZEROTIER_ONE_VERSION_MAJOR); std::string minor = std::to_string(ZEROTIER_ONE_VERSION_MINOR); std::string rev = std::to_string(ZEROTIER_ONE_VERSION_REVISION); std::string build = std::to_string(ZEROTIER_ONE_VERSION_BUILD); - std::string now = std::to_string(OSUtils::now()); + std::string now = std::to_string(ts); std::string host_port = std::to_string(_listenPort); std::string use_redis = (_rc != NULL) ? "true" : "false"; const char *values[10] = { @@ -726,6 +727,13 @@ void PostgreSQL::heartbeat() } PQclear(res); } + if (_rc != NULL) { + if (_rc->clusterMode) { + _cluster->zadd("controllers", controllerId, ts); + } else { + _redis->zadd("controllers", controllerId, ts); + } + } std::this_thread::sleep_for(std::chrono::milliseconds(1000)); } From 7bde004c7c9dc13004e5a2c12a5d8aeb42cd6cca Mon Sep 17 00:00:00 2001 From: Grant Limberg Date: Wed, 27 May 2020 20:41:47 -0700 Subject: [PATCH 15/24] Replace scan of Redis with iteration of _networks map --- controller/PostgreSQL.cpp | 33 +++++++++------------------------ 1 file changed, 9 insertions(+), 24 deletions(-) diff --git a/controller/PostgreSQL.cpp b/controller/PostgreSQL.cpp index 36d6da0a5..fd52f4615 100644 --- a/controller/PostgreSQL.cpp +++ b/controller/PostgreSQL.cpp @@ -1732,33 +1732,18 @@ void PostgreSQL::_doRedisUpdate(sw::redis::Transaction &tx, std::string &control // expire records from all-nodes and network-nodes member list uint64_t expireOld = OSUtils::now() - 300000; - auto cursor = 0LL; - std::unordered_set keys; - // can't scan for keys in a transaction, so we need to fall back to _cluster or _redis - // to get all network-members keys - if(_rc->clusterMode) { - auto r = _cluster->redis(controllerId); - while(true) { - cursor = r.scan(cursor, "network-nodes-online:{"+controllerId+"}:*", INT_MAX, std::inserter(keys, keys.begin())); - if (cursor == 0) { - break; - } - } - } else { - while(true) { - cursor = _redis->scan(cursor, "network-nodes-online:"+controllerId+":*", INT_MAX, std::inserter(keys, keys.begin())); - if (cursor == 0) { - break; - } - } - } - tx.zremrangebyscore("nodes-online:{"+controllerId+"}", sw::redis::RightBoundedInterval(expireOld, sw::redis::BoundType::LEFT_OPEN)); tx.zremrangebyscore("active-networks:{"+controllerId+"}", sw::redis::RightBoundedInterval(expireOld, sw::redis::BoundType::LEFT_OPEN)); - for(const auto &k : keys) { - tx.zremrangebyscore(k, sw::redis::RightBoundedInterval(expireOld, sw::redis::BoundType::LEFT_OPEN)); + { + std::lock_guard l(_networks_l); + for (const auto &it : _networks) { + uint64_t nwid_i = it.first; + char nwidTmp[64]; + OSUtils::ztsnprintf(nwidTmp,sizeof(nwidTmp), "%.16llx", nwid_i); + tx.zremrangebyscore("network-nodes-online:{"+controllerId+"}:"+nwidTmp, + sw::redis::RightBoundedInterval(expireOld, sw::redis::BoundType::LEFT_OPEN)); + } } - tx.exec(); } From 2f0f0e4f53071dd7b48d4d348b839664daa1fbf0 Mon Sep 17 00:00:00 2001 From: Grant Limberg Date: Tue, 26 May 2020 18:54:27 -0700 Subject: [PATCH 16/24] redis init optimization --- controller/PostgreSQL.cpp | 81 +++++++++++++++++++++++---------------- 1 file changed, 49 insertions(+), 32 deletions(-) diff --git a/controller/PostgreSQL.cpp b/controller/PostgreSQL.cpp index fd52f4615..4e13040fe 100644 --- a/controller/PostgreSQL.cpp +++ b/controller/PostgreSQL.cpp @@ -271,7 +271,7 @@ void PostgreSQL::initializeNetworks(PGconn *conn) exit(1); } - std::string setKey = "networks:{" + std::string(_myAddressStr.c_str()) + "}"; + std::string setKey = "networks:{" + _myAddressStr + "}"; if (_rc != NULL) { try { @@ -286,6 +286,8 @@ void PostgreSQL::initializeNetworks(PGconn *conn) } } + std::unordered_set networkSet; + const char *params[1] = { _myAddressStr.c_str() }; @@ -319,13 +321,7 @@ void PostgreSQL::initializeNetworks(PGconn *conn) }; std::string nwid = PQgetvalue(res, i, 0); - if (_rc != NULL) { - if (_rc->clusterMode) { - _cluster->sadd(setKey, nwid); - } else { - _redis->sadd(setKey, nwid); - } - } + networkSet.insert(nwid); config["id"] = nwid; config["nwid"] = nwid; @@ -441,6 +437,16 @@ void PostgreSQL::initializeNetworks(PGconn *conn) PQclear(res); + if (_rc && _rc->clusterMode) { + auto tx = _cluster->transaction(_myAddressStr, true); + tx.sadd(setKey, networkSet.begin(), networkSet.end()); + tx.exec(); + } else if (_rc && !_rc->clusterMode) { + auto tx = _redis->transaction(true); + tx.sadd(setKey, networkSet.begin(), networkSet.end()); + tx.exec(); + } + if (++this->_ready == 2) { if (_waitNoticePrinted) { fprintf(stderr,"[%s] NOTICE: %.10llx controller PostgreSQL data download complete." ZT_EOL_S,_timestr(),(unsigned long long)_myAddress.toInt()); @@ -463,30 +469,40 @@ void PostgreSQL::initializeMembers(PGconn *conn) fprintf(stderr, "Bad Database Connection: %s", PQerrorMessage(conn)); exit(1); } - std::string setKeyBase = "network-nodes-all:{" + std::string(_myAddressStr.c_str()) + "}:"; + std::string setKeyBase = "network-nodes-all:{" + _myAddressStr + "}:"; + if (_rc != NULL) { std::lock_guard l(_networks_l); + std::unordered_set deletes; for ( auto it : _networks) { uint64_t nwid_i = it.first; char nwidTmp[64] = {0}; OSUtils::ztsnprintf(nwidTmp, sizeof(nwidTmp), "%.16llx", nwid_i); std::string nwid(nwidTmp); std::string key = setKeyBase + nwid; - if (_rc->clusterMode) { - try { - _cluster->del(key); - } catch (...) {} - } else { - try { - _redis->del(key); - } catch (...) {} + deletes.insert(key); + } + + if (_rc->clusterMode) { + auto tx = _cluster->transaction(_myAddressStr, true); + for (std::string k : deletes) { + tx.del(k); } + tx.exec(); + } else { + auto tx = _redis->transaction(true); + for (std::string k : deletes) { + tx.del(k); + } + tx.exec(); } } const char *params[1] = { _myAddressStr.c_str() }; + + std::unordered_map networkMembers; fprintf(stderr, "Initializing Members...\n"); PGresult *res = PQexecParams(conn, @@ -520,13 +536,7 @@ void PostgreSQL::initializeMembers(PGconn *conn) std::string memberId(PQgetvalue(res, i, 0)); std::string networkId(PQgetvalue(res, i, 1)); - if (_rc != NULL) { - if (_rc->clusterMode) { - _cluster->sadd(setKeyBase + networkId, memberId); - } else { - _redis->sadd(setKeyBase + networkId, memberId); - } - } + networkMembers.insert(std::pair(setKeyBase+networkId, memberId)); std::string ctime = PQgetvalue(res, i, 5); config["id"] = memberId; @@ -628,19 +638,26 @@ void PostgreSQL::initializeMembers(PGconn *conn) config["ipAssignments"].push_back(ipaddr); } - if (_rc != NULL) { - if (_rc->clusterMode) { - _cluster->sadd(setKeyBase + networkId, memberId); - } else { - _redis->sadd(setKeyBase + networkId, memberId); - } - } - _memberChanged(empty, config, false); } PQclear(res); + if (_rc != NULL) { + if (_rc->clusterMode) { + auto tx = _cluster->transaction(_myAddressStr, true); + for (auto it : networkMembers) { + tx.sadd(it.first, it.second); + } + tx.exec(); + } else { + auto tx = _redis->transaction(true); + for (auto it : networkMembers) { + tx.sadd(it.first, it.second); + } + tx.exec(); + } + } if (++this->_ready == 2) { if (_waitNoticePrinted) { fprintf(stderr,"[%s] NOTICE: %.10llx controller PostgreSQL data download complete." ZT_EOL_S,_timestr(),(unsigned long long)_myAddress.toInt()); From 9794e31a64b5bd3f3e9568b9f017dfe05eb41a26 Mon Sep 17 00:00:00 2001 From: Grant Limberg Date: Tue, 26 May 2020 19:00:55 -0700 Subject: [PATCH 17/24] Temporary online notification thread hack Updates both Redis and Postgres --- controller/PostgreSQL.cpp | 82 ++++++++++++++++++++++++++++----------- controller/PostgreSQL.hpp | 2 +- 2 files changed, 60 insertions(+), 24 deletions(-) diff --git a/controller/PostgreSQL.cpp b/controller/PostgreSQL.cpp index 4e13040fe..57e09ed6a 100644 --- a/controller/PostgreSQL.cpp +++ b/controller/PostgreSQL.cpp @@ -1554,15 +1554,6 @@ void PostgreSQL::onlineNotificationThread() { waitForReady(); - if (_rc != NULL) { - onlineNotification_Redis(); - } else { - onlineNotification_Postgres(); - } -} - -void PostgreSQL::onlineNotification_Postgres() -{ PGconn *conn = getPgConn(); if (PQstatus(conn) == CONNECTION_BAD) { fprintf(stderr, "Connection to database failed: %s\n", PQerrorMessage(conn)); @@ -1571,19 +1562,64 @@ void PostgreSQL::onlineNotification_Postgres() } _connected = 1; - nlohmann::json jtmp1, jtmp2; while (_run == 1) { + std::unordered_map< std::pair,std::pair,_PairHasher > lastOnline; + { + std::lock_guard l(_lastOnline_l); + lastOnline.swap(_lastOnline); + } + + onlineNotification_Postgres(conn, lastOnline); + + try { + if (!lastOnline.empty()) { + if (_rc->clusterMode) { + auto tx = _cluster->transaction(_myAddressStr, true); + _doRedisUpdate(tx, _myAddressStr, lastOnline); + } else { + auto tx = _redis->transaction(true); + _doRedisUpdate(tx, _myAddressStr, lastOnline); + } + } + } catch (sw::redis::Error &e) { +#ifdef ZT_TRACE + fprintf(stderr, "Error in online notification thread (redis): %s\n", e.what()); +#endif + } + std::this_thread::sleep_for(std::chrono::milliseconds(10)); + } + + fprintf(stderr, "%s: Fell out of run loop in onlineNotificationThread\n", _myAddressStr.c_str()); + PQfinish(conn); + if (_run == 1) { + fprintf(stderr, "ERROR: %s onlineNotificationThread should still be running! Exiting Controller.\n", _myAddressStr.c_str()); + exit(6); + } + + // if (_rc != NULL) { + // onlineNotification_Redis(); + // } else { + // onlineNotification_Postgres(); + // } +} + +void PostgreSQL::onlineNotification_Postgres(PGconn *conn, std::unordered_map< std::pair,std::pair,_PairHasher > &lastOnline) +{ + + + nlohmann::json jtmp1, jtmp2; + // while (_run == 1) { if (PQstatus(conn) != CONNECTION_OK) { fprintf(stderr, "ERROR: Online Notification thread lost connection to Postgres."); PQfinish(conn); exit(5); } - std::unordered_map< std::pair,std::pair,_PairHasher > lastOnline; - { - std::lock_guard l(_lastOnline_l); - lastOnline.swap(_lastOnline); - } + // std::unordered_map< std::pair,std::pair,_PairHasher > lastOnline; + // { + // std::lock_guard l(_lastOnline_l); + // lastOnline.swap(_lastOnline); + // } PGresult *res = NULL; @@ -1665,14 +1701,14 @@ void PostgreSQL::onlineNotification_Postgres() PQclear(res); } - std::this_thread::sleep_for(std::chrono::milliseconds(10)); - } - fprintf(stderr, "%s: Fell out of run loop in onlineNotificationThread\n", _myAddressStr.c_str()); - PQfinish(conn); - if (_run == 1) { - fprintf(stderr, "ERROR: %s onlineNotificationThread should still be running! Exiting Controller.\n", _myAddressStr.c_str()); - exit(6); - } + // std::this_thread::sleep_for(std::chrono::milliseconds(10)); + // } + // fprintf(stderr, "%s: Fell out of run loop in onlineNotificationThread\n", _myAddressStr.c_str()); + // PQfinish(conn); + // if (_run == 1) { + // fprintf(stderr, "ERROR: %s onlineNotificationThread should still be running! Exiting Controller.\n", _myAddressStr.c_str()); + // exit(6); + // } } void PostgreSQL::onlineNotification_Redis() diff --git a/controller/PostgreSQL.hpp b/controller/PostgreSQL.hpp index f61670132..061349e1e 100644 --- a/controller/PostgreSQL.hpp +++ b/controller/PostgreSQL.hpp @@ -70,7 +70,7 @@ private: void commitThread(); void onlineNotificationThread(); - void onlineNotification_Postgres(); + void onlineNotification_Postgres(PGconn *conn, std::unordered_map< std::pair,std::pair,_PairHasher > &lastOnline); void onlineNotification_Redis(); void _doRedisUpdate(sw::redis::Transaction &tx, std::string &controllerId, std::unordered_map< std::pair,std::pair,_PairHasher > &lastOnline); From ad7ae5a3724a2114f1fe9047097c7fc40a873a03 Mon Sep 17 00:00:00 2001 From: Grant Limberg Date: Wed, 27 May 2020 20:43:20 -0700 Subject: [PATCH 18/24] list of all network-node pairs --- controller/PostgreSQL.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/controller/PostgreSQL.cpp b/controller/PostgreSQL.cpp index 57e09ed6a..31573705d 100644 --- a/controller/PostgreSQL.cpp +++ b/controller/PostgreSQL.cpp @@ -1774,6 +1774,7 @@ void PostgreSQL::_doRedisUpdate(sw::redis::Transaction &tx, std::string &control {"last_updated", std::to_string(ts)} }; tx.zadd("nodes-online:{"+controllerId+"}", memberId, ts) + .zadd("nodes-online2:{"+controllerId+"}", networkId+"-"+memberId, ts) .zadd("network-nodes-online:{"+controllerId+"}:"+networkId, memberId, ts) .zadd("active-networks:{"+controllerId+"}", networkId, ts) .sadd("network-nodes-all:{"+controllerId+"}:"+networkId, memberId) @@ -1786,6 +1787,7 @@ void PostgreSQL::_doRedisUpdate(sw::redis::Transaction &tx, std::string &control uint64_t expireOld = OSUtils::now() - 300000; tx.zremrangebyscore("nodes-online:{"+controllerId+"}", sw::redis::RightBoundedInterval(expireOld, sw::redis::BoundType::LEFT_OPEN)); + tx.zremrangebyscore("nodes-online2:{"+controllerId+"}", sw::redis::RightBoundedInterval(expireOld, sw::redis::BoundType::LEFT_OPEN)); tx.zremrangebyscore("active-networks:{"+controllerId+"}", sw::redis::RightBoundedInterval(expireOld, sw::redis::BoundType::LEFT_OPEN)); { std::lock_guard l(_networks_l); From 5692402d32adbe6fec5fb5bf31d4c7b84d516731 Mon Sep 17 00:00:00 2001 From: Grant Limberg Date: Wed, 27 May 2020 21:02:04 -0700 Subject: [PATCH 19/24] A little more cleanup --- controller/PostgreSQL.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/controller/PostgreSQL.cpp b/controller/PostgreSQL.cpp index 31573705d..2a512bbc2 100644 --- a/controller/PostgreSQL.cpp +++ b/controller/PostgreSQL.cpp @@ -1483,8 +1483,10 @@ void PostgreSQL::commitThread() std::string key = "networks:{" + controllerId + "}"; if (_rc->clusterMode) { _cluster->srem(key, id); + _cluster->del("network-nodes-online:{"+controllerId+"}:"+id); } else { _redis->srem(key, id); + _redis->del("network-nodes-online:{"+controllerId+"}:"+id); } } catch (sw::redis::Error &e) { fprintf(stderr, "ERROR: Error adding network to Redis: %s\n", e.what()); @@ -1525,8 +1527,10 @@ void PostgreSQL::commitThread() std::string key = "network-nodes-all:{" + controllerId + "}:" + networkId; if (_rc->clusterMode) { _cluster->srem(key, memberId); + _cluster->del("member:{"+controllerId+"}:"+networkId+":"+memberId); } else { _redis->srem(key, memberId); + _redis->del("member:{"+controllerId+"}:"+networkId+":"+memberId); } } catch (sw::redis::Error &e) { fprintf(stderr, "ERROR: Error deleting member from Redis: %s\n", e.what()); From 06de25a6802aa88b3576a5e3d917cf41cd5f50e8 Mon Sep 17 00:00:00 2001 From: Grant Limberg Date: Wed, 27 May 2020 22:25:07 -0700 Subject: [PATCH 20/24] bump online notification pause to 100ms also put all online notification redis commands into a single tx --- controller/PostgreSQL.cpp | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/controller/PostgreSQL.cpp b/controller/PostgreSQL.cpp index 2a512bbc2..22049389a 100644 --- a/controller/PostgreSQL.cpp +++ b/controller/PostgreSQL.cpp @@ -1590,7 +1590,7 @@ void PostgreSQL::onlineNotificationThread() fprintf(stderr, "Error in online notification thread (redis): %s\n", e.what()); #endif } - std::this_thread::sleep_for(std::chrono::milliseconds(10)); + std::this_thread::sleep_for(std::chrono::milliseconds(100)); } fprintf(stderr, "%s: Fell out of run loop in onlineNotificationThread\n", _myAddressStr.c_str()); @@ -1705,7 +1705,7 @@ void PostgreSQL::onlineNotification_Postgres(PGconn *conn, std::unordered_map< s PQclear(res); } - // std::this_thread::sleep_for(std::chrono::milliseconds(10)); + // std::this_thread::sleep_for(std::chrono::milliseconds(100)); // } // fprintf(stderr, "%s: Fell out of run loop in onlineNotificationThread\n", _myAddressStr.c_str()); // PQfinish(conn); @@ -1743,7 +1743,7 @@ void PostgreSQL::onlineNotification_Redis() fprintf(stderr, "Error in online notification thread (redis): %s\n", e.what()); #endif } - std::this_thread::sleep_for(std::chrono::milliseconds(10)); + std::this_thread::sleep_for(std::chrono::milliseconds(100)); } } @@ -1785,8 +1785,6 @@ void PostgreSQL::_doRedisUpdate(sw::redis::Transaction &tx, std::string &control .hmset("member:{"+controllerId+"}:"+networkId+":"+memberId, record.begin(), record.end()); } - tx.exec(); - // expire records from all-nodes and network-nodes member list uint64_t expireOld = OSUtils::now() - 300000; From 135a547889122472bb0004c4f0e6d81d435b9524 Mon Sep 17 00:00:00 2001 From: Grant Limberg Date: Thu, 28 May 2020 19:22:07 -0700 Subject: [PATCH 21/24] No longer update both pgsql & redis --- controller/PostgreSQL.cpp | 82 +++++++++++---------------------------- controller/PostgreSQL.hpp | 2 +- 2 files changed, 24 insertions(+), 60 deletions(-) diff --git a/controller/PostgreSQL.cpp b/controller/PostgreSQL.cpp index 22049389a..a9f9500bb 100644 --- a/controller/PostgreSQL.cpp +++ b/controller/PostgreSQL.cpp @@ -1558,6 +1558,15 @@ void PostgreSQL::onlineNotificationThread() { waitForReady(); + if (_rc != NULL) { + onlineNotification_Redis(); + } else { + onlineNotification_Postgres(); + } +} + +void PostgreSQL::onlineNotification_Postgres() +{ PGconn *conn = getPgConn(); if (PQstatus(conn) == CONNECTION_BAD) { fprintf(stderr, "Connection to database failed: %s\n", PQerrorMessage(conn)); @@ -1566,64 +1575,19 @@ void PostgreSQL::onlineNotificationThread() } _connected = 1; - while (_run == 1) { - std::unordered_map< std::pair,std::pair,_PairHasher > lastOnline; - { - std::lock_guard l(_lastOnline_l); - lastOnline.swap(_lastOnline); - } - - onlineNotification_Postgres(conn, lastOnline); - - try { - if (!lastOnline.empty()) { - if (_rc->clusterMode) { - auto tx = _cluster->transaction(_myAddressStr, true); - _doRedisUpdate(tx, _myAddressStr, lastOnline); - } else { - auto tx = _redis->transaction(true); - _doRedisUpdate(tx, _myAddressStr, lastOnline); - } - } - } catch (sw::redis::Error &e) { -#ifdef ZT_TRACE - fprintf(stderr, "Error in online notification thread (redis): %s\n", e.what()); -#endif - } - std::this_thread::sleep_for(std::chrono::milliseconds(100)); - } - - fprintf(stderr, "%s: Fell out of run loop in onlineNotificationThread\n", _myAddressStr.c_str()); - PQfinish(conn); - if (_run == 1) { - fprintf(stderr, "ERROR: %s onlineNotificationThread should still be running! Exiting Controller.\n", _myAddressStr.c_str()); - exit(6); - } - - // if (_rc != NULL) { - // onlineNotification_Redis(); - // } else { - // onlineNotification_Postgres(); - // } -} - -void PostgreSQL::onlineNotification_Postgres(PGconn *conn, std::unordered_map< std::pair,std::pair,_PairHasher > &lastOnline) -{ - - nlohmann::json jtmp1, jtmp2; - // while (_run == 1) { + while (_run == 1) { if (PQstatus(conn) != CONNECTION_OK) { fprintf(stderr, "ERROR: Online Notification thread lost connection to Postgres."); PQfinish(conn); exit(5); } - // std::unordered_map< std::pair,std::pair,_PairHasher > lastOnline; - // { - // std::lock_guard l(_lastOnline_l); - // lastOnline.swap(_lastOnline); - // } + std::unordered_map< std::pair,std::pair,_PairHasher > lastOnline; + { + std::lock_guard l(_lastOnline_l); + lastOnline.swap(_lastOnline); + } PGresult *res = NULL; @@ -1705,14 +1669,14 @@ void PostgreSQL::onlineNotification_Postgres(PGconn *conn, std::unordered_map< s PQclear(res); } - // std::this_thread::sleep_for(std::chrono::milliseconds(100)); - // } - // fprintf(stderr, "%s: Fell out of run loop in onlineNotificationThread\n", _myAddressStr.c_str()); - // PQfinish(conn); - // if (_run == 1) { - // fprintf(stderr, "ERROR: %s onlineNotificationThread should still be running! Exiting Controller.\n", _myAddressStr.c_str()); - // exit(6); - // } + std::this_thread::sleep_for(std::chrono::milliseconds(100)); + } + fprintf(stderr, "%s: Fell out of run loop in onlineNotificationThread\n", _myAddressStr.c_str()); + PQfinish(conn); + if (_run == 1) { + fprintf(stderr, "ERROR: %s onlineNotificationThread should still be running! Exiting Controller.\n", _myAddressStr.c_str()); + exit(6); + } } void PostgreSQL::onlineNotification_Redis() diff --git a/controller/PostgreSQL.hpp b/controller/PostgreSQL.hpp index 061349e1e..f61670132 100644 --- a/controller/PostgreSQL.hpp +++ b/controller/PostgreSQL.hpp @@ -70,7 +70,7 @@ private: void commitThread(); void onlineNotificationThread(); - void onlineNotification_Postgres(PGconn *conn, std::unordered_map< std::pair,std::pair,_PairHasher > &lastOnline); + void onlineNotification_Postgres(); void onlineNotification_Redis(); void _doRedisUpdate(sw::redis::Transaction &tx, std::string &controllerId, std::unordered_map< std::pair,std::pair,_PairHasher > &lastOnline); From 17c7ae20cc334adefbec5e32cfc7278b2ea7c7f2 Mon Sep 17 00:00:00 2001 From: Grant Limberg Date: Thu, 4 Jun 2020 13:46:16 -0700 Subject: [PATCH 22/24] force add libredis++.a for mac --- .../install/macos/lib/libredis++.a | Bin 0 -> 706784 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 ext/redis-plus-plus-1.1.1/install/macos/lib/libredis++.a diff --git a/ext/redis-plus-plus-1.1.1/install/macos/lib/libredis++.a b/ext/redis-plus-plus-1.1.1/install/macos/lib/libredis++.a new file mode 100644 index 0000000000000000000000000000000000000000..af027a63e481434ffbb226e94795a5793edee052 GIT binary patch literal 706784 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 Date: Thu, 4 Jun 2020 14:06:30 -0700 Subject: [PATCH 23/24] handle case of no networks and/or no members --- controller/PostgreSQL.cpp | 44 +++++++++++++++++++++------------------ 1 file changed, 24 insertions(+), 20 deletions(-) diff --git a/controller/PostgreSQL.cpp b/controller/PostgreSQL.cpp index a9f9500bb..87d3db7e4 100644 --- a/controller/PostgreSQL.cpp +++ b/controller/PostgreSQL.cpp @@ -437,14 +437,16 @@ void PostgreSQL::initializeNetworks(PGconn *conn) PQclear(res); - if (_rc && _rc->clusterMode) { - auto tx = _cluster->transaction(_myAddressStr, true); - tx.sadd(setKey, networkSet.begin(), networkSet.end()); - tx.exec(); - } else if (_rc && !_rc->clusterMode) { - auto tx = _redis->transaction(true); - tx.sadd(setKey, networkSet.begin(), networkSet.end()); - tx.exec(); + if(!networkSet.empty()) { + if (_rc && _rc->clusterMode) { + auto tx = _cluster->transaction(_myAddressStr, true); + tx.sadd(setKey, networkSet.begin(), networkSet.end()); + tx.exec(); + } else if (_rc && !_rc->clusterMode) { + auto tx = _redis->transaction(true); + tx.sadd(setKey, networkSet.begin(), networkSet.end()); + tx.exec(); + } } if (++this->_ready == 2) { @@ -643,19 +645,21 @@ void PostgreSQL::initializeMembers(PGconn *conn) PQclear(res); - if (_rc != NULL) { - if (_rc->clusterMode) { - auto tx = _cluster->transaction(_myAddressStr, true); - for (auto it : networkMembers) { - tx.sadd(it.first, it.second); + if (!networkMembers.empty()) { + if (_rc != NULL) { + if (_rc->clusterMode) { + auto tx = _cluster->transaction(_myAddressStr, true); + for (auto it : networkMembers) { + tx.sadd(it.first, it.second); + } + tx.exec(); + } else { + auto tx = _redis->transaction(true); + for (auto it : networkMembers) { + tx.sadd(it.first, it.second); + } + tx.exec(); } - tx.exec(); - } else { - auto tx = _redis->transaction(true); - for (auto it : networkMembers) { - tx.sadd(it.first, it.second); - } - tx.exec(); } } if (++this->_ready == 2) { From d0aacfddb796c00f5a49555c8aa34c7866fc3a6a Mon Sep 17 00:00:00 2001 From: Grant Limberg Date: Thu, 4 Jun 2020 14:12:20 -0700 Subject: [PATCH 24/24] one more spot --- controller/PostgreSQL.cpp | 24 +++++++++++++----------- 1 file changed, 13 insertions(+), 11 deletions(-) diff --git a/controller/PostgreSQL.cpp b/controller/PostgreSQL.cpp index 87d3db7e4..0f5fde77b 100644 --- a/controller/PostgreSQL.cpp +++ b/controller/PostgreSQL.cpp @@ -485,18 +485,20 @@ void PostgreSQL::initializeMembers(PGconn *conn) deletes.insert(key); } - if (_rc->clusterMode) { - auto tx = _cluster->transaction(_myAddressStr, true); - for (std::string k : deletes) { - tx.del(k); + if (!deletes.empty()) { + if (_rc->clusterMode) { + auto tx = _cluster->transaction(_myAddressStr, true); + for (std::string k : deletes) { + tx.del(k); + } + tx.exec(); + } else { + auto tx = _redis->transaction(true); + for (std::string k : deletes) { + tx.del(k); + } + tx.exec(); } - tx.exec(); - } else { - auto tx = _redis->transaction(true); - for (std::string k : deletes) { - tx.del(k); - } - tx.exec(); } }