From 40f376e2b976a85e5108744803da94883d944dfe Mon Sep 17 00:00:00 2001 From: Grant Limberg Date: Thu, 2 Sep 2021 12:45:19 -0700 Subject: [PATCH 1/3] print db pool stats periodically --- controller/PostgreSQL.cpp | 26 +++++++++++--------------- 1 file changed, 11 insertions(+), 15 deletions(-) diff --git a/controller/PostgreSQL.cpp b/controller/PostgreSQL.cpp index 4550e8722..740a0c307 100644 --- a/controller/PostgreSQL.cpp +++ b/controller/PostgreSQL.cpp @@ -806,7 +806,7 @@ void PostgreSQL::heartbeat() std::string build = std::to_string(ZEROTIER_ONE_VERSION_BUILD); std::string now = std::to_string(ts); std::string host_port = std::to_string(_listenPort); - std::string use_redis = "false"; // (_rc != NULL) ? "true" : "false"; + std::string use_redis = (_rc != NULL) ? "true" : "false"; try { pqxx::result res = w.exec0("INSERT INTO ztc_controller (id, cluster_host, last_alive, public_identity, v_major, v_minor, v_rev, v_build, host_port, use_redis) " @@ -1309,25 +1309,18 @@ void PostgreSQL::onlineNotificationThread() void PostgreSQL::onlineNotification_Postgres() { - try { - auto c = _pool->borrow(); - _pool->unborrow(c); - } catch(std::exception &e) { - fprintf(stderr, "error getting connection in onlineNotification thread\n"); - exit(5); - } _connected = 1; nlohmann::json jtmp1, jtmp2; while (_run == 1) { + auto c = _pool->borrow(); try { std::unordered_map< std::pair,std::pair,_PairHasher > lastOnline; { std::lock_guard l(_lastOnline_l); lastOnline.swap(_lastOnline); } - - auto c = _pool->borrow(); + pqxx::work w(*c->c); // using pqxx::stream_to would be a really nice alternative here, but @@ -1361,10 +1354,9 @@ void PostgreSQL::onlineNotification_Postgres() try { pqxx::row r = w.exec_params1("SELECT id, network_id FROM ztc_member WHERE network_id = $1 AND id = $2", - networkId, memberId); - + networkId, memberId); } catch (pqxx::unexpected_rows &e) { - fprintf(stderr, "Member count failed: %s\n", e.what()); + // fprintf(stderr, "Member count failed: %s\n", e.what()); continue; } @@ -1395,10 +1387,14 @@ void PostgreSQL::onlineNotification_Postgres() w.commit(); } // fprintf(stderr, "Updated online status of %d members\n", updateCount); - _pool->unborrow(c); } catch (std::exception &e) { fprintf(stderr, "%s: error in onlinenotification thread: %s\n", _myAddressStr.c_str(), e.what()); - } + } + _pool->unborrow(c); + + ConnectionPoolStats stats = _pool->get_stats(); + fprintf(stderr, "pool stats: in use size: %llu, available size: %llu, total: %llu\n", + stats.borrowed_size, stats.pool_size, (stats.borrowed_size, stats.pool_size)); std::this_thread::sleep_for(std::chrono::seconds(10)); } From 57c1d96b71e1e4b0e487b948ee030256c40f3c6d Mon Sep 17 00:00:00 2001 From: Grant Limberg Date: Thu, 2 Sep 2021 12:48:49 -0700 Subject: [PATCH 2/3] math --- controller/PostgreSQL.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/controller/PostgreSQL.cpp b/controller/PostgreSQL.cpp index 740a0c307..b26e99084 100644 --- a/controller/PostgreSQL.cpp +++ b/controller/PostgreSQL.cpp @@ -1394,7 +1394,7 @@ void PostgreSQL::onlineNotification_Postgres() ConnectionPoolStats stats = _pool->get_stats(); fprintf(stderr, "pool stats: in use size: %llu, available size: %llu, total: %llu\n", - stats.borrowed_size, stats.pool_size, (stats.borrowed_size, stats.pool_size)); + stats.borrowed_size, stats.pool_size, (stats.borrowed_size + stats.pool_size)); std::this_thread::sleep_for(std::chrono::seconds(10)); } From 16ff14bda7022b52bc3d7414ce22f36a23f0eac9 Mon Sep 17 00:00:00 2001 From: Grant Limberg Date: Thu, 2 Sep 2021 13:48:08 -0700 Subject: [PATCH 3/3] identify controller in pool stats --- controller/PostgreSQL.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/controller/PostgreSQL.cpp b/controller/PostgreSQL.cpp index b26e99084..ac44894af 100644 --- a/controller/PostgreSQL.cpp +++ b/controller/PostgreSQL.cpp @@ -1393,8 +1393,8 @@ void PostgreSQL::onlineNotification_Postgres() _pool->unborrow(c); ConnectionPoolStats stats = _pool->get_stats(); - fprintf(stderr, "pool stats: in use size: %llu, available size: %llu, total: %llu\n", - stats.borrowed_size, stats.pool_size, (stats.borrowed_size + stats.pool_size)); + fprintf(stderr, "%s pool stats: in use size: %llu, available size: %llu, total: %llu\n", + _myAddressStr.c_str(), stats.borrowed_size, stats.pool_size, (stats.borrowed_size + stats.pool_size)); std::this_thread::sleep_for(std::chrono::seconds(10)); }