mirror of
https://github.com/stablyai/orca.git
synced 2026-10-22 08:03:37 +00:00
perf(workspace-cleanup): bound restarted evidence scans
This commit is contained in:
+6
-3
@@ -38,7 +38,7 @@ describe('useWorkspaceCleanupGitEvidence', () => {
|
||||
})
|
||||
})
|
||||
|
||||
it('counts queued rows and isolates a restarted pass from stale settlements', async () => {
|
||||
it('bounds restarted passes and isolates them from stale settlements', async () => {
|
||||
const candidates = ['a', 'b', 'c', 'd', 'e', 'f'].map(deferredCandidate)
|
||||
const view = renderHook(
|
||||
({ enabled }: { enabled: boolean }) =>
|
||||
@@ -53,7 +53,8 @@ describe('useWorkspaceCleanupGitEvidence', () => {
|
||||
view.rerender({ enabled: false })
|
||||
await waitFor(() => expect(view.result.current.pendingWorktreeIds.size).toBe(0))
|
||||
view.rerender({ enabled: true })
|
||||
await waitFor(() => expect(holders.scan).toHaveBeenCalledTimes(8))
|
||||
await waitFor(() => expect(view.result.current.pendingWorktreeIds.size).toBe(6))
|
||||
expect(holders.scan).toHaveBeenCalledTimes(4)
|
||||
expect(view.result.current.pendingWorktreeIds.size).toBe(6)
|
||||
|
||||
await act(async () => {
|
||||
@@ -63,6 +64,7 @@ describe('useWorkspaceCleanupGitEvidence', () => {
|
||||
errors: []
|
||||
})
|
||||
})
|
||||
await waitFor(() => expect(holders.scan).toHaveBeenCalledTimes(5))
|
||||
expect(view.result.current.pendingWorktreeIds.size).toBe(6)
|
||||
expect(view.result.current.evidenceByWorktreeId.size).toBe(0)
|
||||
|
||||
@@ -87,7 +89,7 @@ describe('useWorkspaceCleanupGitEvidence', () => {
|
||||
|
||||
await waitFor(() => expect(holders.scan).toHaveBeenCalledTimes(1))
|
||||
view.rerender({ scannedAt: 2 })
|
||||
await waitFor(() => expect(holders.scan).toHaveBeenCalledTimes(2))
|
||||
expect(holders.scan).toHaveBeenCalledTimes(1)
|
||||
|
||||
await act(async () => {
|
||||
pending[0]?.resolve({
|
||||
@@ -96,6 +98,7 @@ describe('useWorkspaceCleanupGitEvidence', () => {
|
||||
errors: []
|
||||
})
|
||||
})
|
||||
await waitFor(() => expect(holders.scan).toHaveBeenCalledTimes(2))
|
||||
expect(view.result.current.evidenceByWorktreeId.size).toBe(0)
|
||||
expect(view.result.current.pendingWorktreeIds).toEqual(new Set(['a']))
|
||||
|
||||
|
||||
+12
-7
@@ -44,6 +44,8 @@ export function useWorkspaceCleanupGitEvidence({
|
||||
const queueRef = useRef<string[]>([])
|
||||
const queuedRef = useRef(new Set<string>())
|
||||
const inFlightRef = useRef(new Set<string>())
|
||||
// Why: restarted filters must share one physical RPC/subprocess cap.
|
||||
const activeRequestWorktreeIdsRef = useRef(new Set<string>())
|
||||
const totalRef = useRef(0)
|
||||
const enabledRef = useRef(enabled)
|
||||
const scannedAtRef = useRef(scannedAt)
|
||||
@@ -66,15 +68,19 @@ export function useWorkspaceCleanupGitEvidence({
|
||||
const pump = useCallback(() => {
|
||||
const generation = generationRef.current
|
||||
while (
|
||||
inFlightRef.current.size < WORKSPACE_CLEANUP_GIT_EVIDENCE_CONCURRENCY &&
|
||||
activeRequestWorktreeIdsRef.current.size < WORKSPACE_CLEANUP_GIT_EVIDENCE_CONCURRENCY &&
|
||||
queueRef.current.length > 0
|
||||
) {
|
||||
const worktreeId = queueRef.current.shift()
|
||||
if (worktreeId === undefined) {
|
||||
const queueIndex = queueRef.current.findIndex(
|
||||
(worktreeId) => !activeRequestWorktreeIdsRef.current.has(worktreeId)
|
||||
)
|
||||
if (queueIndex < 0) {
|
||||
break
|
||||
}
|
||||
const [worktreeId] = queueRef.current.splice(queueIndex, 1)
|
||||
queuedRef.current.delete(worktreeId)
|
||||
inFlightRef.current.add(worktreeId)
|
||||
activeRequestWorktreeIdsRef.current.add(worktreeId)
|
||||
attemptedRef.current.add(worktreeId)
|
||||
void scanWorkspaceCleanup({ worktreeId })
|
||||
.then((result) => {
|
||||
@@ -94,11 +100,10 @@ export function useWorkspaceCleanupGitEvidence({
|
||||
// attemptedRef keeps it from retrying in a loop.
|
||||
})
|
||||
.finally(() => {
|
||||
if (generation !== generationRef.current) {
|
||||
return
|
||||
activeRequestWorktreeIdsRef.current.delete(worktreeId)
|
||||
if (generation === generationRef.current) {
|
||||
inFlightRef.current.delete(worktreeId)
|
||||
}
|
||||
inFlightRef.current.delete(worktreeId)
|
||||
publish()
|
||||
pump()
|
||||
})
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user