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

test

parent fda5af05
Loading
Loading
Loading
Loading
Loading
+6 −33
Changes for src/cluster.cpp: 6 added lines, 33 removed lines.
Original line number Diff line number Diff line
@@ -582,7 +582,12 @@ namespace authdb {
        out.clear();
        std::set<std::string> seen_sids;

        auto tryDeserialize = [&](const std::vector<uint8_t> &data) {
        // Enumerate dedicated session store only (memory-only, contains only sessions).
        // Peer sessions are already imported here via pushSession replication.
        auto groups = session_store_->list_groups();
        for (uint64_t gid : groups) {
            std::vector<uint8_t> data;
            if (session_store_->fetch(gid, 0, data)) {
                SessionInfo info;
                if (SessionBlock::deserialize(data, info.sid, info.uid, info.did,
                                              info.members, info.username, info.gpo_results)) {
@@ -592,38 +597,6 @@ namespace authdb {
                        out.push_back(std::move(info));
                    }
                }
        };

        // Enumerate dedicated session store (contains only sessions)
        auto groups = session_store_->list_groups();
        for (uint64_t gid : groups) {
            std::vector<uint8_t> data;
            if (session_store_->fetch(gid, 0, data)) {
                tryDeserialize(data);
            }
        }

        // Enumerate each peer node for sessions we haven't seen
        if (pclient_) {
            for (size_t ni = 0; ni < cfg_.peers.size(); ni++) {
                try {
                    std::vector<uint64_t> pgroups;
                    {
                        std::unique_lock<std::timed_mutex> lock(client_mutex_, std::chrono::seconds(5));
                        if (!lock.owns_lock()) continue;
                        if (!pclient_->list_groups_on_node(ni, pgroups)) continue;
                    }
                    for (uint64_t gid : pgroups) {
                        std::vector<uint8_t> data;
                        std::unique_lock<std::timed_mutex> lock(client_mutex_, std::chrono::seconds(5));
                        if (!lock.owns_lock()) break;
                        if (pclient_->fetch_from_peers(gid, 0, data) && !data.empty()) {
                            tryDeserialize(data);
                        }
                    }
                } catch (...) {
                    continue;
                }
            }
        }
    }