Optimize session status updates
Reduce per-token store churn by updating status on transitions, caching instance-level indicators, and avoiding O(n) session-map cloning.
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
import type { Session, SessionStatus } from "../types/session"
|
||||
import type { MessageInfo } from "../types/message"
|
||||
import type { MessageRecord } from "./message-v2/types"
|
||||
import { sessions } from "./sessions"
|
||||
import { getInstanceSessionIndicatorStatusCached, sessions } from "./session-state"
|
||||
import { isSessionCompactionActive } from "./session-compaction"
|
||||
import { messageStoreBus } from "./message-v2/bus"
|
||||
|
||||
@@ -173,42 +173,7 @@ export function getSessionStatus(instanceId: string, sessionId: string): Session
|
||||
export type InstanceSessionIndicatorStatus = "permission" | SessionStatus
|
||||
|
||||
export function getInstanceSessionIndicatorStatus(instanceId: string): InstanceSessionIndicatorStatus {
|
||||
const instanceSessions = sessions().get(instanceId)
|
||||
if (!instanceSessions || instanceSessions.size === 0) {
|
||||
return "idle"
|
||||
}
|
||||
|
||||
let bestRank = 0
|
||||
let best: InstanceSessionIndicatorStatus = "idle"
|
||||
|
||||
for (const session of instanceSessions.values()) {
|
||||
let rank = 0
|
||||
let status: InstanceSessionIndicatorStatus = "idle"
|
||||
|
||||
if (session.pendingPermission) {
|
||||
status = "permission"
|
||||
rank = 3
|
||||
} else {
|
||||
const sessionStatus = getSessionStatus(instanceId, session.id)
|
||||
if (sessionStatus === "compacting") {
|
||||
status = "compacting"
|
||||
rank = 2
|
||||
} else if (sessionStatus === "working") {
|
||||
status = "working"
|
||||
rank = 1
|
||||
}
|
||||
}
|
||||
|
||||
if (rank > bestRank) {
|
||||
bestRank = rank
|
||||
best = status
|
||||
if (bestRank === 3) {
|
||||
break
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return best
|
||||
return getInstanceSessionIndicatorStatusCached(instanceId)
|
||||
}
|
||||
|
||||
export function isSessionBusy(instanceId: string, sessionId: string): boolean {
|
||||
|
||||
Reference in New Issue
Block a user