Commit ebf5f1ad authored by jan.koester's avatar jan.koester
Browse files

test

parent 4d39c3e0
Loading
Loading
Loading
Loading
Loading
+11 −11
Original line number Diff line number Diff line
@@ -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);
@@ -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,
+19 −14
Original line number Diff line number Diff line
@@ -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;
@@ -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;
        }