From 40f376e2b976a85e5108744803da94883d944dfe Mon Sep 17 00:00:00 2001 From: Grant Limberg Date: Thu, 2 Sep 2021 12:45:19 -0700 Subject: [PATCH] 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)); }