Loading src/cluster.cpp +12 −3 Changes for src/cluster.cpp: 12 added lines, 3 removed lines. Original line number Diff line number Diff line Loading @@ -975,17 +975,26 @@ namespace authdb { std::vector<Cluster::SessionInfo> Cluster::listAllSessions() { std::vector<SessionInfo> out; if (!session_read_client_) return out; if (!session_read_client_) return out; std::set<std::string> seen_sids; std::set<uint64_t> all_groups; try { // Try to retrieve and deserialize each group as a session for (uint64_t gid : all_groups) { try { // Bounded per group — this runs synchronously in the admin // "list sessions" request thread (see apiListSessions in // admin.cpp). Without a deadline, one degraded group gives // its retrieve() an independent ~30s retry budget (see // Cluster::fetchSessionBySid), which multiplies across every // session in the cluster instead of failing that group closed. auto deadline = std::chrono::steady_clock::now() + std::chrono::seconds(5); auto data = session_read_client_->retrieve(gid, deadline); std::cerr << "[SESSIONS-DIAG] retrieve gid=" << gid << " data_size=" << data.size() << std::endl; if (data.empty()) continue; SessionInfo info; bool deser = SessionBlock::deserialize(data, info.sid, info.uid, info.did, info.members, info.username, info.gpo_results, Loading Loading
src/cluster.cpp +12 −3 Changes for src/cluster.cpp: 12 added lines, 3 removed lines. Original line number Diff line number Diff line Loading @@ -975,17 +975,26 @@ namespace authdb { std::vector<Cluster::SessionInfo> Cluster::listAllSessions() { std::vector<SessionInfo> out; if (!session_read_client_) return out; if (!session_read_client_) return out; std::set<std::string> seen_sids; std::set<uint64_t> all_groups; try { // Try to retrieve and deserialize each group as a session for (uint64_t gid : all_groups) { try { // Bounded per group — this runs synchronously in the admin // "list sessions" request thread (see apiListSessions in // admin.cpp). Without a deadline, one degraded group gives // its retrieve() an independent ~30s retry budget (see // Cluster::fetchSessionBySid), which multiplies across every // session in the cluster instead of failing that group closed. auto deadline = std::chrono::steady_clock::now() + std::chrono::seconds(5); auto data = session_read_client_->retrieve(gid, deadline); std::cerr << "[SESSIONS-DIAG] retrieve gid=" << gid << " data_size=" << data.size() << std::endl; if (data.empty()) continue; SessionInfo info; bool deser = SessionBlock::deserialize(data, info.sid, info.uid, info.did, info.members, info.username, info.gpo_results, Loading