Commit 873e52bd authored by jan.koester's avatar jan.koester
Browse files

test

parent 9cf3e659
Loading
Loading
Loading
Loading
Loading
+15 −3
Changes for src/session.cpp: 15 added lines, 3 removed lines.
Original line number Diff line number Diff line
@@ -27,6 +27,7 @@

#include <iostream>
#include <mutex>
#include <thread>

#include "session.h"
#include "authdb.h"
@@ -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;
@@ -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;