@indigoai-us/hq-cloud 6.18.41-alpha.1 → 6.18.41-alpha.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/bin/sync-runner-watch-loop.d.ts +16 -1
- package/dist/bin/sync-runner-watch-loop.d.ts.map +1 -1
- package/dist/bin/sync-runner-watch-loop.js +49 -15
- package/dist/bin/sync-runner-watch-loop.js.map +1 -1
- package/dist/bin/sync-runner.test.js +124 -1
- package/dist/bin/sync-runner.test.js.map +1 -1
- package/package.json +1 -1
|
@@ -3,7 +3,7 @@ import { readJournal } from "../journal.js";
|
|
|
3
3
|
import { type FeatureSwitch } from "../sync/feature-flags.js";
|
|
4
4
|
import { HeapCensus } from "./sync-runner-heap-telemetry.js";
|
|
5
5
|
import { FullPassCapController } from "../sync/full-pass-caps.js";
|
|
6
|
-
import { type RealtimeTelemetryReason } from "../sync/realtime-telemetry.js";
|
|
6
|
+
import { type RealtimeBlocker, type RealtimeTelemetryReason } from "../sync/realtime-telemetry.js";
|
|
7
7
|
import { type PathWorkOutcome } from "../sync/sync-work.js";
|
|
8
8
|
import type { TelemetryClaims } from "../telemetry-events.js";
|
|
9
9
|
import type { JournalEntry } from "../types.js";
|
|
@@ -94,6 +94,12 @@ export type SchedulerBlocker = {
|
|
|
94
94
|
* pre-existing scoped fast-over-slow exception, but never while a chore owns
|
|
95
95
|
* durable state.
|
|
96
96
|
*/
|
|
97
|
+
/**
|
|
98
|
+
* Maps what holds a realtime op to its closed telemetry label. A chore kind
|
|
99
|
+
* outside the label set becomes `chore:unscoped`, so a new kind can never
|
|
100
|
+
* make the timing record fail its low-cardinality check.
|
|
101
|
+
*/
|
|
102
|
+
export declare function realtimeBlockerLabel(blocker: SchedulerBlocker): RealtimeBlocker;
|
|
97
103
|
export declare class CooperativePassScheduler<T> {
|
|
98
104
|
private readonly now;
|
|
99
105
|
private readonly starvationCapMs;
|
|
@@ -103,6 +109,8 @@ export declare class CooperativePassScheduler<T> {
|
|
|
103
109
|
/** Realtime executes started by the current hand-off. Not the chore slot. */
|
|
104
110
|
private readonly realtimeOccupants;
|
|
105
111
|
private handoffBacklog;
|
|
112
|
+
/** The chore suspended at checkpoint() while it lends the slot. Diagnostics only. */
|
|
113
|
+
private handoffOwner;
|
|
106
114
|
private handoffDeferredAt;
|
|
107
115
|
private handoffAdmitted;
|
|
108
116
|
private occupantEpoch;
|
|
@@ -135,6 +143,13 @@ export declare class CooperativePassScheduler<T> {
|
|
|
135
143
|
submit(task: (context: GuardedPassContext) => Promise<T>, workClass: GuardedWorkClass, lane?: "fast" | "slow", allowFastRealtimeOvertake?: boolean, signal?: AbortSignal, resourceCap?: boolean, allowConcurrentHandoff?: boolean, transferDirection?: "push" | "pull", transferSizeClass?: "small" | "large" | "unknown",
|
|
136
144
|
/** Diagnostics only: called once if this task queues, naming what holds the scheduler. */
|
|
137
145
|
onQueued?: (blocker: SchedulerBlocker) => void, choreKind?: string): Promise<T>;
|
|
146
|
+
/**
|
|
147
|
+
* Diagnostics only: the work holding a task that cannot start. The occupant
|
|
148
|
+
* of the task's own lane comes first, then the slot owner, then a hand-off
|
|
149
|
+
* occupant that is what refuses admission, then the chore lending the slot.
|
|
150
|
+
*/
|
|
151
|
+
private blockerFor;
|
|
152
|
+
private blockingOccupant;
|
|
138
153
|
stop(): void;
|
|
139
154
|
private abortedError;
|
|
140
155
|
/** Realtime stays ahead of a queued full chore so retries are not buried. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sync-runner-watch-loop.d.ts","sourceRoot":"","sources":["../../src/bin/sync-runner-watch-loop.ts"],"names":[],"mappings":"AAoCA,OAAO,EAML,KAAK,UAAU,EAEf,KAAK,eAAe,EACrB,MAAM,eAAe,CAAC;AAEvB,OAAO,EAUL,WAAW,EAYZ,MAAM,eAAe,CAAC;AAevB,OAAO,EAIL,KAAK,aAAa,EACnB,MAAM,0BAA0B,CAAC;AASlC,OAAO,EACL,UAAU,EA0CX,MAAM,iCAAiC,CAAC;AAKzC,OAAO,EAEL,qBAAqB,EAEtB,MAAM,2BAA2B,CAAC;AAOnC,OAAO,
|
|
1
|
+
{"version":3,"file":"sync-runner-watch-loop.d.ts","sourceRoot":"","sources":["../../src/bin/sync-runner-watch-loop.ts"],"names":[],"mappings":"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"}
|
|
@@ -185,6 +185,17 @@ export function allowConcurrentHandoffForGuardedWork(workClass, explicitlyAllowe
|
|
|
185
185
|
* pre-existing scoped fast-over-slow exception, but never while a chore owns
|
|
186
186
|
* durable state.
|
|
187
187
|
*/
|
|
188
|
+
/**
|
|
189
|
+
* Maps what holds a realtime op to its closed telemetry label. A chore kind
|
|
190
|
+
* outside the label set becomes `chore:unscoped`, so a new kind can never
|
|
191
|
+
* make the timing record fail its low-cardinality check.
|
|
192
|
+
*/
|
|
193
|
+
export function realtimeBlockerLabel(blocker) {
|
|
194
|
+
if (blocker.workClass === "realtime")
|
|
195
|
+
return `realtime:${blocker.lane}`;
|
|
196
|
+
const label = `chore:${blocker.choreKind ?? "unscoped"}`;
|
|
197
|
+
return REALTIME_BLOCKERS.includes(label) ? label : "chore:unscoped";
|
|
198
|
+
}
|
|
188
199
|
export class CooperativePassScheduler {
|
|
189
200
|
now;
|
|
190
201
|
starvationCapMs;
|
|
@@ -194,6 +205,8 @@ export class CooperativePassScheduler {
|
|
|
194
205
|
/** Realtime executes started by the current hand-off. Not the chore slot. */
|
|
195
206
|
realtimeOccupants = new Set();
|
|
196
207
|
handoffBacklog = null;
|
|
208
|
+
/** The chore suspended at checkpoint() while it lends the slot. Diagnostics only. */
|
|
209
|
+
handoffOwner = null;
|
|
197
210
|
handoffDeferredAt = null;
|
|
198
211
|
handoffAdmitted = false;
|
|
199
212
|
occupantEpoch = 0;
|
|
@@ -321,9 +334,7 @@ export class CooperativePassScheduler {
|
|
|
321
334
|
this.withinHandoffAdmission()) {
|
|
322
335
|
entry.occupancyArrival = true;
|
|
323
336
|
}
|
|
324
|
-
|
|
325
|
-
const holder = (lane === "fast" ? this.activeFastRealtime : null) ??
|
|
326
|
-
this.active ?? this.detachedChore ?? this.activeFastRealtime ?? this.pending[0];
|
|
337
|
+
const holder = this.blockerFor(entry);
|
|
327
338
|
this.enqueuePending(entry);
|
|
328
339
|
this.drain();
|
|
329
340
|
if (onQueued && holder && this.pending.includes(entry)) {
|
|
@@ -340,6 +351,32 @@ export class CooperativePassScheduler {
|
|
|
340
351
|
}
|
|
341
352
|
});
|
|
342
353
|
}
|
|
354
|
+
/**
|
|
355
|
+
* Diagnostics only: the work holding a task that cannot start. The occupant
|
|
356
|
+
* of the task's own lane comes first, then the slot owner, then a hand-off
|
|
357
|
+
* occupant that is what refuses admission, then the chore lending the slot.
|
|
358
|
+
*/
|
|
359
|
+
blockerFor(entry) {
|
|
360
|
+
const ownLane = entry.lane === "fast" ? this.activeFastRealtime : null;
|
|
361
|
+
return ownLane ??
|
|
362
|
+
this.active ??
|
|
363
|
+
this.blockingOccupant(entry) ??
|
|
364
|
+
this.detachedChore ??
|
|
365
|
+
this.handoffOwner ??
|
|
366
|
+
this.activeFastRealtime ??
|
|
367
|
+
this.pending.find((pending) => pending !== entry);
|
|
368
|
+
}
|
|
369
|
+
blockingOccupant(entry) {
|
|
370
|
+
if (entry.workClass !== "realtime" || !this._handoffActive)
|
|
371
|
+
return null;
|
|
372
|
+
const occupants = [...this.realtimeOccupants];
|
|
373
|
+
const sameDirection = entry.transferDirection === undefined
|
|
374
|
+
? undefined
|
|
375
|
+
: occupants.find((occupant) => occupant.transferDirection === entry.transferDirection);
|
|
376
|
+
if (sameDirection)
|
|
377
|
+
return sameDirection;
|
|
378
|
+
return occupants.length >= REALTIME_WORKER_OCCUPANCY_CAP ? occupants[0] ?? null : null;
|
|
379
|
+
}
|
|
343
380
|
stop() {
|
|
344
381
|
this.stopped = true;
|
|
345
382
|
this.active?.controller.abort();
|
|
@@ -820,6 +857,7 @@ export class CooperativePassScheduler {
|
|
|
820
857
|
// flight starts on the free occupancy slot (see REALTIME_WORKER_OCCUPANCY_CAP).
|
|
821
858
|
this.active = null;
|
|
822
859
|
this._handoffActive = true;
|
|
860
|
+
this.handoffOwner = entry;
|
|
823
861
|
this.handoffDeferredAt = this.now();
|
|
824
862
|
this.handoffAdmitted = false;
|
|
825
863
|
this.handoffBacklog = null;
|
|
@@ -849,6 +887,7 @@ export class CooperativePassScheduler {
|
|
|
849
887
|
}
|
|
850
888
|
finally {
|
|
851
889
|
this._handoffActive = false;
|
|
890
|
+
this.handoffOwner = null;
|
|
852
891
|
this.handoffDeferredAt = null;
|
|
853
892
|
this.handoffBacklog = null;
|
|
854
893
|
if (!this.stopped)
|
|
@@ -1679,12 +1718,9 @@ export async function runWatchLoop(argv, parsed, deps, runtime) {
|
|
|
1679
1718
|
// Each coordinator chore runs inside this context so the scheduler entry it
|
|
1680
1719
|
// submits carries its kind; blocker telemetry reads it from the holding entry.
|
|
1681
1720
|
const coordinatorChoreKind = new AsyncLocalStorage();
|
|
1682
|
-
const
|
|
1683
|
-
|
|
1684
|
-
|
|
1685
|
-
const label = `chore:${blocker.choreKind ?? "unscoped"}`;
|
|
1686
|
-
return REALTIME_BLOCKERS.includes(label) ? label : "chore:unscoped";
|
|
1687
|
-
};
|
|
1721
|
+
const operationGateBlockerRecorder = (telemetry) => telemetry
|
|
1722
|
+
? (blocker) => telemetry.recordOperationGateBlocker(realtimeBlockerLabel(blocker))
|
|
1723
|
+
: undefined;
|
|
1688
1724
|
const coordinatorTelemetry = new WeakMap();
|
|
1689
1725
|
let operationLockUsers = 0;
|
|
1690
1726
|
let resolveNoOperationLockUsers = null;
|
|
@@ -2043,9 +2079,7 @@ export async function runWatchLoop(argv, parsed, deps, runtime) {
|
|
|
2043
2079
|
telemetry?.mark("appendLock");
|
|
2044
2080
|
telemetry?.setOccupancy(passScheduler.activeRealtimeWorkerCount);
|
|
2045
2081
|
return runPassWithLock(passArgvForRun, prepare, lane, workClass, workClass === "chore" ? context.checkpoint : undefined, telemetry, context.signal, receiverSignal);
|
|
2046
|
-
}, lane, workClass, allowFastRealtimeOvertake, admissionSignal, resourceCap, allowConcurrentHandoff, telemetry?.direction, telemetry?.sizeClass, telemetry
|
|
2047
|
-
? (blocker) => telemetry.recordOperationGateBlocker(schedulerBlockerLabel(blocker))
|
|
2048
|
-
: undefined);
|
|
2082
|
+
}, lane, workClass, allowFastRealtimeOvertake, admissionSignal, resourceCap, allowConcurrentHandoff, telemetry?.direction, telemetry?.sizeClass, operationGateBlockerRecorder(telemetry));
|
|
2049
2083
|
};
|
|
2050
2084
|
/*
|
|
2051
2085
|
* Area storage and the parallel coordinator default to AUTO. AUTO turns
|
|
@@ -2108,7 +2142,7 @@ export async function runWatchLoop(argv, parsed, deps, runtime) {
|
|
|
2108
2142
|
onRealtimeAdmissionBlocked: (queued, heldBy) => {
|
|
2109
2143
|
coordinatorTelemetry.get(queued)?.recordAdmissionBlocker(heldBy.class === "realtime"
|
|
2110
2144
|
? `realtime:${heldBy.lane === "fast" ? "fast" : "slow"}`
|
|
2111
|
-
:
|
|
2145
|
+
: realtimeBlockerLabel({ workClass: "chore", lane: "slow", choreKind: heldBy.kind }));
|
|
2112
2146
|
},
|
|
2113
2147
|
});
|
|
2114
2148
|
let coordinator = parallelCoordinatorEnabled ? createCoordinator() : null;
|
|
@@ -4179,10 +4213,10 @@ export async function runWatchLoop(argv, parsed, deps, runtime) {
|
|
|
4179
4213
|
let outcome;
|
|
4180
4214
|
try {
|
|
4181
4215
|
if (parallelCoordinatorEnabled) {
|
|
4182
|
-
const execution = await runRealtimePass("wake", "pull", [], "slow", async (_slice,
|
|
4216
|
+
const execution = await runRealtimePass("wake", "pull", [], "slow", async (_slice, telemetry, coordinatorFenced) => runGuardedTask(() => runTaskWithLock(async () => {
|
|
4183
4217
|
await drain();
|
|
4184
4218
|
return 0;
|
|
4185
|
-
}, "realtime"), "slow", "realtime", false, undefined, false, coordinatorFenced));
|
|
4219
|
+
}, "realtime"), "slow", "realtime", false, undefined, false, coordinatorFenced, undefined, "unknown", operationGateBlockerRecorder(telemetry)));
|
|
4186
4220
|
outcome = execution.accepted ? execution.result : 1;
|
|
4187
4221
|
}
|
|
4188
4222
|
else {
|