Loading src/cluster.cpp +11 −11 Original line number Diff line number Diff line Loading @@ -491,7 +491,7 @@ namespace authdb { void Cluster::pushSession(const SessionData &sess) { if (!pclient_) return; auto data = std::make_shared<std::vector<uint8_t>>(SessionBlock::serialize(sess)); auto data = SessionBlock::serialize(sess); uuid::uuid uid, did, sid; sess.getSid(sid); Loading @@ -501,17 +501,17 @@ namespace authdb { uint64_t sgid = sessionGroupId(uid, did); uint64_t sid_gid = sidGroupId(sid); // Push in background thread so login response isn't blocked by timeouts std::thread([this, data, sgid, sid_gid]() { try { std::unique_lock<std::timed_mutex> lock(client_mutex_, std::chrono::seconds(5)); if (!lock.owns_lock()) return; pclient_->store(sgid, data->data(), data->size()); pclient_->store(sid_gid, data->data(), data->size()); if (!lock.owns_lock()) { std::cerr << "Cluster push session: lock timeout" << std::endl; return; } pclient_->store(sgid, data.data(), data.size()); pclient_->store(sid_gid, data.data(), data.size()); } catch (const std::exception &e) { std::cerr << "Cluster push session (bg): " << e.what() << std::endl; std::cerr << "Cluster push session: " << e.what() << std::endl; } }).detach(); } bool Cluster::fetchSession(const uuid::uuid &uid, const uuid::uuid &did, Loading src/session.cpp +19 −14 Original line number Diff line number Diff line Loading @@ -486,10 +486,10 @@ const authdb::SessionData *authdb::ClusterSession::getSession(uuid::uuid session cleanupExpired(); SessionData *cur = findLocal(sessionid); if (cur) { // Only re-sync with cluster if local data is older than 60 seconds if (g_Cluster && g_Cluster->isRunning()) { auto age = std::chrono::duration_cast<std::chrono::seconds>( std::chrono::steady_clock::now() - cur->_lastClusterSync).count(); if (age >= 60 && g_Cluster && g_Cluster->isRunning()) { if (age >= 5) { uuid::uuid c_sid, c_uid, c_did; std::vector<uuid::uuid> c_members; std::string c_username; Loading @@ -499,8 +499,13 @@ const authdb::SessionData *authdb::ClusterSession::getSession(uuid::uuid session cur->_members = c_members; cur->_username = c_username; cur->setGPOResults(c_gpo); } cur->_lastClusterSync = std::chrono::steady_clock::now(); } else { // Session was removed from cluster — invalidate locally removeLocal(sessionid); return nullptr; } } } return cur; } Loading Loading
src/cluster.cpp +11 −11 Original line number Diff line number Diff line Loading @@ -491,7 +491,7 @@ namespace authdb { void Cluster::pushSession(const SessionData &sess) { if (!pclient_) return; auto data = std::make_shared<std::vector<uint8_t>>(SessionBlock::serialize(sess)); auto data = SessionBlock::serialize(sess); uuid::uuid uid, did, sid; sess.getSid(sid); Loading @@ -501,17 +501,17 @@ namespace authdb { uint64_t sgid = sessionGroupId(uid, did); uint64_t sid_gid = sidGroupId(sid); // Push in background thread so login response isn't blocked by timeouts std::thread([this, data, sgid, sid_gid]() { try { std::unique_lock<std::timed_mutex> lock(client_mutex_, std::chrono::seconds(5)); if (!lock.owns_lock()) return; pclient_->store(sgid, data->data(), data->size()); pclient_->store(sid_gid, data->data(), data->size()); if (!lock.owns_lock()) { std::cerr << "Cluster push session: lock timeout" << std::endl; return; } pclient_->store(sgid, data.data(), data.size()); pclient_->store(sid_gid, data.data(), data.size()); } catch (const std::exception &e) { std::cerr << "Cluster push session (bg): " << e.what() << std::endl; std::cerr << "Cluster push session: " << e.what() << std::endl; } }).detach(); } bool Cluster::fetchSession(const uuid::uuid &uid, const uuid::uuid &did, Loading
src/session.cpp +19 −14 Original line number Diff line number Diff line Loading @@ -486,10 +486,10 @@ const authdb::SessionData *authdb::ClusterSession::getSession(uuid::uuid session cleanupExpired(); SessionData *cur = findLocal(sessionid); if (cur) { // Only re-sync with cluster if local data is older than 60 seconds if (g_Cluster && g_Cluster->isRunning()) { auto age = std::chrono::duration_cast<std::chrono::seconds>( std::chrono::steady_clock::now() - cur->_lastClusterSync).count(); if (age >= 60 && g_Cluster && g_Cluster->isRunning()) { if (age >= 5) { uuid::uuid c_sid, c_uid, c_did; std::vector<uuid::uuid> c_members; std::string c_username; Loading @@ -499,8 +499,13 @@ const authdb::SessionData *authdb::ClusterSession::getSession(uuid::uuid session cur->_members = c_members; cur->_username = c_username; cur->setGPOResults(c_gpo); } cur->_lastClusterSync = std::chrono::steady_clock::now(); } else { // Session was removed from cluster — invalidate locally removeLocal(sessionid); return nullptr; } } } return cur; } Loading