summaryrefslogtreecommitdiff
path: root/controller/PostgreSQL.cpp
diff options
context:
space:
mode:
authorGrant Limberg <[email protected]>2023-03-24 13:03:15 -0700
committerGitHub <[email protected]>2023-03-24 13:03:15 -0700
commit03bd96d1d1a5c74ef92798969cd84f8a5ebe9fc2 (patch)
tree78bdbdc645f90aeb6f1aaa3f425195b2bad395cd /controller/PostgreSQL.cpp
parent4a85cf5e74fdd2173a54e9236f56ba5b8449334f (diff)
move begin/commit into try/catch block (#1932)
Thread was exiting in some cases
Diffstat (limited to 'controller/PostgreSQL.cpp')
-rw-r--r--controller/PostgreSQL.cpp26
1 files changed, 14 insertions, 12 deletions
diff --git a/controller/PostgreSQL.cpp b/controller/PostgreSQL.cpp
index e7bdd052..626fa4c2 100644
--- a/controller/PostgreSQL.cpp
+++ b/controller/PostgreSQL.cpp
@@ -1011,8 +1011,6 @@ void PostgreSQL::heartbeat()
int64_t ts = OSUtils::now();
if(c->c) {
- pqxx::work w{*c->c};
-
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);
@@ -1023,21 +1021,25 @@ void PostgreSQL::heartbeat()
std::string redis_mem_status = (_redisMemberStatus) ? "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, redis_member_status) "
- "VALUES ("+w.quote(controllerId)+", "+w.quote(hostname)+", TO_TIMESTAMP("+now+"::double precision/1000), "+
- w.quote(publicIdentity)+", "+major+", "+minor+", "+rev+", "+build+", "+host_port+", "+use_redis+", "+redis_mem_status+") "
- "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, "
- "use_redis = EXCLUDED.use_redis, redis_member_status = EXCLUDED.redis_member_status");
+ pqxx::work w{*c->c};
+
+ 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, redis_member_status) "
+ "VALUES ("+w.quote(controllerId)+", "+w.quote(hostname)+", TO_TIMESTAMP("+now+"::double precision/1000), "+
+ w.quote(publicIdentity)+", "+major+", "+minor+", "+rev+", "+build+", "+host_port+", "+use_redis+", "+redis_mem_status+") "
+ "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, "
+ "use_redis = EXCLUDED.use_redis, redis_member_status = EXCLUDED.redis_member_status");
+ w.commit();
} catch (std::exception &e) {
- fprintf(stderr, "Heartbeat update failed: %s\n", e.what());
+ fprintf(stderr, "%s: Heartbeat update failed: %s\n", controllerId, e.what());
w.abort();
_pool->unborrow(c);
std::this_thread::sleep_for(std::chrono::milliseconds(1000));
continue;
- }
- w.commit();
+ }
+
}
_pool->unborrow(c);