Loading src/session.cpp +15 −3 Changes for src/session.cpp: 15 added lines, 3 removed lines. Original line number Diff line number Diff line Loading @@ -27,6 +27,7 @@ #include <iostream> #include <mutex> #include <thread> #include "session.h" #include "authdb.h" Loading Loading @@ -478,13 +479,13 @@ const authdb::SessionData *authdb::ClusterSession::getSession(uuid::uuid session std::chrono::steady_clock::now() - cur->_lastClusterSync).count(); if (age < 5) return cur; // Cache expired — remove and re-fetch below removeLocal(sessionid); } } // Fetch from cluster // Fetch from cluster — retry every 150ms until success or 5s timeout if (g_Cluster && g_Cluster->isRunning()) { auto deadline = std::chrono::steady_clock::now() + std::chrono::seconds(5); while (std::chrono::steady_clock::now() < deadline) { uuid::uuid sid, uid, did; std::vector<uuid::uuid> members; std::string username; Loading @@ -496,9 +497,20 @@ const authdb::SessionData *authdb::ClusterSession::getSession(uuid::uuid session imported->_lastClusterSync = std::chrono::steady_clock::now(); std::lock_guard<std::mutex> guard(_lock); removeLocal(sessionid); appendLocal(imported); return imported; } std::this_thread::sleep_for(std::chrono::milliseconds(150)); } // All retries exhausted — keep stale cache entry if available std::lock_guard<std::mutex> guard(_lock); SessionData *stale = findLocal(sessionid); if (stale) { stale->_lastClusterSync = std::chrono::steady_clock::now(); return stale; } } return nullptr; Loading Loading
src/session.cpp +15 −3 Changes for src/session.cpp: 15 added lines, 3 removed lines. Original line number Diff line number Diff line Loading @@ -27,6 +27,7 @@ #include <iostream> #include <mutex> #include <thread> #include "session.h" #include "authdb.h" Loading Loading @@ -478,13 +479,13 @@ const authdb::SessionData *authdb::ClusterSession::getSession(uuid::uuid session std::chrono::steady_clock::now() - cur->_lastClusterSync).count(); if (age < 5) return cur; // Cache expired — remove and re-fetch below removeLocal(sessionid); } } // Fetch from cluster // Fetch from cluster — retry every 150ms until success or 5s timeout if (g_Cluster && g_Cluster->isRunning()) { auto deadline = std::chrono::steady_clock::now() + std::chrono::seconds(5); while (std::chrono::steady_clock::now() < deadline) { uuid::uuid sid, uid, did; std::vector<uuid::uuid> members; std::string username; Loading @@ -496,9 +497,20 @@ const authdb::SessionData *authdb::ClusterSession::getSession(uuid::uuid session imported->_lastClusterSync = std::chrono::steady_clock::now(); std::lock_guard<std::mutex> guard(_lock); removeLocal(sessionid); appendLocal(imported); return imported; } std::this_thread::sleep_for(std::chrono::milliseconds(150)); } // All retries exhausted — keep stale cache entry if available std::lock_guard<std::mutex> guard(_lock); SessionData *stale = findLocal(sessionid); if (stale) { stale->_lastClusterSync = std::chrono::steady_clock::now(); return stale; } } return nullptr; Loading