diff --git a/controller/PostgreSQL.cpp b/controller/PostgreSQL.cpp index 319c02684..c38365457 100644 --- a/controller/PostgreSQL.cpp +++ b/controller/PostgreSQL.cpp @@ -21,6 +21,8 @@ #include "../version.h" #include "Redis.hpp" +#include + #include #include #include @@ -159,6 +161,8 @@ using Attrs = std::vector>; using Item = std::pair; using ItemStream = std::vector; + + PostgreSQL::PostgreSQL(const Identity &myId, const char *path, int listenPort, RedisConfig *rc) : DB() , _pool() @@ -173,6 +177,7 @@ PostgreSQL::PostgreSQL(const Identity &myId, const char *path, int listenPort, R , _redis(NULL) , _cluster(NULL) , _redisMemberStatus(false) + , _smee(NULL) { char myAddress[64]; _myAddressStr = myId.address().toString(myAddress); @@ -248,10 +253,17 @@ PostgreSQL::PostgreSQL(const Identity &myId, const char *path, int listenPort, R _commitThread[i] = std::thread(&PostgreSQL::commitThread, this); } _onlineNotificationThread = std::thread(&PostgreSQL::onlineNotificationThread, this); + + configureSmee(); } PostgreSQL::~PostgreSQL() { + if (_smee != NULL) { + smeeclient::smee_client_delete(_smee); + _smee = NULL; + } + _run = 0; std::this_thread::sleep_for(std::chrono::milliseconds(100)); @@ -265,6 +277,20 @@ PostgreSQL::~PostgreSQL() _onlineNotificationThread.join(); } +void PostgreSQL::configureSmee() +{ + const char *TEMPORAL_HOST = "ZT_TEMPORAL_HOST"; + const char *TEMPORAL_NAMESPACE = "ZT_TEMPORAL_NAMESPACE"; + const char *SMEE_TASK_QUEUE = "ZT_SMEE_TASK_QUEUE"; + + const char *host = getenv(TEMPORAL_HOST); + const char *ns = getenv(TEMPORAL_NAMESPACE); + const char *task_queue = getenv(SMEE_TASK_QUEUE); + + if (host != NULL && ns != NULL && task_queue != NULL) { + this->_smee = smeeclient::smee_client_new(host, ns, task_queue); + } +} bool PostgreSQL::waitForReady() { diff --git a/controller/PostgreSQL.hpp b/controller/PostgreSQL.hpp index 8eea3608a..4e225dcb0 100644 --- a/controller/PostgreSQL.hpp +++ b/controller/PostgreSQL.hpp @@ -32,6 +32,10 @@ extern "C" { typedef struct pg_conn PGconn; } +namespace smeeclient { + struct SmeeClient; +} + namespace ZeroTier { struct RedisConfig; @@ -144,6 +148,8 @@ private: uint64_t _doRedisUpdate(sw::redis::Transaction &tx, std::string &controllerId, std::unordered_map< std::pair,std::pair,_PairHasher > &lastOnline); + void configureSmee(); + enum OverrideMode { ALLOW_PGBOUNCER_OVERRIDE = 0, NO_OVERRIDE = 1 @@ -178,6 +184,8 @@ private: std::shared_ptr _redis; std::shared_ptr _cluster; bool _redisMemberStatus; + + smeeclient::SmeeClient *_smee; }; } // namespace ZeroTier diff --git a/make-linux.mk b/make-linux.mk index 9cf0d0c26..865da2d8b 100644 --- a/make-linux.mk +++ b/make-linux.mk @@ -326,9 +326,9 @@ ifeq ($(ZT_CONTROLLER),1) override DEFS+=-DZT_CONTROLLER_USE_LIBPQ -DZT_NO_PEER_METRICS override INCLUDES+=-I/usr/include/postgresql -Iext/libpqxx-7.7.3/install/ubuntu22.04/$(EXT_ARCH)/include -Iext/hiredis-1.0.2/include/ -Iext/redis-plus-plus-1.3.3/install/ubuntu22.04/$(EXT_ARCH)/include/sw/ ifeq ($(ZT_DEBUG),1) - LDLIBS+=rustybits/target/debug/libsmeeclient.a -ldl -lssl -lcrypto + override LDLIBS+=rustybits/target/debug/libsmeeclient.a else - LDLIBS+=rustybits/target/release/libsmeeclient.a -ldl -lssl -lcrypto + override LDLIBS+=rustybits/target/release/libsmeeclient.a endif endif