@serve.zone/interfaces 32.36.1 → 32.38.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/runtimeassignmentlogs.d.ts +93 -12
- package/dist_ts/data/runtimeassignmentlogs.js +33 -5
- package/dist_ts/data/runtimeconfig.d.ts +1 -0
- package/dist_ts/data/runtimeconfig.js +2 -1
- package/dist_ts/private/runtimepolicy.d.ts +2 -0
- package/dist_ts/private/runtimepolicy.js +4 -2
- package/package.json +1 -1
- package/readme.md +65 -11
- package/ts/00_commitinfo_data.ts +1 -1
- package/ts/data/runtimeassignmentlogs.ts +102 -16
- package/ts/data/runtimeconfig.ts +1 -0
- package/ts/private/runtimepolicy.ts +3 -1
package/changelog.md
CHANGED
|
@@ -1,5 +1,49 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 2026-09-30 - 32.38.0
|
|
4
|
+
|
|
5
|
+
### Features
|
|
6
|
+
|
|
7
|
+
- Rollout: controllers must run this interfaces release before any node sends `discardedCaptures`
|
|
8
|
+
or a `not-kept` loss. A receiver on 32.37.0 or earlier reads a batch by its exact schema and
|
|
9
|
+
refuses such a batch on every retry.
|
|
10
|
+
- A node may now discard workload log captures it cannot deliver, so a crash-looping workload no
|
|
11
|
+
longer fills its RAM-backed runtime directory. A `not-kept` answer to
|
|
12
|
+
`reportRuntimeAssignmentLogs` is the node's permission to discard for that session: it may drop
|
|
13
|
+
every ended capture completely, and each one that ends later under the answer, and may drop a
|
|
14
|
+
running capture's output, stating it as the new `not-kept` loss (`TRuntimeAssignmentLogLossReason`)
|
|
15
|
+
where a later session that keeps logs resumes. While a controller is away or slow, a node keeps
|
|
16
|
+
at most `runtimeAssignmentLogContract.maximumEndedCaptures` (64) ended captures awaiting
|
|
17
|
+
acknowledgement, holding at most `maximumEndedCaptureBytes` (64 MiB) together; past either bound
|
|
18
|
+
it discards the oldest completely. Every capture discarded whole, under either rule, is counted
|
|
19
|
+
in the optional batch field `discardedCaptures`, carried by the next batch it creates; the count
|
|
20
|
+
is node-level evidence that a controller keeping logs records against the node and the session,
|
|
21
|
+
and a lost acknowledgement can repeat it.
|
|
22
|
+
- A log `sequence` number, once sent, is never sent again with other content. When `not-kept` lets
|
|
23
|
+
a node drop a batch it sent that is still unacknowledged, the capture's next batch takes a higher
|
|
24
|
+
number and opens with a `not-kept` loss, so a controller tells the node's discard from its own
|
|
25
|
+
loss by the batch after the gap.
|
|
26
|
+
- `runtimeConfigContract.maximumLogBufferedBytes` (64 MiB) publishes the largest
|
|
27
|
+
`logs.maximumBufferedBytes`; `runtimeAssignmentLogContract.maximumEndedCaptureBytes` is the same
|
|
28
|
+
bound from the same source.
|
|
29
|
+
|
|
30
|
+
### Maintenance
|
|
31
|
+
|
|
32
|
+
- Release tooling currency: pnpm 12.6.0; `@git.zone/*` are already at their latest releases and
|
|
33
|
+
`@types/node` stays at 26.6.2. The 23 lockfile entries a mirror had rewritten to `sha1` integrity are restored to the
|
|
34
|
+
npmjs `sha512` integrity, each checked against its npmjs shasum first.
|
|
35
|
+
|
|
36
|
+
## 2026-09-29 - 32.37.0
|
|
37
|
+
|
|
38
|
+
### Features
|
|
39
|
+
|
|
40
|
+
- A controller that keeps no workload logs answers a batch of `reportRuntimeAssignmentLogs` with
|
|
41
|
+
the named refusal `not-kept` (`TRuntimeAssignmentLogsStatus`, alongside `accepted` and `replay`):
|
|
42
|
+
it holds nothing, and the node sends no more batches on that session. The contract now states
|
|
43
|
+
that a controller answers every batch with one of the three and never leaves the method
|
|
44
|
+
unhandled, so a node tells such a controller from a failure worth retrying; a controller must
|
|
45
|
+
handle the method before a node that captures logs runs against it.
|
|
46
|
+
|
|
3
47
|
## 2026-09-29 - 32.36.1
|
|
4
48
|
|
|
5
49
|
### Fixes
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
*/
|
|
4
4
|
export const commitinfo = {
|
|
5
5
|
name: '@serve.zone/interfaces',
|
|
6
|
-
version: '32.
|
|
6
|
+
version: '32.38.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=
|
|
@@ -30,17 +30,21 @@ export interface IRuntimeAssignmentLogLine {
|
|
|
30
30
|
* - `capture-restart`: the node's capture restarted without its buffer, for example after a reboot
|
|
31
31
|
* emptied its disposable capture directory; how much was lost is unknown;
|
|
32
32
|
* - `not-captured`: the container was started without output capture, so none of its output is
|
|
33
|
-
* available; how much there was is unknown
|
|
33
|
+
* available; how much there was is unknown;
|
|
34
|
+
* - `not-kept`: the node dropped this output while its controller kept no logs. Once a session
|
|
35
|
+
* answered `not-kept`, the node may drop a running capture's output instead of holding it,
|
|
36
|
+
* including a batch it sent that is still unacknowledged; a later session that keeps logs
|
|
37
|
+
* receives the capture from where it stands, after this loss.
|
|
34
38
|
*/
|
|
35
|
-
export type TRuntimeAssignmentLogLossReason = 'buffer-overflow' | 'line-cut' | 'capture-restart' | 'not-captured';
|
|
39
|
+
export type TRuntimeAssignmentLogLossReason = 'buffer-overflow' | 'line-cut' | 'capture-restart' | 'not-captured' | 'not-kept';
|
|
36
40
|
/**
|
|
37
41
|
* Evidence of output that was lost, in the position of the stream where it was lost.
|
|
38
42
|
*
|
|
39
43
|
* `bytes` and `lines` count exactly what was dropped; both are `null` for `capture-restart` and
|
|
40
44
|
* `not-captured`, whose extent the node cannot know, and both are stated for the other reasons.
|
|
41
45
|
* A `line-cut` counts the cut bytes and no line, because the line itself was delivered; it names
|
|
42
|
-
* the stream of that line. A `buffer-overflow` counts the dropped bytes and the
|
|
43
|
-
* them, and names a stream only when every dropped byte came from it.
|
|
46
|
+
* the stream of that line. A `buffer-overflow` or `not-kept` loss counts the dropped bytes and the
|
|
47
|
+
* whole lines among them, and names a stream only when every dropped byte came from it.
|
|
44
48
|
*/
|
|
45
49
|
export interface IRuntimeAssignmentLogLoss {
|
|
46
50
|
kind: 'lost';
|
|
@@ -57,10 +61,23 @@ export type TRuntimeAssignmentLogEntry = IRuntimeAssignmentLogLine | IRuntimeAss
|
|
|
57
61
|
*
|
|
58
62
|
* `captureId` names one capture of the attempt on its node: the node starts a new capture, with a
|
|
59
63
|
* new id and `sequence` 1, whenever it cannot continue the previous one, and opens it with a
|
|
60
|
-
* `capture-restart` loss. Within a capture `sequence` counts batches from 1
|
|
61
|
-
*
|
|
62
|
-
*
|
|
63
|
-
*
|
|
64
|
+
* `capture-restart` loss. Within a capture `sequence` counts batches from 1, and the node sends the
|
|
65
|
+
* next batch only after the controller acknowledged the previous one, so a batch is the one unit of
|
|
66
|
+
* retry. `final` states that no batch follows in this capture: the container is gone and its output
|
|
67
|
+
* is drained. Only a final batch may be empty.
|
|
68
|
+
*
|
|
69
|
+
* A sequence number, once sent, is never sent again with other content: a retry resends the batch
|
|
70
|
+
* unchanged, `discardedCaptures` included. Reusing a number would lose data silently, because a
|
|
71
|
+
* controller that stored the earlier batch while its acknowledgement was lost answers `replay` and
|
|
72
|
+
* drops the new content with its loss evidence. The node skips numbers only after dropping a
|
|
73
|
+
* running capture's batch it sent that is still unacknowledged, which only a `not-kept` answer
|
|
74
|
+
* permits: the next batch it
|
|
75
|
+
* sends of that capture takes a higher number it never sent and opens with a `not-kept` loss that
|
|
76
|
+
* counts what was dropped. Where the controller holds the dropped batch, because only its
|
|
77
|
+
* acknowledgement was lost, it sees no gap, and that loss also counts content it holds.
|
|
78
|
+
*
|
|
79
|
+
* `discardedCaptures` is node-level loss evidence, not part of this capture (see
|
|
80
|
+
* `runtimeAssignmentLogContract.maximumEndedCaptures`).
|
|
64
81
|
*/
|
|
65
82
|
export interface IRuntimeAssignmentLogBatch {
|
|
66
83
|
assignmentId: string;
|
|
@@ -69,6 +86,24 @@ export interface IRuntimeAssignmentLogBatch {
|
|
|
69
86
|
sequence: number;
|
|
70
87
|
entries: TRuntimeAssignmentLogEntry[];
|
|
71
88
|
final: boolean;
|
|
89
|
+
/**
|
|
90
|
+
* How many ended captures the node discarded whole and unacknowledged since it last stated a
|
|
91
|
+
* count: past its ended-capture bound, or while a `not-kept` answer stood. The node states the
|
|
92
|
+
* count on the next batch it creates, of any capture, and counts afresh from there. The batch is
|
|
93
|
+
* then the unit of retry for the count: if the node discards that batch unacknowledged, the count
|
|
94
|
+
* passes on to the next batch, so a count whose acknowledgement was lost may reach the controller
|
|
95
|
+
* again inside a later count. It never names the discarded captures, because remembering them
|
|
96
|
+
* would grow without bound while the controller is away. Absent means none; stated, it is at
|
|
97
|
+
* least 1.
|
|
98
|
+
*
|
|
99
|
+
* The count belongs to the node, not to the assignment, attempt or capture of the batch that
|
|
100
|
+
* carries it. A controller that keeps logs records it against the node and the session the batch
|
|
101
|
+
* arrived on, once for each batch it accepts and never for a batch it answers `replay`, which it
|
|
102
|
+
* recorded when it accepted it. Counts are not idempotent: a lost acknowledgement can repeat a
|
|
103
|
+
* count, so their sum may exceed the captures discarded. A controller that keeps no logs does
|
|
104
|
+
* nothing with the count beyond answering `not-kept`; the node keeps it for a later session.
|
|
105
|
+
*/
|
|
106
|
+
discardedCaptures?: number;
|
|
72
107
|
}
|
|
73
108
|
/** Pallet push over its current authenticated session. */
|
|
74
109
|
export interface IReportRuntimeAssignmentLogsRequest {
|
|
@@ -76,20 +111,66 @@ export interface IReportRuntimeAssignmentLogsRequest {
|
|
|
76
111
|
batch: IRuntimeAssignmentLogBatch;
|
|
77
112
|
}
|
|
78
113
|
/**
|
|
79
|
-
*
|
|
80
|
-
*
|
|
81
|
-
*
|
|
114
|
+
* How a controller answers one batch.
|
|
115
|
+
*
|
|
116
|
+
* - `accepted`: it holds the batch durably;
|
|
117
|
+
* - `replay`: it already holds this batch and does not store it again;
|
|
118
|
+
* - `not-kept`: it keeps no workload logs. It holds nothing, and the node sends no more batches on
|
|
119
|
+
* this session; a later session may be answered differently. The answer is the node's permission
|
|
120
|
+
* to discard for that session: it may discard every ended capture completely, its content and
|
|
121
|
+
* identity, and each capture that ends later while the answer stands, counting them in
|
|
122
|
+
* `discardedCaptures`. A running capture stays within `logs.maximumBufferedBytes`, whose overflow
|
|
123
|
+
* is a `buffer-overflow` loss, or the node drops its output, a sent and unacknowledged batch
|
|
124
|
+
* included, and states a `not-kept` loss where delivery resumes.
|
|
125
|
+
*
|
|
126
|
+
* A controller answers every batch with one of these; it never leaves the method unhandled, so a
|
|
127
|
+
* node can tell a controller that keeps no logs from a failure worth retrying. It never refuses a
|
|
128
|
+
* batch for a gap in `sequence`. Every gap the node leaves by discarding carries evidence: the
|
|
129
|
+
* batch after numbers it skipped opens with a `not-kept` loss (see `IRuntimeAssignmentLogBatch`),
|
|
130
|
+
* and a capture it discarded whole is counted in `discardedCaptures`. A controller therefore reads
|
|
131
|
+
* a gap before a batch that opens with a `not-kept` loss as the node's discard, which that loss
|
|
132
|
+
* counts, and a gap before any other batch as its own loss, which it records. A capture whose
|
|
133
|
+
* final batch never arrives leaves no gap to read: it may still be running, and one discarded whole
|
|
134
|
+
* is counted but never named.
|
|
82
135
|
*/
|
|
136
|
+
export type TRuntimeAssignmentLogsStatus = 'accepted' | 'replay' | 'not-kept';
|
|
83
137
|
export interface IReportRuntimeAssignmentLogsResponse {
|
|
84
|
-
status:
|
|
138
|
+
status: TRuntimeAssignmentLogsStatus;
|
|
85
139
|
assignmentId: string;
|
|
86
140
|
captureId: string;
|
|
87
141
|
sequence: number;
|
|
88
142
|
}
|
|
143
|
+
/**
|
|
144
|
+
* Rollout: a receiver on interfaces 32.37.0 or earlier reads a batch by its exact schema and
|
|
145
|
+
* refuses one that carries `discardedCaptures` or a `not-kept` loss, on every retry. A controller
|
|
146
|
+
* must therefore run a later release before any node sends either.
|
|
147
|
+
*/
|
|
89
148
|
export declare const runtimeAssignmentLogContract: Readonly<{
|
|
90
149
|
readonly error: "Runtime assignment log contract rejected.";
|
|
91
150
|
/** Pallet pushes; the controller persists metadata and payloads and acknowledges by sequence. */
|
|
92
151
|
readonly delivery: "node-pushes-controller-acknowledges-each-batch";
|
|
152
|
+
/**
|
|
153
|
+
* A controller that keeps no logs answers `not-kept`, and the node stops for that session. It may
|
|
154
|
+
* then discard ended captures completely, counted in `discardedCaptures`, and drop running
|
|
155
|
+
* output, stated as a `not-kept` loss.
|
|
156
|
+
*/
|
|
157
|
+
readonly notKept: "node-stops-for-the-session";
|
|
158
|
+
/**
|
|
159
|
+
* The most ended captures a node keeps awaiting acknowledgement, while its controller is away or
|
|
160
|
+
* slow. An ended capture holds its buffer, cursor record and waiting batch in the node's RAM-backed
|
|
161
|
+
* runtime directory, and a crash-looping workload ends one per restart; 64 covers a burst of
|
|
162
|
+
* restarts across the node's workloads before any of them loses its tail. Past this bound, or past
|
|
163
|
+
* `maximumEndedCaptureBytes`, the node discards the oldest ended captures completely and counts
|
|
164
|
+
* them in the next batch's `discardedCaptures`.
|
|
165
|
+
*/
|
|
166
|
+
readonly maximumEndedCaptures: 64;
|
|
167
|
+
/**
|
|
168
|
+
* The most bytes all ended captures awaiting acknowledgement hold together, measured as the node
|
|
169
|
+
* measures its `logs.maximumBufferedBytes` buffer. It equals the largest buffer a runtime config
|
|
170
|
+
* may set (`runtimeConfigContract.maximumLogBufferedBytes`), so one capture always fits whole, and
|
|
171
|
+
* it keeps the node's RAM-backed runtime directory from growing with the number of restarts.
|
|
172
|
+
*/
|
|
173
|
+
readonly maximumEndedCaptureBytes: 67108864;
|
|
93
174
|
/** The most entries in one batch. */
|
|
94
175
|
readonly maximumEntriesPerBatch: 1024;
|
|
95
176
|
/** The most UTF-8 bytes of `text` in one entry; a longer line travels as `partial` pieces. */
|
|
@@ -1,11 +1,38 @@
|
|
|
1
1
|
import { snapshotRuntimeAssignment, validateRuntimeAssignment } from './runtimeassignment.js';
|
|
2
2
|
import { snapshotRuntimeSessionBinding } from './runtimesession.js';
|
|
3
3
|
import { captureNetwork, networkCounter, networkEqual, networkId, networkList, networkRecord, requireNetwork, } from '../private/networkcontract.js';
|
|
4
|
-
import { isRuntimeLogPolicy } from '../private/runtimepolicy.js';
|
|
4
|
+
import { isRuntimeLogPolicy, runtimePolicyLimits } from '../private/runtimepolicy.js';
|
|
5
|
+
/**
|
|
6
|
+
* Rollout: a receiver on interfaces 32.37.0 or earlier reads a batch by its exact schema and
|
|
7
|
+
* refuses one that carries `discardedCaptures` or a `not-kept` loss, on every retry. A controller
|
|
8
|
+
* must therefore run a later release before any node sends either.
|
|
9
|
+
*/
|
|
5
10
|
export const runtimeAssignmentLogContract = Object.freeze({
|
|
6
11
|
error: 'Runtime assignment log contract rejected.',
|
|
7
12
|
/** Pallet pushes; the controller persists metadata and payloads and acknowledges by sequence. */
|
|
8
13
|
delivery: 'node-pushes-controller-acknowledges-each-batch',
|
|
14
|
+
/**
|
|
15
|
+
* A controller that keeps no logs answers `not-kept`, and the node stops for that session. It may
|
|
16
|
+
* then discard ended captures completely, counted in `discardedCaptures`, and drop running
|
|
17
|
+
* output, stated as a `not-kept` loss.
|
|
18
|
+
*/
|
|
19
|
+
notKept: 'node-stops-for-the-session',
|
|
20
|
+
/**
|
|
21
|
+
* The most ended captures a node keeps awaiting acknowledgement, while its controller is away or
|
|
22
|
+
* slow. An ended capture holds its buffer, cursor record and waiting batch in the node's RAM-backed
|
|
23
|
+
* runtime directory, and a crash-looping workload ends one per restart; 64 covers a burst of
|
|
24
|
+
* restarts across the node's workloads before any of them loses its tail. Past this bound, or past
|
|
25
|
+
* `maximumEndedCaptureBytes`, the node discards the oldest ended captures completely and counts
|
|
26
|
+
* them in the next batch's `discardedCaptures`.
|
|
27
|
+
*/
|
|
28
|
+
maximumEndedCaptures: 64,
|
|
29
|
+
/**
|
|
30
|
+
* The most bytes all ended captures awaiting acknowledgement hold together, measured as the node
|
|
31
|
+
* measures its `logs.maximumBufferedBytes` buffer. It equals the largest buffer a runtime config
|
|
32
|
+
* may set (`runtimeConfigContract.maximumLogBufferedBytes`), so one capture always fits whole, and
|
|
33
|
+
* it keeps the node's RAM-backed runtime directory from growing with the number of restarts.
|
|
34
|
+
*/
|
|
35
|
+
maximumEndedCaptureBytes: runtimePolicyLimits.maximumLogBufferedBytes,
|
|
9
36
|
/** The most entries in one batch. */
|
|
10
37
|
maximumEntriesPerBatch: 1024,
|
|
11
38
|
/** The most UTF-8 bytes of `text` in one entry; a longer line travels as `partial` pieces. */
|
|
@@ -25,8 +52,8 @@ catch {
|
|
|
25
52
|
} };
|
|
26
53
|
const encoder = new TextEncoder();
|
|
27
54
|
const streams = ['stdout', 'stderr'];
|
|
28
|
-
const lossReasons = ['buffer-overflow', 'line-cut', 'capture-restart', 'not-captured'];
|
|
29
|
-
const statuses = ['accepted', 'replay'];
|
|
55
|
+
const lossReasons = ['buffer-overflow', 'line-cut', 'capture-restart', 'not-captured', 'not-kept'];
|
|
56
|
+
const statuses = ['accepted', 'replay', 'not-kept'];
|
|
30
57
|
const literalOf = (valueArg, allowedArg) => {
|
|
31
58
|
requireNetwork(allowedArg.includes(valueArg));
|
|
32
59
|
return valueArg;
|
|
@@ -72,12 +99,13 @@ const entryOf = (valueArg) => {
|
|
|
72
99
|
return valueArg.kind === 'lost' ? lossOf(valueArg) : lineOf(valueArg);
|
|
73
100
|
};
|
|
74
101
|
const batchOf = (valueArg) => {
|
|
75
|
-
const value = networkRecord(valueArg, ['assignmentId', 'attemptId', 'captureId', 'sequence', 'entries', 'final']);
|
|
102
|
+
const value = networkRecord(valueArg, ['assignmentId', 'attemptId', 'captureId', 'sequence', 'entries', 'final'], ['discardedCaptures']);
|
|
76
103
|
const entries = networkList(value.entries, runtimeAssignmentLogContract.maximumEntriesPerBatch, entryOf);
|
|
77
104
|
requireNetwork(typeof value.final === 'boolean' && (entries.length > 0 || value.final));
|
|
78
105
|
return {
|
|
79
106
|
assignmentId: networkId(value.assignmentId), attemptId: networkId(value.attemptId),
|
|
80
107
|
captureId: networkId(value.captureId), sequence: networkCounter(value.sequence), entries, final: value.final,
|
|
108
|
+
...(Object.hasOwn(value, 'discardedCaptures') ? { discardedCaptures: networkCounter(value.discardedCaptures) } : {}),
|
|
81
109
|
};
|
|
82
110
|
};
|
|
83
111
|
/** Detached exact-schema snapshot of one batch, bounded like a whole report. */
|
|
@@ -136,4 +164,4 @@ export const bindReportRuntimeAssignmentLogsResponse = (valueArg, requestArg) =>
|
|
|
136
164
|
&& response.sequence === batch.sequence);
|
|
137
165
|
return response;
|
|
138
166
|
});
|
|
139
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
167
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVudGltZWFzc2lnbm1lbnRsb2dzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vdHMvZGF0YS9ydW50aW1lYXNzaWdubWVudGxvZ3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLHlCQUF5QixFQUFFLHlCQUF5QixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFHOUYsT0FBTyxFQUFFLDZCQUE2QixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDcEUsT0FBTyxFQUNMLGNBQWMsRUFBRSxjQUFjLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsYUFBYSxFQUFFLGNBQWMsR0FDcEcsTUFBTSwrQkFBK0IsQ0FBQztBQUN2QyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQXVKdEY7Ozs7R0FJRztBQUNILE1BQU0sQ0FBQyxNQUFNLDRCQUE0QixHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUM7SUFDeEQsS0FBSyxFQUFFLDJDQUEyQztJQUNsRCxpR0FBaUc7SUFDakcsUUFBUSxFQUFFLGdEQUFnRDtJQUMxRDs7OztPQUlHO0lBQ0gsT0FBTyxFQUFFLDRCQUE0QjtJQUNyQzs7Ozs7OztPQU9HO0lBQ0gsb0JBQW9CLEVBQUUsRUFBRTtJQUN4Qjs7Ozs7T0FLRztJQUNILHdCQUF3QixFQUFFLG1CQUFtQixDQUFDLHVCQUF1QjtJQUNyRSxxQ0FBcUM7SUFDckMsc0JBQXNCLEVBQUUsSUFBSTtJQUM1Qiw4RkFBOEY7SUFDOUYscUJBQXFCLEVBQUUsTUFBTTtJQUM3Qjs7O09BR0c7SUFDSCwyQkFBMkIsRUFBRSxTQUFTO0NBQzlCLENBQUMsQ0FBQztBQUVaLE1BQU0sSUFBSSxHQUFHLEdBQVUsRUFBRSxHQUFHLE1BQU0sSUFBSSxLQUFLLENBQUMsNEJBQTRCLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbkYsTUFBTSxJQUFJLEdBQUcsQ0FBSSxZ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
|
|
@@ -112,6 +112,7 @@ export declare const runtimeConfigContract: Readonly<{
|
|
|
112
112
|
readonly maximumTargetPorts: 64;
|
|
113
113
|
readonly maximumReadinessDurationMs: 3600000;
|
|
114
114
|
readonly maximumLogRetentionMs: 31536000000;
|
|
115
|
+
readonly maximumLogBufferedBytes: 67108864;
|
|
115
116
|
}>;
|
|
116
117
|
/**
|
|
117
118
|
* Detached exact-schema snapshot for synchronous persistence assertions. Digest
|
|
@@ -9,6 +9,7 @@ export const runtimeConfigContract = Object.freeze({
|
|
|
9
9
|
maximumTargetPorts: 64,
|
|
10
10
|
maximumReadinessDurationMs: runtimePolicyLimits.maximumReadinessDurationMs,
|
|
11
11
|
maximumLogRetentionMs: runtimePolicyLimits.maximumLogRetentionMs,
|
|
12
|
+
maximumLogBufferedBytes: runtimePolicyLimits.maximumLogBufferedBytes,
|
|
12
13
|
});
|
|
13
14
|
const fail = (messageArg) => { throw new Error(messageArg); };
|
|
14
15
|
const encoder = new TextEncoder();
|
|
@@ -212,4 +213,4 @@ export const bindRuntimeConfigToAssignment = async (configArg, assignmentArg) =>
|
|
|
212
213
|
fail('runtime config lacks exact assignment platform evidence');
|
|
213
214
|
return { config, assignment, platformEvidence };
|
|
214
215
|
};
|
|
215
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVudGltZWNvbmZpZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3RzL2RhdGEvcnVudGltZWNvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFLQSxPQUFPLEVBQ0wsK0JBQStCLEVBQy9CLGNBQWMsRUFDZCxvQ0FBb0MsRUFDcEMsd0NBQXdDLEdBQ3pDLE1BQU0scUJBQXFCLENBQUM7QUFFN0IsT0FBTyxFQUFFLHlCQUF5QixFQUFFLHlCQUF5QixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDOUYsT0FBTyxFQUFFLHNCQUFzQixFQUFFLDRCQUE0QixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDbkcsT0FBTyxFQUNMLHNCQUFzQixFQUFFLGdCQUFnQixFQUFFLGFBQWEsRUFBRSxrQkFBa0IsRUFBRSx1QkFBdUIsRUFDcEcsa0JBQWtCLEVBQUUsb0JBQW9CLEVBQUUsaUJBQWlCLEVBQUUsbUJBQW1CLEdBQ2pGLE1BQU0sNkJBQTZCLENBQUM7QUErR3JDLE1BQU0sQ0FBQyxNQUFNLHFCQUFxQixHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUM7SUFDakQsWUFBWSxFQUFFLDJCQUEyQjtJQUN6QyxxQkFBcUIsRUFBRSxPQUFPO0lBQzlCLHlCQUF5QixFQUFFLEdBQUc7SUFDOUIsa0JBQWtCLEVBQUUsRUFBRTtJQUN0QiwwQkFBMEIsRUFBRSxtQkFBbUIsQ0FBQywwQkFBMEI7SUFDMUUscUJBQXFCLEVBQUUsbUJBQW1CLENBQUMscUJBQXFCO0NBQ3hELENBQUMsQ0FBQztBQUVaLE1BQU0sSUFBSSxHQUFrQyxDQUFDLFVBQVUsRUFBRSxFQUFFLEdBQUcsTUFBTSxJQUFJLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM3RixNQUFNLE9BQU8sR0FBRyxJQUFJLFdBQVcsRUFBRSxDQUFDO0FBQ2xDLE1BQU0sWUFBWSxHQUFHLENBQUMsUUFBaUIsRUFBc0IsRUFBRSxDQUM3RCxPQUFPLFFBQVEsS0FBSyxRQUFR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
|
|
216
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVudGltZWNvbmZpZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3RzL2RhdGEvcnVudGltZWNvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFLQSxPQUFPLEVBQ0wsK0JBQStCLEVBQy9CLGNBQWMsRUFDZCxvQ0FBb0MsRUFDcEMsd0NBQXdDLEdBQ3pDLE1BQU0scUJBQXFCLENBQUM7QUFFN0IsT0FBTyxFQUFFLHlCQUF5QixFQUFFLHlCQUF5QixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDOUYsT0FBTyxFQUFFLHNCQUFzQixFQUFFLDRCQUE0QixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDbkcsT0FBTyxFQUNMLHNCQUFzQixFQUFFLGdCQUFnQixFQUFFLGFBQWEsRUFBRSxrQkFBa0IsRUFBRSx1QkFBdUIsRUFDcEcsa0JBQWtCLEVBQUUsb0JBQW9CLEVBQUUsaUJBQWlCLEVBQUUsbUJBQW1CLEdBQ2pGLE1BQU0sNkJBQTZCLENBQUM7QUErR3JDLE1BQU0sQ0FBQyxNQUFNLHFCQUFxQixHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUM7SUFDakQsWUFBWSxFQUFFLDJCQUEyQjtJQUN6QyxxQkFBcUIsRUFBRSxPQUFPO0lBQzlCLHlCQUF5QixFQUFFLEdBQUc7SUFDOUIsa0JBQWtCLEVBQUUsRUFBRTtJQUN0QiwwQkFBMEIsRUFBRSxtQkFBbUIsQ0FBQywwQkFBMEI7SUFDMUUscUJBQXFCLEVBQUUsbUJBQW1CLENBQUMscUJBQXFCO0lBQ2hFLHVCQUF1QixFQUFFLG1CQUFtQixDQUFDLHVCQUF1QjtDQUM1RCxDQUFDLENBQUM7QUFFWixNQUFNLElBQUksR0FBa0MsQ0FBQyxVQUFVLEVBQUUsRUFBRSxHQUFHLE1BQU0sSUFBSSxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDN0YsTUFBTSxPQUFPLEdBQUcsSUFBSSxXQUFXLEVBQUUsQ0FBQztBQUNsQyxNQUFNLFlBQVksR0FBRyxDQUFDLFFBQWlC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
|
|
@@ -14,6 +14,8 @@ export declare const runtimePolicyLimits: Readonly<{
|
|
|
14
14
|
readonly maximumIdentityNumber: number;
|
|
15
15
|
readonly maximumReadinessDurationMs: 3600000;
|
|
16
16
|
readonly maximumLogRetentionMs: 31536000000;
|
|
17
|
+
/** The largest `logs.maximumBufferedBytes`; a node's ended captures share the same bound. */
|
|
18
|
+
readonly maximumLogBufferedBytes: 67108864;
|
|
17
19
|
}>;
|
|
18
20
|
export type TRuntimePolicyFailure = (messageArg: string) => never;
|
|
19
21
|
export declare const isBoundedInteger: (valueArg: unknown, minimumArg: number, maximumArg: number) => valueArg is number;
|
|
@@ -13,6 +13,8 @@ export const runtimePolicyLimits = Object.freeze({
|
|
|
13
13
|
maximumIdentityNumber: 2 ** 31 - 1,
|
|
14
14
|
maximumReadinessDurationMs: 3_600_000,
|
|
15
15
|
maximumLogRetentionMs: 31_536_000_000,
|
|
16
|
+
/** The largest `logs.maximumBufferedBytes`; a node's ended captures share the same bound. */
|
|
17
|
+
maximumLogBufferedBytes: 67_108_864,
|
|
16
18
|
});
|
|
17
19
|
export const isBoundedInteger = (valueArg, minimumArg, maximumArg) => typeof valueArg === 'number' && Number.isSafeInteger(valueArg) && !Object.is(valueArg, -0)
|
|
18
20
|
&& valueArg >= minimumArg && valueArg <= maximumArg;
|
|
@@ -29,7 +31,7 @@ export const isRuntimeMemoryBytes = (valueArg) => isBoundedInteger(valueArg, run
|
|
|
29
31
|
export const isRuntimeIdentityNumber = (valueArg) => isBoundedInteger(valueArg, 0, runtimePolicyLimits.maximumIdentityNumber);
|
|
30
32
|
export const isRuntimeLogPolicy = (valueArg) => isExactRecord(valueArg, ['maximumLineBytes', 'maximumBufferedBytes', 'retentionMs'])
|
|
31
33
|
&& isBoundedInteger(valueArg.maximumLineBytes, 1, 1_048_576)
|
|
32
|
-
&& isBoundedInteger(valueArg.maximumBufferedBytes, 1,
|
|
34
|
+
&& isBoundedInteger(valueArg.maximumBufferedBytes, 1, runtimePolicyLimits.maximumLogBufferedBytes)
|
|
33
35
|
&& valueArg.maximumBufferedBytes >= valueArg.maximumLineBytes
|
|
34
36
|
&& isBoundedInteger(valueArg.retentionMs, 1, runtimePolicyLimits.maximumLogRetentionMs);
|
|
35
37
|
const timingKeys = ['initialDelayMs', 'startupGraceMs', 'intervalMs', 'timeoutMs',
|
|
@@ -87,4 +89,4 @@ export const assertRuntimeReadiness = (valueArg, selectsTcpTargetArg, failArg) =
|
|
|
87
89
|
previousCode = code;
|
|
88
90
|
}
|
|
89
91
|
};
|
|
90
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
92
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVudGltZXBvbGljeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3RzL3ByaXZhdGUvcnVudGltZXBvbGljeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQTs7Ozs7OztHQU9HO0FBQ0gsTUFBTSxDQUFDLE1BQU0sbUJBQW1CLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQztJQUMvQyxrQkFBa0IsRUFBRSxFQUFFLEdBQUcsSUFBSSxHQUFHLElBQUk7SUFDcEMsa0JBQWtCLEVBQUUsQ0FBQyxJQUFJLEVBQUU7SUFDM0IsZ0JBQWdCLEVBQUUsU0FBUztJQUMzQixxQkFBcUIsRUFBRSxDQUFDLElBQUksRUFBRSxHQUFHLENBQUM7SUFDbEMsMEJBQTBCLEVBQUUsU0FBUztJQUNyQyxxQkFBcUIsRUFBRSxjQUFjO0lBQ3JDLDZGQUE2RjtJQUM3Rix1QkFBdUIsRUFBRSxVQUFVO0NBQzNCLENBQUMsQ0FBQztBQUlaLE1BQU0sQ0FBQyxNQUFNLGdCQUFnQixHQUFHLENBQUMsUUFBaUIsRUFBRSxVQUFrQixFQUFFLFVBQWtCLEVBQXNCLEVBQUUsQ0FDaEgsT0FBTyxRQUFRLEtBQUssUUFBUSxJQUFJLE1BQU0sQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQztPQUN2RixRQUFRLElBQUksVUFBVSxJQUFJLFFBQVEsSUFBSSxVQUFVLENBQUM7QUFDdEQsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQUcsQ0FBQyxRQUFpQixFQUFzQixFQUFFLENBQ3pFLE9BQU8sUUFBUSxLQUFLLFFBQVEsSUFBSSw2QkFBNkIsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDL0UsTUFBTSxDQUFDLE1BQU0sYUFBYSxHQUFHLENBQzNCLFFBQWlCLEVBQUUsT0FBMEIsRUFDUixFQUFFO0lBQ3ZDLElBQUksQ0FBQyxRQUFRLElBQUksT0FBTyxRQUFRLEtBQUss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
|
package/package.json
CHANGED
package/readme.md
CHANGED
|
@@ -1241,7 +1241,8 @@ pushes one `IRuntimeAssignmentLogBatch { assignmentId, attemptId, captureId, seq
|
|
|
1241
1241
|
final }` from the node to its controller. Logs are the controller's to keep
|
|
1242
1242
|
(`IRuntimeConfig.logs`); the node's capture files are disposable transport artifacts, so the node
|
|
1243
1243
|
pushes and the controller persists. The node discards a batch only after the controller
|
|
1244
|
-
acknowledged it, and sends the next one only then.
|
|
1244
|
+
acknowledged it, and sends the next one only then. Two rules below let it discard more: a
|
|
1245
|
+
`not-kept` answer, and its bound on ended captures awaiting acknowledgement.
|
|
1245
1246
|
|
|
1246
1247
|
- `entries` are in capture order. A `line` entry `{ stream, timestampNs, text, partial }` is one
|
|
1247
1248
|
piece of one line: `text` holds no `\n`, invalid UTF-8 becomes U+FFFD, and a line longer than
|
|
@@ -1250,17 +1251,70 @@ acknowledged it, and sends the next one only then.
|
|
|
1250
1251
|
- A `lost` entry `{ reason, stream, timestampNs, bytes, lines }` is evidence of output that did not
|
|
1251
1252
|
arrive, placed where it was lost: `buffer-overflow` (the node's buffer reached
|
|
1252
1253
|
`logs.maximumBufferedBytes` and it dropped the oldest bytes), `line-cut` (the rest of a line
|
|
1253
|
-
beyond `maximumLineBytes`, right after that line's last piece), `capture-restart
|
|
1254
|
-
`not-captured` (a container started without capture)
|
|
1254
|
+
beyond `maximumLineBytes`, right after that line's last piece), `capture-restart`,
|
|
1255
|
+
`not-captured` (a container started without capture) and `not-kept` (output the node dropped
|
|
1256
|
+
while its controller kept no logs). `capture-restart` and `not-captured` cannot know how much was
|
|
1255
1257
|
lost and state `bytes` and `lines` as `null`; the others count exactly.
|
|
1256
|
-
- `captureId` names one capture of the attempt. `sequence` counts that capture's batches from 1
|
|
1257
|
-
|
|
1258
|
-
|
|
1259
|
-
nanoseconds since the Unix epoch
|
|
1260
|
-
|
|
1261
|
-
|
|
1262
|
-
|
|
1263
|
-
|
|
1258
|
+
- `captureId` names one capture of the attempt. `sequence` counts that capture's batches from 1,
|
|
1259
|
+
and a number once sent is never sent again with other content (below). `final` states that the
|
|
1260
|
+
container is gone and its output drained; only a final batch may be empty. A report is at most 1 024
|
|
1261
|
+
entries and one mebibyte of canonical JSON, and timestamps are nanoseconds since the Unix epoch
|
|
1262
|
+
as decimal digits.
|
|
1263
|
+
- `discardedCaptures`, optional, is node-level loss evidence carried by whichever batch the node
|
|
1264
|
+
creates next: how many ended captures it discarded whole, under its ended-capture bound or a
|
|
1265
|
+
`not-kept` answer (below), since it last stated a count. It is absent for none and at least 1
|
|
1266
|
+
when stated.
|
|
1267
|
+
|
|
1268
|
+
The answer `{ status, assignmentId, captureId, sequence }` (`TRuntimeAssignmentLogsStatus`) is
|
|
1269
|
+
`accepted`, `replay` for a batch the controller already holds, or `not-kept` from a controller that
|
|
1270
|
+
keeps no workload logs: it holds nothing, and the node sends no more batches on that session (a
|
|
1271
|
+
later session may be answered differently). A controller answers every batch with one of the
|
|
1272
|
+
three and never leaves the method unhandled, so a node tells a controller that keeps no logs from
|
|
1273
|
+
a failure worth retrying. A controller must therefore handle the method before a node that
|
|
1274
|
+
captures logs runs against it. Likewise, a receiver on interfaces 32.37.0 or earlier reads a batch
|
|
1275
|
+
by its exact schema and refuses one that carries `discardedCaptures` or a `not-kept` loss, on every
|
|
1276
|
+
retry: controllers must run a later interfaces release before any node sends either.
|
|
1277
|
+
|
|
1278
|
+
A sequence number, once sent, is never sent again with other content; a retry resends the batch
|
|
1279
|
+
unchanged, its `discardedCaptures` included. Reuse would lose data silently: a controller that
|
|
1280
|
+
stored the batch while its acknowledgement was lost answers `replay` and drops the new content
|
|
1281
|
+
with its loss evidence. So when the node drops a running capture's batch it sent that is still
|
|
1282
|
+
unacknowledged, which only `not-kept` permits, the next batch it sends of that capture takes a higher number it never
|
|
1283
|
+
sent and opens with a `not-kept` loss that counts what was dropped. A controller that holds the
|
|
1284
|
+
dropped batch sees no gap, and that loss also counts content it holds.
|
|
1285
|
+
|
|
1286
|
+
The controller never refuses a batch for a gap in `sequence`. Every gap the node leaves by
|
|
1287
|
+
discarding carries evidence: the batch after skipped numbers opens with a `not-kept` loss, and a
|
|
1288
|
+
capture discarded whole is counted in `discardedCaptures`. A gap before a batch that opens with a
|
|
1289
|
+
`not-kept` loss is therefore the node's discard, which that loss counts; a gap before any other
|
|
1290
|
+
batch is the controller's own loss, which it records. A capture whose final batch never arrives
|
|
1291
|
+
leaves no gap to read: it may still be running, and one discarded whole is counted, never named.
|
|
1292
|
+
|
|
1293
|
+
`not-kept` is the node's permission to discard for the session that answered it. The node may
|
|
1294
|
+
discard every ended capture completely, content and identity, and each capture that ends later
|
|
1295
|
+
while the answer stands, counting them in `discardedCaptures`. A running capture stays within
|
|
1296
|
+
`logs.maximumBufferedBytes` (overflow is a `buffer-overflow` loss), or the node drops its output,
|
|
1297
|
+
a sent and unacknowledged batch included. A later session that keeps logs receives each running
|
|
1298
|
+
capture from where it stands, after a `not-kept` loss that counts what was dropped.
|
|
1299
|
+
|
|
1300
|
+
While a controller is away or slow, ended captures wait for their final batch to be acknowledged,
|
|
1301
|
+
and a crash-looping workload ends one per restart. A node therefore keeps at most
|
|
1302
|
+
`runtimeAssignmentLogContract.maximumEndedCaptures` (64) ended captures awaiting acknowledgement,
|
|
1303
|
+
holding at most `maximumEndedCaptureBytes` (64 MiB, the largest `logs.maximumBufferedBytes` a
|
|
1304
|
+
config may set, `runtimeConfigContract.maximumLogBufferedBytes`, so one capture always fits)
|
|
1305
|
+
together. Past either bound it discards the oldest
|
|
1306
|
+
ended captures completely and counts them in the next batch's `discardedCaptures`. It does not name
|
|
1307
|
+
them: remembering them would grow without bound while the controller is away. The batch is the
|
|
1308
|
+
unit of retry for the count: a batch the node discards unacknowledged passes its count on to the
|
|
1309
|
+
next batch, so a count whose acknowledgement was lost may arrive again inside a later one.
|
|
1310
|
+
|
|
1311
|
+
The count belongs to the node, not to the assignment, attempt or capture of the batch that carries
|
|
1312
|
+
it. A controller that keeps logs records it against the node and the session the batch arrived on,
|
|
1313
|
+
once for each batch it accepts and never for a batch it answers `replay`. Counts are not
|
|
1314
|
+
idempotent: a lost acknowledgement can repeat a count, so their sum may exceed the captures
|
|
1315
|
+
discarded. A controller that keeps no logs does nothing with the count beyond answering
|
|
1316
|
+
`not-kept`; the node keeps it for a later session.
|
|
1317
|
+
|
|
1264
1318
|
`bindReportRuntimeAssignmentLogsRequest(request, assignment, logPolicy, trustedSession)` checks the
|
|
1265
1319
|
session, that the assignment is this node's and carries the batch's attempt, and every line's
|
|
1266
1320
|
joined length against the policy. `bindReportRuntimeAssignmentLogsResponse(response, request)`
|
package/ts/00_commitinfo_data.ts
CHANGED
|
@@ -6,7 +6,7 @@ import { snapshotRuntimeSessionBinding } from './runtimesession.js';
|
|
|
6
6
|
import {
|
|
7
7
|
captureNetwork, networkCounter, networkEqual, networkId, networkList, networkRecord, requireNetwork,
|
|
8
8
|
} from '../private/networkcontract.js';
|
|
9
|
-
import { isRuntimeLogPolicy } from '../private/runtimepolicy.js';
|
|
9
|
+
import { isRuntimeLogPolicy, runtimePolicyLimits } from '../private/runtimepolicy.js';
|
|
10
10
|
|
|
11
11
|
/** The container output a log line was written to. */
|
|
12
12
|
export type TRuntimeAssignmentLogStream = 'stdout' | 'stderr';
|
|
@@ -39,9 +39,14 @@ export interface IRuntimeAssignmentLogLine {
|
|
|
39
39
|
* - `capture-restart`: the node's capture restarted without its buffer, for example after a reboot
|
|
40
40
|
* emptied its disposable capture directory; how much was lost is unknown;
|
|
41
41
|
* - `not-captured`: the container was started without output capture, so none of its output is
|
|
42
|
-
* available; how much there was is unknown
|
|
42
|
+
* available; how much there was is unknown;
|
|
43
|
+
* - `not-kept`: the node dropped this output while its controller kept no logs. Once a session
|
|
44
|
+
* answered `not-kept`, the node may drop a running capture's output instead of holding it,
|
|
45
|
+
* including a batch it sent that is still unacknowledged; a later session that keeps logs
|
|
46
|
+
* receives the capture from where it stands, after this loss.
|
|
43
47
|
*/
|
|
44
|
-
export type TRuntimeAssignmentLogLossReason =
|
|
48
|
+
export type TRuntimeAssignmentLogLossReason =
|
|
49
|
+
| 'buffer-overflow' | 'line-cut' | 'capture-restart' | 'not-captured' | 'not-kept';
|
|
45
50
|
|
|
46
51
|
/**
|
|
47
52
|
* Evidence of output that was lost, in the position of the stream where it was lost.
|
|
@@ -49,8 +54,8 @@ export type TRuntimeAssignmentLogLossReason = 'buffer-overflow' | 'line-cut' | '
|
|
|
49
54
|
* `bytes` and `lines` count exactly what was dropped; both are `null` for `capture-restart` and
|
|
50
55
|
* `not-captured`, whose extent the node cannot know, and both are stated for the other reasons.
|
|
51
56
|
* A `line-cut` counts the cut bytes and no line, because the line itself was delivered; it names
|
|
52
|
-
* the stream of that line. A `buffer-overflow` counts the dropped bytes and the
|
|
53
|
-
* them, and names a stream only when every dropped byte came from it.
|
|
57
|
+
* the stream of that line. A `buffer-overflow` or `not-kept` loss counts the dropped bytes and the
|
|
58
|
+
* whole lines among them, and names a stream only when every dropped byte came from it.
|
|
54
59
|
*/
|
|
55
60
|
export interface IRuntimeAssignmentLogLoss {
|
|
56
61
|
kind: 'lost';
|
|
@@ -69,10 +74,23 @@ export type TRuntimeAssignmentLogEntry = IRuntimeAssignmentLogLine | IRuntimeAss
|
|
|
69
74
|
*
|
|
70
75
|
* `captureId` names one capture of the attempt on its node: the node starts a new capture, with a
|
|
71
76
|
* new id and `sequence` 1, whenever it cannot continue the previous one, and opens it with a
|
|
72
|
-
* `capture-restart` loss. Within a capture `sequence` counts batches from 1
|
|
73
|
-
*
|
|
74
|
-
*
|
|
75
|
-
*
|
|
77
|
+
* `capture-restart` loss. Within a capture `sequence` counts batches from 1, and the node sends the
|
|
78
|
+
* next batch only after the controller acknowledged the previous one, so a batch is the one unit of
|
|
79
|
+
* retry. `final` states that no batch follows in this capture: the container is gone and its output
|
|
80
|
+
* is drained. Only a final batch may be empty.
|
|
81
|
+
*
|
|
82
|
+
* A sequence number, once sent, is never sent again with other content: a retry resends the batch
|
|
83
|
+
* unchanged, `discardedCaptures` included. Reusing a number would lose data silently, because a
|
|
84
|
+
* controller that stored the earlier batch while its acknowledgement was lost answers `replay` and
|
|
85
|
+
* drops the new content with its loss evidence. The node skips numbers only after dropping a
|
|
86
|
+
* running capture's batch it sent that is still unacknowledged, which only a `not-kept` answer
|
|
87
|
+
* permits: the next batch it
|
|
88
|
+
* sends of that capture takes a higher number it never sent and opens with a `not-kept` loss that
|
|
89
|
+
* counts what was dropped. Where the controller holds the dropped batch, because only its
|
|
90
|
+
* acknowledgement was lost, it sees no gap, and that loss also counts content it holds.
|
|
91
|
+
*
|
|
92
|
+
* `discardedCaptures` is node-level loss evidence, not part of this capture (see
|
|
93
|
+
* `runtimeAssignmentLogContract.maximumEndedCaptures`).
|
|
76
94
|
*/
|
|
77
95
|
export interface IRuntimeAssignmentLogBatch {
|
|
78
96
|
assignmentId: string;
|
|
@@ -81,6 +99,24 @@ export interface IRuntimeAssignmentLogBatch {
|
|
|
81
99
|
sequence: number;
|
|
82
100
|
entries: TRuntimeAssignmentLogEntry[];
|
|
83
101
|
final: boolean;
|
|
102
|
+
/**
|
|
103
|
+
* How many ended captures the node discarded whole and unacknowledged since it last stated a
|
|
104
|
+
* count: past its ended-capture bound, or while a `not-kept` answer stood. The node states the
|
|
105
|
+
* count on the next batch it creates, of any capture, and counts afresh from there. The batch is
|
|
106
|
+
* then the unit of retry for the count: if the node discards that batch unacknowledged, the count
|
|
107
|
+
* passes on to the next batch, so a count whose acknowledgement was lost may reach the controller
|
|
108
|
+
* again inside a later count. It never names the discarded captures, because remembering them
|
|
109
|
+
* would grow without bound while the controller is away. Absent means none; stated, it is at
|
|
110
|
+
* least 1.
|
|
111
|
+
*
|
|
112
|
+
* The count belongs to the node, not to the assignment, attempt or capture of the batch that
|
|
113
|
+
* carries it. A controller that keeps logs records it against the node and the session the batch
|
|
114
|
+
* arrived on, once for each batch it accepts and never for a batch it answers `replay`, which it
|
|
115
|
+
* recorded when it accepted it. Counts are not idempotent: a lost acknowledgement can repeat a
|
|
116
|
+
* count, so their sum may exceed the captures discarded. A controller that keeps no logs does
|
|
117
|
+
* nothing with the count beyond answering `not-kept`; the node keeps it for a later session.
|
|
118
|
+
*/
|
|
119
|
+
discardedCaptures?: number;
|
|
84
120
|
}
|
|
85
121
|
|
|
86
122
|
/** Pallet push over its current authenticated session. */
|
|
@@ -90,21 +126,68 @@ export interface IReportRuntimeAssignmentLogsRequest {
|
|
|
90
126
|
}
|
|
91
127
|
|
|
92
128
|
/**
|
|
93
|
-
*
|
|
94
|
-
*
|
|
95
|
-
*
|
|
129
|
+
* How a controller answers one batch.
|
|
130
|
+
*
|
|
131
|
+
* - `accepted`: it holds the batch durably;
|
|
132
|
+
* - `replay`: it already holds this batch and does not store it again;
|
|
133
|
+
* - `not-kept`: it keeps no workload logs. It holds nothing, and the node sends no more batches on
|
|
134
|
+
* this session; a later session may be answered differently. The answer is the node's permission
|
|
135
|
+
* to discard for that session: it may discard every ended capture completely, its content and
|
|
136
|
+
* identity, and each capture that ends later while the answer stands, counting them in
|
|
137
|
+
* `discardedCaptures`. A running capture stays within `logs.maximumBufferedBytes`, whose overflow
|
|
138
|
+
* is a `buffer-overflow` loss, or the node drops its output, a sent and unacknowledged batch
|
|
139
|
+
* included, and states a `not-kept` loss where delivery resumes.
|
|
140
|
+
*
|
|
141
|
+
* A controller answers every batch with one of these; it never leaves the method unhandled, so a
|
|
142
|
+
* node can tell a controller that keeps no logs from a failure worth retrying. It never refuses a
|
|
143
|
+
* batch for a gap in `sequence`. Every gap the node leaves by discarding carries evidence: the
|
|
144
|
+
* batch after numbers it skipped opens with a `not-kept` loss (see `IRuntimeAssignmentLogBatch`),
|
|
145
|
+
* and a capture it discarded whole is counted in `discardedCaptures`. A controller therefore reads
|
|
146
|
+
* a gap before a batch that opens with a `not-kept` loss as the node's discard, which that loss
|
|
147
|
+
* counts, and a gap before any other batch as its own loss, which it records. A capture whose
|
|
148
|
+
* final batch never arrives leaves no gap to read: it may still be running, and one discarded whole
|
|
149
|
+
* is counted but never named.
|
|
96
150
|
*/
|
|
151
|
+
export type TRuntimeAssignmentLogsStatus = 'accepted' | 'replay' | 'not-kept';
|
|
152
|
+
|
|
97
153
|
export interface IReportRuntimeAssignmentLogsResponse {
|
|
98
|
-
status:
|
|
154
|
+
status: TRuntimeAssignmentLogsStatus;
|
|
99
155
|
assignmentId: string;
|
|
100
156
|
captureId: string;
|
|
101
157
|
sequence: number;
|
|
102
158
|
}
|
|
103
159
|
|
|
160
|
+
/**
|
|
161
|
+
* Rollout: a receiver on interfaces 32.37.0 or earlier reads a batch by its exact schema and
|
|
162
|
+
* refuses one that carries `discardedCaptures` or a `not-kept` loss, on every retry. A controller
|
|
163
|
+
* must therefore run a later release before any node sends either.
|
|
164
|
+
*/
|
|
104
165
|
export const runtimeAssignmentLogContract = Object.freeze({
|
|
105
166
|
error: 'Runtime assignment log contract rejected.',
|
|
106
167
|
/** Pallet pushes; the controller persists metadata and payloads and acknowledges by sequence. */
|
|
107
168
|
delivery: 'node-pushes-controller-acknowledges-each-batch',
|
|
169
|
+
/**
|
|
170
|
+
* A controller that keeps no logs answers `not-kept`, and the node stops for that session. It may
|
|
171
|
+
* then discard ended captures completely, counted in `discardedCaptures`, and drop running
|
|
172
|
+
* output, stated as a `not-kept` loss.
|
|
173
|
+
*/
|
|
174
|
+
notKept: 'node-stops-for-the-session',
|
|
175
|
+
/**
|
|
176
|
+
* The most ended captures a node keeps awaiting acknowledgement, while its controller is away or
|
|
177
|
+
* slow. An ended capture holds its buffer, cursor record and waiting batch in the node's RAM-backed
|
|
178
|
+
* runtime directory, and a crash-looping workload ends one per restart; 64 covers a burst of
|
|
179
|
+
* restarts across the node's workloads before any of them loses its tail. Past this bound, or past
|
|
180
|
+
* `maximumEndedCaptureBytes`, the node discards the oldest ended captures completely and counts
|
|
181
|
+
* them in the next batch's `discardedCaptures`.
|
|
182
|
+
*/
|
|
183
|
+
maximumEndedCaptures: 64,
|
|
184
|
+
/**
|
|
185
|
+
* The most bytes all ended captures awaiting acknowledgement hold together, measured as the node
|
|
186
|
+
* measures its `logs.maximumBufferedBytes` buffer. It equals the largest buffer a runtime config
|
|
187
|
+
* may set (`runtimeConfigContract.maximumLogBufferedBytes`), so one capture always fits whole, and
|
|
188
|
+
* it keeps the node's RAM-backed runtime directory from growing with the number of restarts.
|
|
189
|
+
*/
|
|
190
|
+
maximumEndedCaptureBytes: runtimePolicyLimits.maximumLogBufferedBytes,
|
|
108
191
|
/** The most entries in one batch. */
|
|
109
192
|
maximumEntriesPerBatch: 1024,
|
|
110
193
|
/** The most UTF-8 bytes of `text` in one entry; a longer line travels as `partial` pieces. */
|
|
@@ -120,8 +203,8 @@ const fail = (): never => { throw new Error(runtimeAssignmentLogContract.error);
|
|
|
120
203
|
const safe = <T>(operationArg: () => T): T => { try { return operationArg(); } catch { return fail(); } };
|
|
121
204
|
const encoder = new TextEncoder();
|
|
122
205
|
const streams = ['stdout', 'stderr'] as const;
|
|
123
|
-
const lossReasons = ['buffer-overflow', 'line-cut', 'capture-restart', 'not-captured'] as const;
|
|
124
|
-
const statuses = ['accepted', 'replay'] as const;
|
|
206
|
+
const lossReasons = ['buffer-overflow', 'line-cut', 'capture-restart', 'not-captured', 'not-kept'] as const;
|
|
207
|
+
const statuses = ['accepted', 'replay', 'not-kept'] as const;
|
|
125
208
|
|
|
126
209
|
const literalOf = <TLiteral extends string>(valueArg: unknown, allowedArg: readonly TLiteral[]): TLiteral => {
|
|
127
210
|
requireNetwork((allowedArg as readonly unknown[]).includes(valueArg));
|
|
@@ -172,12 +255,15 @@ const entryOf = (valueArg: unknown): TRuntimeAssignmentLogEntry => {
|
|
|
172
255
|
};
|
|
173
256
|
|
|
174
257
|
const batchOf = (valueArg: unknown): IRuntimeAssignmentLogBatch => {
|
|
175
|
-
const value = networkRecord(
|
|
258
|
+
const value = networkRecord(
|
|
259
|
+
valueArg, ['assignmentId', 'attemptId', 'captureId', 'sequence', 'entries', 'final'], ['discardedCaptures'],
|
|
260
|
+
);
|
|
176
261
|
const entries = networkList(value.entries, runtimeAssignmentLogContract.maximumEntriesPerBatch, entryOf);
|
|
177
262
|
requireNetwork(typeof value.final === 'boolean' && (entries.length > 0 || value.final));
|
|
178
263
|
return {
|
|
179
264
|
assignmentId: networkId(value.assignmentId), attemptId: networkId(value.attemptId),
|
|
180
265
|
captureId: networkId(value.captureId), sequence: networkCounter(value.sequence), entries, final: value.final,
|
|
266
|
+
...(Object.hasOwn(value, 'discardedCaptures') ? { discardedCaptures: networkCounter(value.discardedCaptures) } : {}),
|
|
181
267
|
};
|
|
182
268
|
};
|
|
183
269
|
|
package/ts/data/runtimeconfig.ts
CHANGED
|
@@ -133,6 +133,7 @@ export const runtimeConfigContract = Object.freeze({
|
|
|
133
133
|
maximumTargetPorts: 64,
|
|
134
134
|
maximumReadinessDurationMs: runtimePolicyLimits.maximumReadinessDurationMs,
|
|
135
135
|
maximumLogRetentionMs: runtimePolicyLimits.maximumLogRetentionMs,
|
|
136
|
+
maximumLogBufferedBytes: runtimePolicyLimits.maximumLogBufferedBytes,
|
|
136
137
|
} as const);
|
|
137
138
|
|
|
138
139
|
const fail: (messageArg: string) => never = (messageArg) => { throw new Error(messageArg); };
|
|
@@ -15,6 +15,8 @@ export const runtimePolicyLimits = Object.freeze({
|
|
|
15
15
|
maximumIdentityNumber: 2 ** 31 - 1,
|
|
16
16
|
maximumReadinessDurationMs: 3_600_000,
|
|
17
17
|
maximumLogRetentionMs: 31_536_000_000,
|
|
18
|
+
/** The largest `logs.maximumBufferedBytes`; a node's ended captures share the same bound. */
|
|
19
|
+
maximumLogBufferedBytes: 67_108_864,
|
|
18
20
|
} as const);
|
|
19
21
|
|
|
20
22
|
export type TRuntimePolicyFailure = (messageArg: string) => never;
|
|
@@ -43,7 +45,7 @@ export const isRuntimeIdentityNumber = (valueArg: unknown): valueArg is number =
|
|
|
43
45
|
export const isRuntimeLogPolicy = (valueArg: unknown): valueArg is IRuntimeConfigLogPolicy =>
|
|
44
46
|
isExactRecord(valueArg, ['maximumLineBytes', 'maximumBufferedBytes', 'retentionMs'])
|
|
45
47
|
&& isBoundedInteger(valueArg.maximumLineBytes, 1, 1_048_576)
|
|
46
|
-
&& isBoundedInteger(valueArg.maximumBufferedBytes, 1,
|
|
48
|
+
&& isBoundedInteger(valueArg.maximumBufferedBytes, 1, runtimePolicyLimits.maximumLogBufferedBytes)
|
|
47
49
|
&& valueArg.maximumBufferedBytes >= valueArg.maximumLineBytes
|
|
48
50
|
&& isBoundedInteger(valueArg.retentionMs, 1, runtimePolicyLimits.maximumLogRetentionMs);
|
|
49
51
|
|