@volter/browser-runtime 0.1.84 → 0.1.85
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/browser-image-layers.d.ts +11 -2
- package/dist/browser-image-layers.d.ts.map +1 -1
- package/dist/browser-image-layers.js +11 -3
- package/dist/browser-image-layers.js.map +1 -1
- package/dist/browser-image-range-worker.js +441 -69
- package/dist/browser-image-range-worker.js.map +1 -1
- package/dist/browser-image-ranges.d.ts +58 -2
- package/dist/browser-image-ranges.d.ts.map +1 -1
- package/dist/browser-image-ranges.js +271 -13
- package/dist/browser-image-ranges.js.map +1 -1
- package/dist/browser-pack-store.d.ts +32 -6
- package/dist/browser-pack-store.d.ts.map +1 -1
- package/dist/browser-pack-store.js +74 -22
- package/dist/browser-pack-store.js.map +1 -1
- package/dist/browser-store-layout.d.ts +13 -0
- package/dist/browser-store-layout.d.ts.map +1 -0
- package/dist/browser-store-layout.js +20 -0
- package/dist/browser-store-layout.js.map +1 -0
- package/package.json +1 -1
|
@@ -17,19 +17,75 @@ export interface ImageRanges {
|
|
|
17
17
|
parts: ImageRange[];
|
|
18
18
|
}
|
|
19
19
|
export declare function validateImageRanges(candidate: unknown): ImageRanges;
|
|
20
|
+
/**
|
|
21
|
+
* A reader's line to a materializer already admitted for this exact
|
|
22
|
+
* generation and range table: its reads go there, settled in `state`, instead
|
|
23
|
+
* of to a worker of its own that must start first (ADR-0080).
|
|
24
|
+
*/
|
|
25
|
+
export interface ImageRangeClient {
|
|
26
|
+
port: MessagePort;
|
|
27
|
+
state: SharedArrayBuffer;
|
|
28
|
+
}
|
|
20
29
|
/** A dedicated trusted worker can fetch while its Node caller is blocked in a synchronous read. */
|
|
21
30
|
export declare class ImageRangeReader {
|
|
22
31
|
private readonly ranges;
|
|
23
32
|
private readonly directory;
|
|
24
33
|
private readonly identity;
|
|
34
|
+
readonly receiptKey?: string | undefined;
|
|
35
|
+
private readonly client?;
|
|
25
36
|
private worker;
|
|
37
|
+
private port;
|
|
38
|
+
private prefetchers;
|
|
26
39
|
private readonly state;
|
|
27
40
|
private readonly completed;
|
|
41
|
+
/**
|
|
42
|
+
* Each range's first read, by any reader sharing this completion, as a
|
|
43
|
+
* sequence number (0: not read yet), and the sequence's counter last
|
|
44
|
+
* (ADR-0078): the order a boot needed its ranges, not the order they arrived.
|
|
45
|
+
*/
|
|
46
|
+
private readonly firstRead;
|
|
28
47
|
private closed;
|
|
29
|
-
|
|
48
|
+
private ready;
|
|
49
|
+
private startup;
|
|
50
|
+
private cancelStartup;
|
|
51
|
+
private readonly sharedCompletion;
|
|
52
|
+
private blocked;
|
|
53
|
+
constructor(ranges: ImageRanges, directory: FileSystemDirectoryHandle, identity: string, completed?: SharedArrayBuffer, receiptKey?: string | undefined, client?: ImageRangeClient | undefined);
|
|
30
54
|
get completionBuffer(): SharedArrayBuffer;
|
|
31
|
-
|
|
55
|
+
/** Only carried through the generation/digest-bound trusted reader seed. */
|
|
56
|
+
get verifiedRanges(): ImageRanges;
|
|
57
|
+
/** Nested-worker startup needs parent tasks; finish it before the parent can block. */
|
|
58
|
+
initialize(): Promise<void>;
|
|
59
|
+
private startMaterializer;
|
|
60
|
+
/** The digests of every range this generation holds verified, in image order: what boots of this image have read. */
|
|
61
|
+
/**
|
|
62
|
+
* The ranges readers sharing this completion have read, in the order each
|
|
63
|
+
* was first read; undefined when the completion carries no read order.
|
|
64
|
+
*/
|
|
65
|
+
readDigests(): string[] | undefined;
|
|
66
|
+
completedDigests(): string[];
|
|
67
|
+
/**
|
|
68
|
+
* Fetch the ranges a previous boot of this image read before anything reads
|
|
69
|
+
* them, in the order given, so a first boot's reads find their bytes local. A digest this image
|
|
70
|
+
* does not hold is ignored. Returns how many ranges were queued, and when
|
|
71
|
+
* every helper has finished its share.
|
|
72
|
+
*/
|
|
73
|
+
prefetch(digests: readonly string[], streams?: readonly string[]): {
|
|
74
|
+
queued: number;
|
|
75
|
+
done: Promise<void>;
|
|
76
|
+
};
|
|
77
|
+
/** How many reads this process blocked on a range not yet held, and for how long in all. */
|
|
78
|
+
get blockedReads(): {
|
|
79
|
+
ranges: number;
|
|
80
|
+
ms: number;
|
|
81
|
+
};
|
|
32
82
|
ensure(offset: number, length: number): void;
|
|
83
|
+
/**
|
|
84
|
+
* A line for another realm's reader of this generation to the materializer
|
|
85
|
+
* this reader uses, so that reader starts none of its own. Undefined when
|
|
86
|
+
* this reader holds every range and so runs no materializer.
|
|
87
|
+
*/
|
|
88
|
+
lineForReader(): ImageRangeClient | undefined;
|
|
33
89
|
private fail;
|
|
34
90
|
close(): void;
|
|
35
91
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"browser-image-ranges.d.ts","sourceRoot":"","sources":["../src/browser-image-ranges.ts"],"names":[],"mappings":"AAAA,uFAAuF;AACvF,eAAO,MAAM,uBAAuB,2BAA2B,CAAC;AAChE,eAAO,MAAM,iBAAiB,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"browser-image-ranges.d.ts","sourceRoot":"","sources":["../src/browser-image-ranges.ts"],"names":[],"mappings":"AAAA,uFAAuF;AACvF,eAAO,MAAM,uBAAuB,2BAA2B,CAAC;AAChE,eAAO,MAAM,iBAAiB,sBAAsB,CAAC;AAQrD,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,iFAAiF;IACjF,GAAG,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,CAAC,CAAC;IACX,4GAA4G;IAC5G,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,UAAU,EAAE,CAAC;CACrB;AAED,wBAAgB,mBAAmB,CAAC,SAAS,EAAE,OAAO,GAAG,WAAW,CAiBnE;AAED;;;;GAIG;AACH,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,WAAW,CAAC;IAClB,KAAK,EAAE,iBAAiB,CAAC;CAC1B;AAED,mGAAmG;AACnG,qBAAa,gBAAgB;IAmBf,OAAO,CAAC,QAAQ,CAAC,MAAM;IAAe,OAAO,CAAC,QAAQ,CAAC,SAAS;IAA6B,OAAO,CAAC,QAAQ,CAAC,QAAQ;IAAyC,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM;IAAE,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC;IAlBjO,OAAO,CAAC,MAAM,CAAqB;IACnC,OAAO,CAAC,IAAI,CAA0B;IACtC,OAAO,CAAC,WAAW,CAAgB;IACnC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAgC;IACtD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAgC;IAC1D;;;;OAIG;IACH,OAAO,CAAC,QAAQ,CAAC,SAAS,CAA4C;IACtE,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,OAAO,CAA4B;IAC3C,OAAO,CAAC,aAAa,CAAuC;IAC5D,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAU;IAC3C,OAAO,CAAC,OAAO,CAAwB;gBAEV,MAAM,EAAE,WAAW,EAAmB,SAAS,EAAE,yBAAyB,EAAmB,QAAQ,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,iBAAiB,EAAW,UAAU,CAAC,EAAE,MAAM,YAAA,EAAmB,MAAM,CAAC,EAAE,gBAAgB,YAAA;IAqBnP,IAAI,gBAAgB,IAAI,iBAAiB,CAAkC;IAC3E,4EAA4E;IAC5E,IAAI,cAAc,IAAI,WAAW,CAAwB;IAEzD,uFAAuF;IACjF,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IA4BjC,OAAO,CAAC,iBAAiB;IA6CzB,qHAAqH;IACrH;;;OAGG;IACH,WAAW,IAAI,MAAM,EAAE,GAAG,SAAS;IAanC,gBAAgB,IAAI,MAAM,EAAE;IAS5B;;;;;OAKG;IACH,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,EAAE,OAAO,GAAE,SAAS,MAAM,EAAO,GAAG;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,CAAA;KAAE;IA0C9G,4FAA4F;IAC5F,IAAI,YAAY,IAAI;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAA;KAAE,CAAgC;IAElF,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;IAsC5C;;;;OAIG;IACH,aAAa,IAAI,gBAAgB,GAAG,SAAS;IAS7C,OAAO,CAAC,IAAI;IAMZ,KAAK,IAAI,IAAI;CAed"}
|
|
@@ -1,6 +1,12 @@
|
|
|
1
1
|
/** Immutable image bytes reserved in a package pack and materialized on first read. */
|
|
2
2
|
export const IMAGE_RANGE_WORKER_PATH = "/image-range-worker.js";
|
|
3
3
|
export const IMAGE_RANGES_FILE = "image-ranges.json";
|
|
4
|
+
/**
|
|
5
|
+
* Helper materializers a prefetch spreads over: inflating and verifying a
|
|
6
|
+
* range is a thread's CPU. Two helpers with two fetches each leave the boot's
|
|
7
|
+
* own requests most of the origin's six HTTP/1.1 connections.
|
|
8
|
+
*/
|
|
9
|
+
const PREFETCH_WORKERS = 2;
|
|
4
10
|
export function validateImageRanges(candidate) {
|
|
5
11
|
const value = candidate;
|
|
6
12
|
if (!value || value.version !== 1 || !Number.isSafeInteger(value.bytes) || value.bytes < 0 || !Array.isArray(value.parts)
|
|
@@ -28,36 +34,245 @@ export class ImageRangeReader {
|
|
|
28
34
|
ranges;
|
|
29
35
|
directory;
|
|
30
36
|
identity;
|
|
37
|
+
receiptKey;
|
|
38
|
+
client;
|
|
31
39
|
worker;
|
|
40
|
+
port;
|
|
41
|
+
prefetchers = [];
|
|
32
42
|
state;
|
|
33
43
|
completed;
|
|
44
|
+
/**
|
|
45
|
+
* Each range's first read, by any reader sharing this completion, as a
|
|
46
|
+
* sequence number (0: not read yet), and the sequence's counter last
|
|
47
|
+
* (ADR-0078): the order a boot needed its ranges, not the order they arrived.
|
|
48
|
+
*/
|
|
49
|
+
firstRead;
|
|
34
50
|
closed = false;
|
|
35
|
-
|
|
51
|
+
ready = false;
|
|
52
|
+
startup;
|
|
53
|
+
cancelStartup;
|
|
54
|
+
sharedCompletion;
|
|
55
|
+
blocked = { ranges: 0, ms: 0 };
|
|
56
|
+
constructor(ranges, directory, identity, completed, receiptKey, client) {
|
|
36
57
|
this.ranges = ranges;
|
|
37
58
|
this.directory = directory;
|
|
38
59
|
this.identity = identity;
|
|
60
|
+
this.receiptKey = receiptKey;
|
|
61
|
+
this.client = client;
|
|
39
62
|
if (typeof Worker === "undefined" || typeof SharedArrayBuffer === "undefined") {
|
|
40
63
|
throw new Error("This browser cannot materialize an immutable image during a synchronous read.");
|
|
41
64
|
}
|
|
42
|
-
this.state = new Int32Array(new SharedArrayBuffer(ranges.parts.length * Int32Array.BYTES_PER_ELEMENT));
|
|
43
|
-
|
|
44
|
-
|
|
65
|
+
this.state = new Int32Array(client?.state ?? new SharedArrayBuffer(ranges.parts.length * Int32Array.BYTES_PER_ELEMENT));
|
|
66
|
+
if (this.state.length !== ranges.parts.length)
|
|
67
|
+
throw new Error("The image reader's line has the wrong range count.");
|
|
68
|
+
const count = ranges.parts.length;
|
|
69
|
+
// The completion state, then each range's first-read sequence and the sequence's counter.
|
|
70
|
+
const shared = completed ?? new SharedArrayBuffer((2 * count + 1) * Int32Array.BYTES_PER_ELEMENT);
|
|
71
|
+
if (shared.byteLength !== count * Int32Array.BYTES_PER_ELEMENT && shared.byteLength !== (2 * count + 1) * Int32Array.BYTES_PER_ELEMENT) {
|
|
45
72
|
throw new Error("The image completion seed has the wrong range count.");
|
|
73
|
+
}
|
|
74
|
+
this.completed = new Int32Array(shared, 0, count);
|
|
75
|
+
this.firstRead = shared.byteLength > count * Int32Array.BYTES_PER_ELEMENT ? new Int32Array(shared, count * Int32Array.BYTES_PER_ELEMENT, count + 1) : undefined;
|
|
76
|
+
this.sharedCompletion = completed !== undefined;
|
|
77
|
+
// Seeds retain this verified table; prevent an accidental trusted caller
|
|
78
|
+
// from changing the owner's snapshot after its digest was admitted.
|
|
79
|
+
for (const part of ranges.parts)
|
|
80
|
+
Object.freeze(part);
|
|
81
|
+
Object.freeze(ranges.parts);
|
|
82
|
+
Object.freeze(ranges);
|
|
46
83
|
}
|
|
47
84
|
get completionBuffer() { return this.completed.buffer; }
|
|
48
|
-
|
|
85
|
+
/** Only carried through the generation/digest-bound trusted reader seed. */
|
|
86
|
+
get verifiedRanges() { return this.ranges; }
|
|
87
|
+
/** Nested-worker startup needs parent tasks; finish it before the parent can block. */
|
|
88
|
+
async initialize() {
|
|
49
89
|
if (this.closed)
|
|
50
90
|
throw new Error("This immutable image reader is closed.");
|
|
51
|
-
if (
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
91
|
+
if (this.ready)
|
|
92
|
+
return;
|
|
93
|
+
if (this.startup)
|
|
94
|
+
return this.startup;
|
|
95
|
+
let missing = false;
|
|
96
|
+
for (let index = 0; index < this.completed.length; index += 1) {
|
|
97
|
+
if (Atomics.load(this.completed, index) !== 2) {
|
|
98
|
+
missing = true;
|
|
99
|
+
break;
|
|
100
|
+
}
|
|
55
101
|
}
|
|
56
|
-
|
|
102
|
+
if (!missing) {
|
|
103
|
+
this.ready = true;
|
|
104
|
+
this.client?.port.close();
|
|
105
|
+
return;
|
|
106
|
+
}
|
|
107
|
+
if (this.client) {
|
|
108
|
+
// The materializer serving this line is already running and admitted:
|
|
109
|
+
// nothing starts here, so nothing is waited for (ADR-0080).
|
|
110
|
+
const port = this.port = this.client.port;
|
|
111
|
+
// The owner's generation closing ends its materializer: this reader
|
|
112
|
+
// starts its own while its thread is free, not at a read that waits.
|
|
113
|
+
port.onmessage = (event) => {
|
|
114
|
+
if (event.data?.type !== "closing" || this.port !== port)
|
|
115
|
+
return;
|
|
116
|
+
port.close();
|
|
117
|
+
this.port = undefined;
|
|
118
|
+
if (!this.closed)
|
|
119
|
+
void this.startMaterializer().catch((cause) => console.warn("This process's image reader could not start its own materializer after its line closed.", cause));
|
|
120
|
+
};
|
|
121
|
+
port.start();
|
|
122
|
+
this.ready = true;
|
|
123
|
+
return;
|
|
124
|
+
}
|
|
125
|
+
return this.startMaterializer();
|
|
57
126
|
}
|
|
127
|
+
startMaterializer() {
|
|
128
|
+
const began = Date.now();
|
|
129
|
+
const worker = new Worker(IMAGE_RANGE_WORKER_PATH, { type: "module", name: "immutable-image-materializer" });
|
|
130
|
+
// A reader that read through a line keeps reading through it until its own is admitted.
|
|
131
|
+
const viaLine = this.ready;
|
|
132
|
+
if (!viaLine)
|
|
133
|
+
this.worker = worker;
|
|
134
|
+
worker.addEventListener("error", () => this.fail());
|
|
135
|
+
worker.addEventListener("messageerror", () => this.fail());
|
|
136
|
+
this.startup = new Promise((resolve, reject) => {
|
|
137
|
+
const cleanup = () => {
|
|
138
|
+
clearTimeout(timer);
|
|
139
|
+
worker.removeEventListener("message", acknowledge);
|
|
140
|
+
worker.removeEventListener("error", failed);
|
|
141
|
+
worker.removeEventListener("messageerror", failed);
|
|
142
|
+
this.cancelStartup = undefined;
|
|
143
|
+
};
|
|
144
|
+
const failed = () => cancel(new Error("The immutable image materializer could not initialize; reload to retry."));
|
|
145
|
+
const cancel = (cause) => {
|
|
146
|
+
cleanup();
|
|
147
|
+
worker.terminate();
|
|
148
|
+
if (!viaLine) {
|
|
149
|
+
this.closed = true;
|
|
150
|
+
this.fail();
|
|
151
|
+
}
|
|
152
|
+
reject(cause);
|
|
153
|
+
};
|
|
154
|
+
const acknowledge = (event) => {
|
|
155
|
+
if (event.data?.identity !== this.identity)
|
|
156
|
+
return;
|
|
157
|
+
if (event.data.type === "init-error") {
|
|
158
|
+
cancel(new Error(`The immutable image materializer could not initialize: ${String(event.data.error)}`));
|
|
159
|
+
return;
|
|
160
|
+
}
|
|
161
|
+
if (event.data.type !== "ready")
|
|
162
|
+
return;
|
|
163
|
+
console.log(`[boot-trace] ${JSON.stringify({ event: "materializer-ready", at: Date.now(), ms: Date.now() - began })}`);
|
|
164
|
+
cleanup();
|
|
165
|
+
this.ready = true;
|
|
166
|
+
this.worker = worker;
|
|
167
|
+
resolve();
|
|
168
|
+
};
|
|
169
|
+
const timer = setTimeout(() => cancel(new Error("The immutable image materializer did not initialize within 10 seconds; reload to retry.")), 10_000);
|
|
170
|
+
this.cancelStartup = cancel;
|
|
171
|
+
worker.addEventListener("message", acknowledge);
|
|
172
|
+
worker.addEventListener("error", failed);
|
|
173
|
+
worker.addEventListener("messageerror", failed);
|
|
174
|
+
try {
|
|
175
|
+
worker.postMessage({ type: "init", ranges: this.ranges, directory: this.directory, identity: this.identity, state: this.state.buffer, completed: this.completed.buffer,
|
|
176
|
+
sharedCompletion: this.sharedCompletion, ...(this.receiptKey ? { receiptKey: this.receiptKey } : {}) });
|
|
177
|
+
}
|
|
178
|
+
catch (cause) {
|
|
179
|
+
cancel(cause instanceof Error ? cause : new Error(String(cause)));
|
|
180
|
+
}
|
|
181
|
+
});
|
|
182
|
+
return this.startup;
|
|
183
|
+
}
|
|
184
|
+
/** The digests of every range this generation holds verified, in image order: what boots of this image have read. */
|
|
185
|
+
/**
|
|
186
|
+
* The ranges readers sharing this completion have read, in the order each
|
|
187
|
+
* was first read; undefined when the completion carries no read order.
|
|
188
|
+
*/
|
|
189
|
+
readDigests() {
|
|
190
|
+
const order = this.firstRead;
|
|
191
|
+
if (!order)
|
|
192
|
+
return undefined;
|
|
193
|
+
const count = this.ranges.parts.length;
|
|
194
|
+
const read = [];
|
|
195
|
+
for (let index = 0; index < count; index += 1) {
|
|
196
|
+
const sequence = Atomics.load(order, index);
|
|
197
|
+
const part = this.ranges.parts[index];
|
|
198
|
+
if (sequence > 0 && part.raw > 0)
|
|
199
|
+
read.push([sequence, part.sha256]);
|
|
200
|
+
}
|
|
201
|
+
return read.sort((left, right) => left[0] - right[0]).map(([, digest]) => digest);
|
|
202
|
+
}
|
|
203
|
+
completedDigests() {
|
|
204
|
+
const held = [];
|
|
205
|
+
for (let index = 0; index < this.completed.length; index += 1) {
|
|
206
|
+
const part = this.ranges.parts[index];
|
|
207
|
+
if (part.raw > 0 && Atomics.load(this.completed, index) === 2)
|
|
208
|
+
held.push(part.sha256);
|
|
209
|
+
}
|
|
210
|
+
return held;
|
|
211
|
+
}
|
|
212
|
+
/**
|
|
213
|
+
* Fetch the ranges a previous boot of this image read before anything reads
|
|
214
|
+
* them, in the order given, so a first boot's reads find their bytes local. A digest this image
|
|
215
|
+
* does not hold is ignored. Returns how many ranges were queued, and when
|
|
216
|
+
* every helper has finished its share.
|
|
217
|
+
*/
|
|
218
|
+
prefetch(digests, streams = []) {
|
|
219
|
+
if (this.closed || !this.ready || !this.worker)
|
|
220
|
+
return { queued: 0, done: Promise.resolve() };
|
|
221
|
+
// In the recorded order, which is the order a boot first read them.
|
|
222
|
+
const byDigest = new Map();
|
|
223
|
+
for (let index = 0; index < this.ranges.parts.length; index += 1) {
|
|
224
|
+
const part = this.ranges.parts[index];
|
|
225
|
+
if (part.raw === 0)
|
|
226
|
+
continue;
|
|
227
|
+
const held = byDigest.get(part.sha256);
|
|
228
|
+
if (held)
|
|
229
|
+
held.push(index);
|
|
230
|
+
else
|
|
231
|
+
byDigest.set(part.sha256, [index]);
|
|
232
|
+
}
|
|
233
|
+
const indices = [];
|
|
234
|
+
for (const digest of new Set(digests)) {
|
|
235
|
+
for (const index of byDigest.get(digest) ?? [])
|
|
236
|
+
if (Atomics.load(this.completed, index) !== 2)
|
|
237
|
+
indices.push(index);
|
|
238
|
+
}
|
|
239
|
+
// Each helper takes every Nth range, so each holds a share of that order;
|
|
240
|
+
// it shares this reader's completion and receipt ledger, and the
|
|
241
|
+
// part lock keeps it and any demanded read from fetching one range twice.
|
|
242
|
+
// With the image's streams, each helper reads one stream of those ranges
|
|
243
|
+
// instead of fetching its share one range at a time (ADR-0082).
|
|
244
|
+
const helpers = streams.length > 0 && indices.length > 0 ? Math.min(streams.length, 8) : Math.min(PREFETCH_WORKERS, Math.ceil(indices.length / 32));
|
|
245
|
+
const finished = [];
|
|
246
|
+
for (let lane = 0; lane < helpers; lane += 1) {
|
|
247
|
+
const share = indices.filter((_, at) => at % helpers === lane);
|
|
248
|
+
const helper = new Worker(IMAGE_RANGE_WORKER_PATH, { type: "module", name: "immutable-image-prefetch" });
|
|
249
|
+
this.prefetchers.push(helper);
|
|
250
|
+
let ended;
|
|
251
|
+
finished.push(new Promise((resolve) => { ended = resolve; }));
|
|
252
|
+
const retire = () => { helper.terminate(); this.prefetchers = this.prefetchers.filter((held) => held !== helper); ended(); };
|
|
253
|
+
helper.addEventListener("error", retire);
|
|
254
|
+
helper.addEventListener("messageerror", retire);
|
|
255
|
+
helper.addEventListener("message", (event) => {
|
|
256
|
+
if (event.data?.identity !== this.identity)
|
|
257
|
+
return;
|
|
258
|
+
if (event.data.type === "ready")
|
|
259
|
+
helper.postMessage(streams.length > 0 ? { type: "prefetch-stream", url: streams[lane] } : { type: "prefetch", indices: share });
|
|
260
|
+
else if (event.data.type === "prefetched" || event.data.type === "init-error")
|
|
261
|
+
retire();
|
|
262
|
+
});
|
|
263
|
+
helper.postMessage({ type: "init", ranges: this.ranges, directory: this.directory, identity: this.identity,
|
|
264
|
+
state: new SharedArrayBuffer(this.state.byteLength), completed: this.completed.buffer, sharedCompletion: true,
|
|
265
|
+
...(this.receiptKey ? { receiptKey: this.receiptKey } : {}) });
|
|
266
|
+
}
|
|
267
|
+
return { queued: indices.length, done: Promise.all(finished).then(() => undefined) };
|
|
268
|
+
}
|
|
269
|
+
/** How many reads this process blocked on a range not yet held, and for how long in all. */
|
|
270
|
+
get blockedReads() { return { ...this.blocked }; }
|
|
58
271
|
ensure(offset, length) {
|
|
59
272
|
if (this.closed)
|
|
60
273
|
throw new Error("This immutable image reader is closed.");
|
|
274
|
+
if (!this.ready)
|
|
275
|
+
throw new Error("This immutable image reader has not finished asynchronous initialization.");
|
|
61
276
|
if (length === 0 || offset >= this.ranges.bytes)
|
|
62
277
|
return;
|
|
63
278
|
const end = Math.min(offset + length, this.ranges.bytes);
|
|
@@ -75,10 +290,17 @@ export class ImageRangeReader {
|
|
|
75
290
|
const part = this.ranges.parts[index];
|
|
76
291
|
if (part.offset >= end)
|
|
77
292
|
break;
|
|
293
|
+
const order = this.firstRead;
|
|
294
|
+
if (order && Atomics.load(order, index) === 0)
|
|
295
|
+
Atomics.compareExchange(order, index, 0, Atomics.add(order, this.ranges.parts.length, 1) + 1);
|
|
78
296
|
if (Atomics.load(this.completed, index) === 2)
|
|
79
297
|
continue;
|
|
80
|
-
this.
|
|
81
|
-
|
|
298
|
+
const materializer = this.worker ?? this.port;
|
|
299
|
+
if (!materializer)
|
|
300
|
+
throw new Error("This immutable image reader's line closed and its own materializer is still starting; retry the read.");
|
|
301
|
+
materializer.postMessage({ type: "read", index });
|
|
302
|
+
const began = performance.now();
|
|
303
|
+
const deadline = began + 30_000;
|
|
82
304
|
while (Atomics.load(this.state, index) === 0) {
|
|
83
305
|
const left = deadline - performance.now();
|
|
84
306
|
if (left <= 0 || Atomics.wait(this.state, index, 0, left) === "timed-out") {
|
|
@@ -86,17 +308,53 @@ export class ImageRangeReader {
|
|
|
86
308
|
throw new Error(`The image's immutable part ${part.url} did not arrive within 30 seconds; reload to retry.`);
|
|
87
309
|
}
|
|
88
310
|
}
|
|
311
|
+
this.blocked.ranges += 1;
|
|
312
|
+
this.blocked.ms += performance.now() - began;
|
|
89
313
|
if (Atomics.load(this.state, index) !== 2) {
|
|
90
314
|
throw new Error(`The image's immutable part ${part.url} could not be verified or stored; see the worker error and reload to retry.`);
|
|
91
315
|
}
|
|
92
316
|
}
|
|
93
317
|
}
|
|
318
|
+
/**
|
|
319
|
+
* A line for another realm's reader of this generation to the materializer
|
|
320
|
+
* this reader uses, so that reader starts none of its own. Undefined when
|
|
321
|
+
* this reader holds every range and so runs no materializer.
|
|
322
|
+
*/
|
|
323
|
+
lineForReader() {
|
|
324
|
+
const materializer = this.worker ?? this.port;
|
|
325
|
+
if (this.closed || !this.ready || !materializer)
|
|
326
|
+
return undefined;
|
|
327
|
+
const channel = new MessageChannel();
|
|
328
|
+
const state = new SharedArrayBuffer(this.ranges.parts.length * Int32Array.BYTES_PER_ELEMENT);
|
|
329
|
+
materializer.postMessage({ type: "client", port: channel.port1, state }, [channel.port1]);
|
|
330
|
+
return { port: channel.port2, state };
|
|
331
|
+
}
|
|
94
332
|
fail() {
|
|
95
333
|
for (let index = 0; index < this.state.length; index += 1) {
|
|
96
334
|
if (Atomics.compareExchange(this.state, index, 0, -1) === 0)
|
|
97
335
|
Atomics.notify(this.state, index);
|
|
98
336
|
}
|
|
99
337
|
}
|
|
100
|
-
close() {
|
|
338
|
+
close() {
|
|
339
|
+
if (this.closed)
|
|
340
|
+
return;
|
|
341
|
+
this.closed = true;
|
|
342
|
+
if (this.cancelStartup) {
|
|
343
|
+
this.cancelStartup(new Error("This immutable image reader closed during initialization."));
|
|
344
|
+
return;
|
|
345
|
+
}
|
|
346
|
+
this.fail();
|
|
347
|
+
this.port?.close();
|
|
348
|
+
// Lines this materializer serves hear it is ending, so their readers
|
|
349
|
+
// start their own rather than waiting on reads it will never answer.
|
|
350
|
+
const worker = this.worker;
|
|
351
|
+
if (worker) {
|
|
352
|
+
worker.postMessage({ type: "closing" });
|
|
353
|
+
setTimeout(() => worker.terminate(), 250);
|
|
354
|
+
}
|
|
355
|
+
for (const helper of this.prefetchers)
|
|
356
|
+
helper.dispatchEvent(new Event("error"));
|
|
357
|
+
this.prefetchers = [];
|
|
358
|
+
}
|
|
101
359
|
}
|
|
102
360
|
//# sourceMappingURL=browser-image-ranges.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"browser-image-ranges.js","sourceRoot":"","sources":["../src/browser-image-ranges.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"browser-image-ranges.js","sourceRoot":"","sources":["../src/browser-image-ranges.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { PACKAGES_STORE } from "./browser-store-layout.js";
|
|
2
|
+
import { type ImageRangeClient, type ImageRanges } from "./browser-image-ranges.js";
|
|
2
3
|
import type { ImageLayerPreparedIndex, ImagePreparedProject } from "./browser-image-layers.js";
|
|
3
4
|
/**
|
|
4
5
|
* The workspace is stored as one packed file plus an index, not as a mirror of
|
|
@@ -81,7 +82,7 @@ export interface IndexEntry {
|
|
|
81
82
|
capacity?: number;
|
|
82
83
|
}
|
|
83
84
|
/** The one shared store of an origin: every package version's files, once, under `/packages/<name>@<version>/`. */
|
|
84
|
-
export
|
|
85
|
+
export { PACKAGES_STORE };
|
|
85
86
|
export declare const PACKAGES_ROOT = "/packages";
|
|
86
87
|
/**
|
|
87
88
|
* A project's live-pack retention roots (W62): links that keep an installed
|
|
@@ -192,6 +193,8 @@ export interface PackStoreOpenOptions {
|
|
|
192
193
|
seed?: PackStoreReaderSeed;
|
|
193
194
|
/** With readOnly: verified image completion from the owner of this exact generation. */
|
|
194
195
|
imageCompletion?: PackStoreImageCompletionSeed;
|
|
196
|
+
/** With `imageCompletion`: a line to the owner's running materializer, used instead of starting one (ADR-0080). */
|
|
197
|
+
imageLine?: ImageRangeClient;
|
|
195
198
|
}
|
|
196
199
|
/** A file of a batch whose bytes are one buffer: its extent of that buffer, or a directory. */
|
|
197
200
|
export interface ExtentFile {
|
|
@@ -207,6 +210,11 @@ export interface PackStoreImageCompletionSeed {
|
|
|
207
210
|
generation: string;
|
|
208
211
|
rangesDigest: string;
|
|
209
212
|
completed: SharedArrayBuffer;
|
|
213
|
+
/** Trusted owner metadata, already verified against rangesDigest in this generation. */
|
|
214
|
+
metadata?: {
|
|
215
|
+
ranges: ImageRanges;
|
|
216
|
+
receiptKey: string;
|
|
217
|
+
};
|
|
210
218
|
}
|
|
211
219
|
/** An owner's index at a moment, for a reader in another realm to start from. */
|
|
212
220
|
export interface PackStoreReaderSeed {
|
|
@@ -280,6 +288,20 @@ export interface PackStore {
|
|
|
280
288
|
overlays?: boolean;
|
|
281
289
|
}): PackStoreReaderSeed | undefined;
|
|
282
290
|
imageCompletionSeed(): PackStoreImageCompletionSeed | undefined;
|
|
291
|
+
/** A line to this generation's running image materializer for another realm's reader (ADR-0080). */
|
|
292
|
+
imageLine(): ImageRangeClient | undefined;
|
|
293
|
+
/** The digests of the immutable image ranges this generation holds verified: what boots of the image have read. */
|
|
294
|
+
imageStartupSet(): string[];
|
|
295
|
+
/** Fetch these image ranges ahead of their first read; returns how many were queued and when they are all done. */
|
|
296
|
+
prefetchImage(digests: readonly string[], streams?: readonly string[]): {
|
|
297
|
+
queued: number;
|
|
298
|
+
done: Promise<void>;
|
|
299
|
+
};
|
|
300
|
+
/** How many reads blocked on an image range not yet held, here and in the packages store this one links, and for how long in all. */
|
|
301
|
+
imageBlockedReads(): {
|
|
302
|
+
ranges: number;
|
|
303
|
+
ms: number;
|
|
304
|
+
};
|
|
283
305
|
/** For a reader: whether it started from the seed it was given rather than reading the index itself. */
|
|
284
306
|
seeded(): boolean;
|
|
285
307
|
readonly logBytes: number;
|
|
@@ -287,9 +309,14 @@ export interface PackStore {
|
|
|
287
309
|
/** Defer automatic maintenance through a finite bulk operation; journal writes and explicit checkpoints stay live. */
|
|
288
310
|
deferMaintenance<T>(operation: () => Promise<T>): Promise<T>;
|
|
289
311
|
/** Install host-prepared metadata and reserved immutable extents only into an empty shared store. */
|
|
290
|
-
|
|
312
|
+
/** `verified`: each file's SHA-256 was already checked against the descriptor's digest where it was inflated (ADR-0084). */
|
|
313
|
+
installPreparedImage(prepared: ImageLayerPreparedIndex, json: Uint8Array, binary: Uint8Array, ranges: ImageRanges, verified?: boolean): Promise<boolean>;
|
|
291
314
|
/** A fresh project's paths already linked to the verified shared image. Never replaces an existing workspace. */
|
|
292
|
-
|
|
315
|
+
/**
|
|
316
|
+
* `imageInstalled`, when given, is the shared store's install of the same image, still running: the project's
|
|
317
|
+
* files are written beside it and committed only once it has installed (ADR-0085).
|
|
318
|
+
*/
|
|
319
|
+
installPreparedProject(prepared: ImagePreparedProject, json: Uint8Array, binary: Uint8Array, verified?: boolean, imageInstalled?: Promise<boolean>): Promise<boolean>;
|
|
293
320
|
/** Installed deferred image, including recovery before its optional journal marker was written. */
|
|
294
321
|
readonly deferredImage: string | undefined;
|
|
295
322
|
/** Placement time of metadata-reserved units, whose immutable host index retains build-time mtimes. */
|
|
@@ -334,7 +361,7 @@ export declare function createPackStore(environment: PackStoreEnvironment, optio
|
|
|
334
361
|
* the origin's packages it links, both open for reading beside their
|
|
335
362
|
* owners. Undefined when the project has no store yet.
|
|
336
363
|
*/
|
|
337
|
-
export declare function openPackReader(environment: PackStoreEnvironment, projectId: string, seed?: PackStoreReaderSeed): Promise<PackStore | undefined>;
|
|
364
|
+
export declare function openPackReader(environment: PackStoreEnvironment, projectId: string, seed?: PackStoreReaderSeed, imageLine?: ImageRangeClient): Promise<PackStore | undefined>;
|
|
338
365
|
/** What a sweep of the shared store found and did. */
|
|
339
366
|
export interface PackagesSweepReport {
|
|
340
367
|
projects: number;
|
|
@@ -353,5 +380,4 @@ export interface PackagesSweepReport {
|
|
|
353
380
|
* no shared store yet.
|
|
354
381
|
*/
|
|
355
382
|
export declare function sweepSharedPackages(environment: PackStoreEnvironment, progress?: (work: string) => void): Promise<PackagesSweepReport | undefined>;
|
|
356
|
-
export {};
|
|
357
383
|
//# sourceMappingURL=browser-pack-store.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"browser-pack-store.d.ts","sourceRoot":"","sources":["../src/browser-pack-store.ts"],"names":[],"mappings":"AACA,OAAO,EAA4D,KAAK,WAAW,EAAE,MAAM,2BAA2B,CAAC;
|
|
1
|
+
{"version":3,"file":"browser-pack-store.d.ts","sourceRoot":"","sources":["../src/browser-pack-store.ts"],"names":[],"mappings":"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"}
|