@serve.zone/interfaces 32.45.0 → 32.47.0
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/changelog.md +44 -0
- package/dist_ts/00_commitinfo_data.js +1 -1
- package/dist_ts/data/clusteringress.d.ts +37 -0
- package/dist_ts/data/clusteringress.js +43 -1
- package/dist_ts/data/runtimeassignmentlogs.d.ts +136 -0
- package/dist_ts/data/runtimeassignmentlogs.js +168 -3
- package/dist_ts/data/serviceruntime.d.ts +10 -1
- package/dist_ts/data/serviceruntime.js +2 -1
- package/dist_ts/private/networkcontract.d.ts +8 -2
- package/dist_ts/private/networkcontract.js +12 -6
- package/dist_ts/requests/service.d.ts +37 -0
- package/package.json +1 -1
- package/readme.md +85 -2
- package/ts/00_commitinfo_data.ts +1 -1
- package/ts/data/clusteringress.ts +70 -0
- package/ts/data/runtimeassignmentlogs.ts +307 -2
- package/ts/data/serviceruntime.ts +10 -0
- package/ts/private/networkcontract.ts +14 -5
- package/ts/requests/service.ts +50 -0
package/changelog.md
CHANGED
|
@@ -1,5 +1,49 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 2026-10-05 - 32.47.0
|
|
4
|
+
|
|
5
|
+
### Features
|
|
6
|
+
|
|
7
|
+
- Operators can read the workload logs a controller keeps. `requests.service.getServiceRuntimeLogAttempts
|
|
8
|
+
{ identity, serviceId, cursor, limit }` pages a service's attempts, newest issued first, as
|
|
9
|
+
`IRuntimeAssignmentLogAttemptView`s (identity, `issuedAt`, `lastAcceptedAt`, capture counts,
|
|
10
|
+
`keptBytes`, `truncatedBatches`, and `expiresAt`: the latest of issue, last accepted batch and
|
|
11
|
+
release plus `logs.retentionMs`, null while the slot still holds the attempt), replaced and
|
|
12
|
+
released attempts included until their logs expire. `requests.service.getRuntimeAssignmentLogs { identity, serviceId, assignmentId, cursor,
|
|
13
|
+
limit }` pages one attempt's `TRuntimeAssignmentLogRecord`s in delivery order: `batch` as the node
|
|
14
|
+
sent it, `gap` for numbers whose batches the controller did not receive or no longer holds (its own
|
|
15
|
+
loss), and `truncated` for batches the controller dropped (`batch-cap`, `byte-cap` or `retention`,
|
|
16
|
+
in that canonical order) with exact counts.
|
|
17
|
+
`runtimeAssignmentLogReadContract` bounds a read: 256 attempts or records, 4 096 entries and 2 MiB
|
|
18
|
+
of canonical JSON per page, one batch always fitting. `snapshotRuntimeAssignmentLogAttemptView`,
|
|
19
|
+
`snapshotRuntimeAssignmentLogAttemptPage` and `snapshotRuntimeAssignmentLogPage` read the answers
|
|
20
|
+
exactly, the last enforcing delivery order; `bindRuntimeAssignmentLogAttemptPage` and
|
|
21
|
+
`bindRuntimeAssignmentLogPage` match an answer to its read. Refusals travel as
|
|
22
|
+
`IRuntimeAssignmentLogReadErrorData` (`attempt-not-found`, `cursor-invalid`, `limit-invalid`).
|
|
23
|
+
Lab RUN 7b: a failed CoreTraffic run's output was lost because no controller kept workload logs.
|
|
24
|
+
|
|
25
|
+
### Maintenance
|
|
26
|
+
|
|
27
|
+
- Release tooling: pnpm 12.7.0 → 12.8.0.
|
|
28
|
+
|
|
29
|
+
## 2026-10-05 - 32.46.0
|
|
30
|
+
|
|
31
|
+
### Features
|
|
32
|
+
|
|
33
|
+
- `composeClusterIngressEnvironment(serviceEnvironment, { relayOrigin, nodeId })` composes the
|
|
34
|
+
environment of one replica of a cluster's designated ingress service: the service's own values
|
|
35
|
+
with `SERVEZONE_CLUSTER_RELAY_ORIGIN` (the cluster's exact `IClusterRelay.origin`) and
|
|
36
|
+
`SERVEZONE_CLUSTER_NODE_ID` (the node the replica's assignment runs on) added. The bearer is not
|
|
37
|
+
added; it stays a secret delivered by the secret manifest. It answers a
|
|
38
|
+
`TClusterIngressEnvironmentComposition`: `composed`, or `refused` with a
|
|
39
|
+
`TClusterIngressEnvironmentRefusal` and a message. A node id that is not a node id is thrown.
|
|
40
|
+
Lab RUN 7b-2: CoreTraffic 33.1.0 refused to start because Cloudly delivered only the bearer.
|
|
41
|
+
- `TServiceRuntimeRefusal` gains `cluster-relay-missing` (the designated ingress's cluster states
|
|
42
|
+
no valid relay; an administrator enables it with `enableClusterRelay`) and
|
|
43
|
+
`cluster-ingress-environment-conflict` (the ingress service's own environment sets one of
|
|
44
|
+
`clusterIngressEnvironmentNames`, which Cloudly owns). Consumers earlier than this release refuse
|
|
45
|
+
a service runtime status that states either reason.
|
|
46
|
+
|
|
3
47
|
## 2026-10-04 - 32.45.0
|
|
4
48
|
|
|
5
49
|
### Features
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
*/
|
|
4
4
|
export const commitinfo = {
|
|
5
5
|
name: '@serve.zone/interfaces',
|
|
6
|
-
version: '32.
|
|
6
|
+
version: '32.47.0',
|
|
7
7
|
description: 'Shared TypeScript interfaces and TypedRequest contracts for the serve.zone ecosystem.'
|
|
8
8
|
};
|
|
9
9
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMDBfY29tbWl0aW5mb19kYXRhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvMDBfY29tbWl0aW5mb19kYXRhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFHO0lBQ3hCLElBQUksRUFBRSx3QkFBd0I7SUFDOUIsT0FBTyxFQUFFLFNBQVM7SUFDbEIsV0FBVyxFQUFFLHVGQUF1RjtDQUNyRyxDQUFBIn0=
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { TServiceRuntimeRefusal } from './serviceruntime.js';
|
|
1
2
|
/**
|
|
2
3
|
* The cluster ingress contracts.
|
|
3
4
|
*
|
|
@@ -157,6 +158,42 @@ export declare const clusterIngressEnvironmentNames: Readonly<{
|
|
|
157
158
|
readonly relayOrigin: "SERVEZONE_CLUSTER_RELAY_ORIGIN";
|
|
158
159
|
readonly nodeId: "SERVEZONE_CLUSTER_NODE_ID";
|
|
159
160
|
}>;
|
|
161
|
+
/**
|
|
162
|
+
* The service runtime refusals the ingress environment reports: `cluster-relay-missing`, a cluster
|
|
163
|
+
* that states no valid relay, and `cluster-ingress-environment-conflict`, a service environment
|
|
164
|
+
* that already sets one of `clusterIngressEnvironmentNames`.
|
|
165
|
+
*/
|
|
166
|
+
export type TClusterIngressEnvironmentRefusal = Extract<TServiceRuntimeRefusal, 'cluster-relay-missing' | 'cluster-ingress-environment-conflict'>;
|
|
167
|
+
/** What the designated ingress service runs with, or the one reason it cannot be composed. */
|
|
168
|
+
export type TClusterIngressEnvironmentComposition = {
|
|
169
|
+
status: 'composed';
|
|
170
|
+
environment: Record<string, string>;
|
|
171
|
+
} | {
|
|
172
|
+
status: 'refused';
|
|
173
|
+
reason: TClusterIngressEnvironmentRefusal;
|
|
174
|
+
message: string;
|
|
175
|
+
};
|
|
176
|
+
/** The facts Cloudly states about one replica of the designated ingress service. */
|
|
177
|
+
export interface IClusterIngressLaunchFacts {
|
|
178
|
+
/** The cluster's `IClusterRelay.origin`, or `null` when the cluster states no relay. */
|
|
179
|
+
relayOrigin: string | null;
|
|
180
|
+
/** The node the replica's assignment runs on. */
|
|
181
|
+
nodeId: string;
|
|
182
|
+
}
|
|
183
|
+
/**
|
|
184
|
+
* The environment one replica of a cluster's designated ingress service runs with: the service's
|
|
185
|
+
* own values with `relayOrigin` and `nodeId` added under their `clusterIngressEnvironmentNames`.
|
|
186
|
+
*
|
|
187
|
+
* The bearer is not added here: it is a secret and reaches the workload through its secret manifest.
|
|
188
|
+
* Its name is still Cloudly's, so a service environment that sets any of the three names is
|
|
189
|
+
* refused `cluster-ingress-environment-conflict`, naming every such key and none of their values,
|
|
190
|
+
* rather than having one value silently replace another. A relay origin that is `null` or that
|
|
191
|
+
* `validateClusterRelay` refuses is `cluster-relay-missing`, answered before a conflict. A node id
|
|
192
|
+
* that is not a node id is the caller's error, not a refusal: the assignment named it, and it is
|
|
193
|
+
* thrown. The inputs are not changed. Both values are part of what the replica runs, so a relay or
|
|
194
|
+
* node that changes is a new environment.
|
|
195
|
+
*/
|
|
196
|
+
export declare const composeClusterIngressEnvironment: (serviceEnvironmentArg: Readonly<Record<string, string>>, launchArg: IClusterIngressLaunchFacts) => TClusterIngressEnvironmentComposition;
|
|
160
197
|
/**
|
|
161
198
|
* Every reason Cloudly refuses a cluster ingress registration, in the order it judges them.
|
|
162
199
|
*
|
|
@@ -3,6 +3,7 @@ import { isUtcCalendarDay } from '../private/utccalendarday.js';
|
|
|
3
3
|
import { validateProtocolOfferOn } from '../protocol.js';
|
|
4
4
|
import { hasExactKeys, readExactDataRecord } from '../private/dataproperties.js';
|
|
5
5
|
import { isClusterNodeId } from '../private/nodeidentifier.js';
|
|
6
|
+
import { validateClusterRelay } from './cluster.js';
|
|
6
7
|
/**
|
|
7
8
|
* The cluster ingress contracts.
|
|
8
9
|
*
|
|
@@ -319,6 +320,47 @@ export const clusterIngressEnvironmentNames = Object.freeze({
|
|
|
319
320
|
relayOrigin: 'SERVEZONE_CLUSTER_RELAY_ORIGIN',
|
|
320
321
|
nodeId: 'SERVEZONE_CLUSTER_NODE_ID',
|
|
321
322
|
});
|
|
323
|
+
/**
|
|
324
|
+
* The environment one replica of a cluster's designated ingress service runs with: the service's
|
|
325
|
+
* own values with `relayOrigin` and `nodeId` added under their `clusterIngressEnvironmentNames`.
|
|
326
|
+
*
|
|
327
|
+
* The bearer is not added here: it is a secret and reaches the workload through its secret manifest.
|
|
328
|
+
* Its name is still Cloudly's, so a service environment that sets any of the three names is
|
|
329
|
+
* refused `cluster-ingress-environment-conflict`, naming every such key and none of their values,
|
|
330
|
+
* rather than having one value silently replace another. A relay origin that is `null` or that
|
|
331
|
+
* `validateClusterRelay` refuses is `cluster-relay-missing`, answered before a conflict. A node id
|
|
332
|
+
* that is not a node id is the caller's error, not a refusal: the assignment named it, and it is
|
|
333
|
+
* thrown. The inputs are not changed. Both values are part of what the replica runs, so a relay or
|
|
334
|
+
* node that changes is a new environment.
|
|
335
|
+
*/
|
|
336
|
+
export const composeClusterIngressEnvironment = (serviceEnvironmentArg, launchArg) => {
|
|
337
|
+
const { relayOrigin, nodeId } = launchArg;
|
|
338
|
+
if (!isClusterNodeId(nodeId)) {
|
|
339
|
+
throw new Error('cluster ingress environment requires a node id');
|
|
340
|
+
}
|
|
341
|
+
if (relayOrigin === null) {
|
|
342
|
+
return { status: 'refused', reason: 'cluster-relay-missing',
|
|
343
|
+
message: 'cluster ingress has no relay origin: the cluster states no relay' };
|
|
344
|
+
}
|
|
345
|
+
const relayErrors = validateClusterRelay({ origin: relayOrigin });
|
|
346
|
+
if (relayErrors.length > 0) {
|
|
347
|
+
return { status: 'refused', reason: 'cluster-relay-missing',
|
|
348
|
+
message: `cluster ingress has no relay origin: ${relayErrors.join('; ')}` };
|
|
349
|
+
}
|
|
350
|
+
const collisions = Object.values(clusterIngressEnvironmentNames)
|
|
351
|
+
.filter((nameArg) => Object.hasOwn(serviceEnvironmentArg, nameArg))
|
|
352
|
+
.sort();
|
|
353
|
+
if (collisions.length > 0) {
|
|
354
|
+
return { status: 'refused', reason: 'cluster-ingress-environment-conflict',
|
|
355
|
+
message: `cluster ingress environment collides with ${collisions.join(', ')} already set on the `
|
|
356
|
+
+ 'service' };
|
|
357
|
+
}
|
|
358
|
+
return { status: 'composed', environment: {
|
|
359
|
+
...serviceEnvironmentArg,
|
|
360
|
+
[clusterIngressEnvironmentNames.relayOrigin]: relayOrigin,
|
|
361
|
+
[clusterIngressEnvironmentNames.nodeId]: nodeId,
|
|
362
|
+
} };
|
|
363
|
+
};
|
|
322
364
|
/**
|
|
323
365
|
* Every reason Cloudly refuses a cluster ingress registration, in the order it judges them.
|
|
324
366
|
*
|
|
@@ -399,4 +441,4 @@ export const validateClusterIngressRouteTableChange = (valueArg, pathArg = 'clus
|
|
|
399
441
|
? []
|
|
400
442
|
: [`${pathArg} revision must be a non-negative safe integer`];
|
|
401
443
|
};
|
|
402
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2x1c3RlcmluZ3Jlc3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90cy9kYXRhL2NsdXN0ZXJpbmdyZXNzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQzVELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ2hFLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxZQUFZLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNqRixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFFL0Q7Ozs7Ozs7Ozs7O0dBV0c7QUFFSCxNQUFNLENBQUMsTUFBTSxvQkFBb0IsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDO0lBQ2hELDBCQUEwQixFQUFFLEVBQUU7SUFDOUIsMEJBQTBCLEVBQUUsSUFBSTtJQUNoQyxxQkFBcUIsRUFBRSxHQUFHO0lBQzFCLGFBQWEsRUFBRSxJQUFJO0lBQ25CLGlCQUFpQixFQUFFLElBQUk7SUFDdkIsMkJBQTJCLEVBQUUsRUFBRTtJQUMvQix5QkFBeUIsRUFBRSxJQUFJO0lBQy9CLG1CQUFtQixFQUFFLEdBQUc7SUFDeEIsdUJBQXVCLEVBQUUsR0FBRztJQUM1QiwwQkFBMEIsRUFBRSxFQUFFO0NBQy9CLENBQUMsQ0FBQztBQXNGSCxNQUFNLFFBQVEsR0FBRyxDQUFDLFFBQWlCLEVBQXVDLEVBQUUsQ0FBQyxDQUMzRSxPQUFPLENBQUMsUUFBUSxDQUFDO09BQ2QsT0FBTyxRQUFRLEtBQUssUUFBUTtPQUM1QixDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDO09BQ3hCLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsS0FBSyxNQUFNLENBQUMsU0FBUztXQUNuRCxNQUFNLENBQUMsY0FBYyxDQUFD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
|
|
444
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2x1c3RlcmluZ3Jlc3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90cy9kYXRhL2NsdXN0ZXJpbmdyZXNzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQzVELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ2hFLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxZQUFZLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNqRixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDL0QsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sY0FBYyxDQUFDO0FBR3BEOzs7Ozs7Ozs7OztHQVdHO0FBRUgsTUFBTSxDQUFDLE1BQU0sb0JBQW9CLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQztJQUNoRCwwQkFBMEIsRUFBRSxFQUFFO0lBQzlCLDBCQUEwQixFQUFFLElBQUk7SUFDaEMscUJBQXFCLEVBQUUsR0FBRztJQUMxQixhQUFhLEVBQUUsSUFBSTtJQUNuQixpQkFBaUIsRUFBRSxJQUFJO0lBQ3ZCLDJCQUEyQixFQUFFLEVBQUU7SUFDL0IseUJBQXlCLEVBQUUsSUFBSTtJQUMvQixtQkFBbUIsRUFBRSxHQUFHO0lBQ3hCLHVCQUF1QixFQUFFLEdBQUc7SUFDNUIsMEJBQTBCLEVBQUUsRUFBRTtDQUMvQixDQUFDLENBQUM7QUFzRkgsTUFBTSxRQUFRLEdBQUcsQ0FBQyxRQUFpQixFQUF1QyxFQUFFLENBQUMsQ0FDM0UsT0FBTyxDQUFDLFFBQVEsQ0FBQztPQUNkLE9BQU8sUUFBUSxLQUFLLFFBQVE7T0FDNUIsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQztPQUN4QixDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLEtB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
|
|
@@ -200,3 +200,139 @@ export declare const bindReportRuntimeAssignmentLogsRequest: (valueArg: unknown,
|
|
|
200
200
|
}>;
|
|
201
201
|
/** Matches an acknowledgement to the exact batch that was sent. */
|
|
202
202
|
export declare const bindReportRuntimeAssignmentLogsResponse: (valueArg: unknown, requestArg: unknown) => IReportRuntimeAssignmentLogsResponse;
|
|
203
|
+
/**
|
|
204
|
+
* Why a controller no longer holds batches it accepted: `batch-cap`, its bound on how many batches
|
|
205
|
+
* it keeps of one attempt; `byte-cap`, its bound on the text it keeps of one attempt; both drop
|
|
206
|
+
* the oldest batches first; `retention`, the config's `logs.retentionMs` since it accepted them.
|
|
207
|
+
* A node delivers about once a second, so a workload that writes now and then sends many small
|
|
208
|
+
* batches, which the batch bound holds where the text bound would not.
|
|
209
|
+
*/
|
|
210
|
+
export type TRuntimeAssignmentLogTruncationReason = 'batch-cap' | 'byte-cap' | 'retention';
|
|
211
|
+
/** One batch the controller accepted and still holds, as the node sent it. */
|
|
212
|
+
export interface IRuntimeAssignmentLogBatchRecord {
|
|
213
|
+
kind: 'batch';
|
|
214
|
+
captureId: string;
|
|
215
|
+
sequence: number;
|
|
216
|
+
/** When the controller accepted the batch, in milliseconds since the Unix epoch. */
|
|
217
|
+
acceptedAt: number;
|
|
218
|
+
final: boolean;
|
|
219
|
+
entries: TRuntimeAssignmentLogEntry[];
|
|
220
|
+
}
|
|
221
|
+
/**
|
|
222
|
+
* Sequence numbers of one capture whose batches the controller did not receive or no longer holds
|
|
223
|
+
* (its own loss): numbers that never arrived and that the node did not account for, and batches it
|
|
224
|
+
* accepted whose payload it has lost. A gap the node left by discarding is not one: the batch
|
|
225
|
+
* after it opens with the `not-kept` loss that counts it.
|
|
226
|
+
*/
|
|
227
|
+
export interface IRuntimeAssignmentLogGapRecord {
|
|
228
|
+
kind: 'gap';
|
|
229
|
+
captureId: string;
|
|
230
|
+
fromSequence: number;
|
|
231
|
+
toSequence: number;
|
|
232
|
+
}
|
|
233
|
+
/**
|
|
234
|
+
* Batches of one capture the controller accepted and has since dropped: every batch it held of the
|
|
235
|
+
* capture up to and including `throughSequence`, oldest first, so a truncation is always the start
|
|
236
|
+
* of what remains of a capture. Gaps inside that range are no longer stated. The counts are exact.
|
|
237
|
+
*/
|
|
238
|
+
export interface IRuntimeAssignmentLogTruncationRecord {
|
|
239
|
+
kind: 'truncated';
|
|
240
|
+
captureId: string;
|
|
241
|
+
throughSequence: number;
|
|
242
|
+
/** In the canonical order `batch-cap`, `byte-cap`, `retention`; duplicate-free, at least one. */
|
|
243
|
+
reasons: TRuntimeAssignmentLogTruncationReason[];
|
|
244
|
+
/** The accepted batches dropped, at least one and at most `throughSequence`. */
|
|
245
|
+
batches: number;
|
|
246
|
+
/** The UTF-8 bytes of `text` the dropped batches held. */
|
|
247
|
+
bytes: number;
|
|
248
|
+
/** The entries, lines and losses alike, the dropped batches held. */
|
|
249
|
+
entries: number;
|
|
250
|
+
}
|
|
251
|
+
export type TRuntimeAssignmentLogRecord = IRuntimeAssignmentLogBatchRecord | IRuntimeAssignmentLogGapRecord | IRuntimeAssignmentLogTruncationRecord;
|
|
252
|
+
/**
|
|
253
|
+
* One attempt whose logs the controller keeps, as an operator reads it. The controller keeps an
|
|
254
|
+
* attempt's logs from the moment it issues the attempt, so an attempt that failed before writing a
|
|
255
|
+
* line is listed with nothing held, and an attempt its slot released stays readable until
|
|
256
|
+
* `expiresAt`.
|
|
257
|
+
*/
|
|
258
|
+
export interface IRuntimeAssignmentLogAttemptView {
|
|
259
|
+
serviceId: string;
|
|
260
|
+
replicaId: string;
|
|
261
|
+
nodeId: string;
|
|
262
|
+
assignmentId: string;
|
|
263
|
+
attemptId: string;
|
|
264
|
+
/** When the controller issued the attempt, in milliseconds since the Unix epoch. */
|
|
265
|
+
issuedAt: number;
|
|
266
|
+
/** When it last accepted a batch of the attempt; null until it accepted one. */
|
|
267
|
+
lastAcceptedAt: number | null;
|
|
268
|
+
/**
|
|
269
|
+
* When the controller drops the attempt's logs whole: the latest of `issuedAt`, `lastAcceptedAt`
|
|
270
|
+
* and the time the attempt's slot released it, plus the attempt's `logs.retentionMs`. Null while
|
|
271
|
+
* the slot still holds the attempt: no expiry is scheduled, however quiet the attempt is.
|
|
272
|
+
*/
|
|
273
|
+
expiresAt: number | null;
|
|
274
|
+
/** The captures of the attempt the controller accepted a batch of. */
|
|
275
|
+
captures: number;
|
|
276
|
+
/** Those of them whose final batch it accepted. */
|
|
277
|
+
capturesEnded: number;
|
|
278
|
+
/** The UTF-8 bytes of `text` the controller holds of the attempt. */
|
|
279
|
+
keptBytes: number;
|
|
280
|
+
/** The accepted batches of the attempt it has since dropped, stated in truncation records. */
|
|
281
|
+
truncatedBatches: number;
|
|
282
|
+
}
|
|
283
|
+
/** One page of a service's attempts, newest issued first, ties in `assignmentId` order. */
|
|
284
|
+
export interface IRuntimeAssignmentLogAttemptPage {
|
|
285
|
+
attempts: IRuntimeAssignmentLogAttemptView[];
|
|
286
|
+
/** Where the next page starts; null when this page is the last. Opaque to the reader. */
|
|
287
|
+
nextCursor: string | null;
|
|
288
|
+
}
|
|
289
|
+
/**
|
|
290
|
+
* One page of one attempt's kept logs, in delivery order: captures in the order the controller
|
|
291
|
+
* first accepted a batch of each, and within a capture by sequence. A capture's truncation record
|
|
292
|
+
* comes first, a gap record directly before the batch that follows it.
|
|
293
|
+
*/
|
|
294
|
+
export interface IRuntimeAssignmentLogPage {
|
|
295
|
+
attempt: IRuntimeAssignmentLogAttemptView;
|
|
296
|
+
records: TRuntimeAssignmentLogRecord[];
|
|
297
|
+
/** Where the next page starts; null when this page is the last. Opaque to the reader. */
|
|
298
|
+
nextCursor: string | null;
|
|
299
|
+
}
|
|
300
|
+
/**
|
|
301
|
+
* Why a controller refuses a log read: `attempt-not-found` (it keeps no logs of that attempt for
|
|
302
|
+
* that service, never did or no longer does), `cursor-invalid` (a cursor it did not hand out for
|
|
303
|
+
* this read) and `limit-invalid` (a `limit` outside its bound).
|
|
304
|
+
*/
|
|
305
|
+
export type TRuntimeAssignmentLogReadRefusal = 'attempt-not-found' | 'cursor-invalid' | 'limit-invalid';
|
|
306
|
+
/** The named refusal of a log read, sent as `TypedResponseError.errorData`. */
|
|
307
|
+
export interface IRuntimeAssignmentLogReadErrorData {
|
|
308
|
+
code: TRuntimeAssignmentLogReadRefusal;
|
|
309
|
+
retryable: false;
|
|
310
|
+
}
|
|
311
|
+
export declare const runtimeAssignmentLogReadContract: Readonly<{
|
|
312
|
+
readonly error: "Runtime assignment log read contract rejected.";
|
|
313
|
+
/** The largest `limit` `getServiceRuntimeLogAttempts` accepts; a controller refuses a larger one. */
|
|
314
|
+
readonly maximumAttemptPageSize: 256;
|
|
315
|
+
/** The largest `limit` `getRuntimeAssignmentLogs` accepts, counted in records. */
|
|
316
|
+
readonly maximumPageRecords: 256;
|
|
317
|
+
/**
|
|
318
|
+
* The most entries the records of one log page hold together: four full batches. It keeps a page
|
|
319
|
+
* within the node count every captured value is held to; one batch always fits.
|
|
320
|
+
*/
|
|
321
|
+
readonly maximumPageEntries: number;
|
|
322
|
+
/**
|
|
323
|
+
* The canonical JSON of a whole log page is at most two mebibytes, and the controller closes a
|
|
324
|
+
* page before the next record would cross it. One batch always fits: its record is smaller than
|
|
325
|
+
* the report that carried it, which `maximumReportCanonicalBytes` bounded.
|
|
326
|
+
*/
|
|
327
|
+
readonly maximumPageCanonicalBytes: number;
|
|
328
|
+
}>;
|
|
329
|
+
/** Detached exact-schema snapshot of one attempt view. */
|
|
330
|
+
export declare const snapshotRuntimeAssignmentLogAttemptView: (valueArg: unknown) => IRuntimeAssignmentLogAttemptView;
|
|
331
|
+
/** Detached exact-schema snapshot of one attempt page, in its one order. */
|
|
332
|
+
export declare const snapshotRuntimeAssignmentLogAttemptPage: (valueArg: unknown) => IRuntimeAssignmentLogAttemptPage;
|
|
333
|
+
/** Detached exact-schema snapshot of one log page, bounded and in delivery order. */
|
|
334
|
+
export declare const snapshotRuntimeAssignmentLogPage: (valueArg: unknown) => IRuntimeAssignmentLogPage;
|
|
335
|
+
/** Matches an attempt page to the read that asked for it: that service's attempts, within its limit. */
|
|
336
|
+
export declare const bindRuntimeAssignmentLogAttemptPage: (valueArg: unknown, serviceIdArg: string, limitArg: number) => IRuntimeAssignmentLogAttemptPage;
|
|
337
|
+
/** Matches a log page to the read that asked for it: that attempt of that service, within its limit. */
|
|
338
|
+
export declare const bindRuntimeAssignmentLogPage: (valueArg: unknown, serviceIdArg: string, assignmentIdArg: string, limitArg: number) => IRuntimeAssignmentLogPage;
|