@caelo-cms/shared 0.11.4 → 0.11.6
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/ai-tools.d.ts +206 -2
- package/dist/ai-tools.d.ts.map +1 -1
- package/dist/ai-tools.js +23 -9
- package/dist/ai-tools.js.map +1 -1
- package/dist/change-journal.d.ts +71 -0
- package/dist/change-journal.d.ts.map +1 -0
- package/dist/change-journal.js +251 -0
- package/dist/change-journal.js.map +1 -0
- package/dist/content.d.ts +214 -0
- package/dist/content.d.ts.map +1 -1
- package/dist/content.js +29 -11
- package/dist/content.js.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/lists/fields.d.ts +5 -0
- package/dist/lists/fields.d.ts.map +1 -1
- package/dist/lists/fields.js +6 -1
- package/dist/lists/fields.js.map +1 -1
- package/dist/lists/list-type.d.ts.map +1 -1
- package/dist/lists/list-type.js +6 -3
- package/dist/lists/list-type.js.map +1 -1
- package/dist/lists/page-type.d.ts +1 -0
- package/dist/lists/page-type.d.ts.map +1 -1
- package/dist/lists/page-type.js +7 -0
- package/dist/lists/page-type.js.map +1 -1
- package/dist/live-events.d.ts +8 -4
- package/dist/live-events.d.ts.map +1 -1
- package/dist/live-events.js +18 -3
- package/dist/live-events.js.map +1 -1
- package/dist/media.d.ts +19 -0
- package/dist/media.d.ts.map +1 -1
- package/dist/media.js +16 -0
- package/dist/media.js.map +1 -1
- package/dist/phase-timer.d.ts +43 -2
- package/dist/phase-timer.d.ts.map +1 -1
- package/dist/phase-timer.js +170 -4
- package/dist/phase-timer.js.map +1 -1
- package/dist/pool-budget.d.ts +152 -0
- package/dist/pool-budget.d.ts.map +1 -0
- package/dist/pool-budget.js +151 -0
- package/dist/pool-budget.js.map +1 -0
- package/dist/themes-errors.js +1 -1
- package/dist/themes-errors.js.map +1 -1
- package/dist/version.d.ts +2 -2
- package/dist/version.js +1 -1
- package/package.json +1 -1
- package/src/ai-tools.ts +23 -8
- package/src/change-journal.ts +323 -0
- package/src/content.ts +32 -11
- package/src/index.ts +2 -0
- package/src/lists/fields.ts +7 -1
- package/src/lists/list-fixtures.test.ts +1 -0
- package/src/lists/list-type.ts +6 -2
- package/src/lists/lists.test.ts +1 -0
- package/src/lists/page-type.ts +7 -0
- package/src/live-events.ts +18 -3
- package/src/media.test.ts +31 -0
- package/src/media.ts +17 -0
- package/src/phase-timer.test.ts +37 -0
- package/src/phase-timer.ts +182 -4
- package/src/pool-budget.test.ts +111 -0
- package/src/pool-budget.ts +234 -0
- package/src/themes-errors.ts +1 -1
- package/src/version.ts +1 -1
package/dist/media.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"media.js","sourceRoot":"","sources":["../src/media.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"media.js","sourceRoot":"","sources":["../src/media.ts"],"names":[],"mappings":"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"}
|
package/dist/phase-timer.d.ts
CHANGED
|
@@ -7,20 +7,59 @@
|
|
|
7
7
|
* Laps instead of wrapped callbacks: `lap("x")` closes the step that ran
|
|
8
8
|
* since the previous lap, so a long function gets one line per boundary
|
|
9
9
|
* and keeps its control flow (early throws, shared locals) as it is.
|
|
10
|
+
*
|
|
11
|
+
* #1271 — with `{ memory: true }` every step also carries
|
|
12
|
+
* - the peak resident memory of the process while it ran (`peakRssMb`):
|
|
13
|
+
* sampled every {@link RSS_SAMPLE_MS} by one shared timer that runs only
|
|
14
|
+
* while a memory timer is open ({@link PhaseTimer.close}), plus a reading
|
|
15
|
+
* at every lap;
|
|
16
|
+
* - the CPU time the process spent in it (`cpuMs`, user + system, every
|
|
17
|
+
* thread of the process — zlib and the other runtime workers included).
|
|
18
|
+
* `cpuMs / ms` is the number of cores the step kept busy.
|
|
10
19
|
*/
|
|
11
20
|
import { z } from "zod";
|
|
12
21
|
/** One finished step: its name and how long it took, in whole milliseconds. */
|
|
13
22
|
export declare const phaseTimingSchema: z.ZodObject<{
|
|
14
23
|
phase: z.ZodString;
|
|
15
24
|
ms: z.ZodNumber;
|
|
25
|
+
peakRssMb: z.ZodOptional<z.ZodNumber>;
|
|
26
|
+
cpuMs: z.ZodOptional<z.ZodNumber>;
|
|
16
27
|
}, z.core.$strip>;
|
|
17
28
|
export type PhaseTiming = z.infer<typeof phaseTimingSchema>;
|
|
29
|
+
/** How often the open memory timers sample the resident set. */
|
|
30
|
+
export declare const RSS_SAMPLE_MS = 25;
|
|
31
|
+
/** What {@link PhaseTimer.measure} adds up for one repeated step. */
|
|
32
|
+
export interface PartTiming {
|
|
33
|
+
ms: number;
|
|
34
|
+
peakRssMb?: number;
|
|
35
|
+
cpuMs?: number;
|
|
36
|
+
}
|
|
18
37
|
export declare class PhaseTimer {
|
|
19
38
|
#private;
|
|
20
|
-
/**
|
|
21
|
-
|
|
39
|
+
/**
|
|
40
|
+
* @param now clock in milliseconds; injectable for tests.
|
|
41
|
+
* @param opts.memory record each step's peak RSS (see the file header);
|
|
42
|
+
* the timer must then be {@link close}d.
|
|
43
|
+
*/
|
|
44
|
+
constructor(now?: () => number, opts?: {
|
|
45
|
+
memory?: boolean;
|
|
46
|
+
});
|
|
47
|
+
/** A timer that records peak RSS per step (`new PhaseTimer(undefined, { memory: true })`). */
|
|
48
|
+
static withMemory(): PhaseTimer;
|
|
22
49
|
/** Close the step that ran since the previous lap (or construction) as `phase`. */
|
|
23
50
|
lap(phase: string): void;
|
|
51
|
+
/**
|
|
52
|
+
* Close the step since the previous lap as several phases measured
|
|
53
|
+
* inside it (`parts`, ms and peak each — e.g. the passes of every page
|
|
54
|
+
* batch summed), plus `rest` for whatever of the step they do not cover.
|
|
55
|
+
*/
|
|
56
|
+
lapParts(parts: ReadonlyMap<string, PartTiming>, rest: string): void;
|
|
57
|
+
/**
|
|
58
|
+
* Run `fn` and add its duration (and, for a memory timer, its peak RSS)
|
|
59
|
+
* to `into[phase]` — for steps that repeat per batch, summed by
|
|
60
|
+
* {@link lapParts}.
|
|
61
|
+
*/
|
|
62
|
+
measure<T>(into: Map<string, PartTiming>, phase: string, fn: () => Promise<T> | T): Promise<T>;
|
|
24
63
|
/**
|
|
25
64
|
* Append steps timed elsewhere (the generator subprocess, a publisher)
|
|
26
65
|
* as `<prefix>.<phase>`. They ran inside the current lap, so the lap that
|
|
@@ -32,5 +71,7 @@ export declare class PhaseTimer {
|
|
|
32
71
|
totalMs(): number;
|
|
33
72
|
/** The steps so far, in the order they finished. */
|
|
34
73
|
phases(): PhaseTiming[];
|
|
74
|
+
/** Stop sampling memory (a memory timer must be closed; idempotent). */
|
|
75
|
+
close(): void;
|
|
35
76
|
}
|
|
36
77
|
//# sourceMappingURL=phase-timer.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"phase-timer.d.ts","sourceRoot":"","sources":["../src/phase-timer.ts"],"names":[],"mappings":"AAEA
|
|
1
|
+
{"version":3,"file":"phase-timer.d.ts","sourceRoot":"","sources":["../src/phase-timer.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,+EAA+E;AAC/E,eAAO,MAAM,iBAAiB;;;;;iBAO5B,CAAC;AACH,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAE5D,gEAAgE;AAChE,eAAO,MAAM,aAAa,KAAK,CAAC;AA8ChC,qEAAqE;AACrE,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,qBAAa,UAAU;;IASrB;;;;OAIG;gBACS,GAAG,GAAE,MAAM,MAAgC,EAAE,IAAI,GAAE;QAAE,MAAM,CAAC,EAAE,OAAO,CAAA;KAAO;IAgBxF,8FAA8F;IAC9F,MAAM,CAAC,UAAU,IAAI,UAAU;IAI/B,mFAAmF;IACnF,GAAG,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAWxB;;;;OAIG;IACH,QAAQ,CAAC,KAAK,EAAE,WAAW,CAAC,MAAM,EAAE,UAAU,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI;IAwBpE;;;;OAIG;IACG,OAAO,CAAC,CAAC,EACb,IAAI,EAAE,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,EAC7B,KAAK,EAAE,MAAM,EACb,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,GACvB,OAAO,CAAC,CAAC,CAAC;IAwBb;;;;;OAKG;IACH,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,WAAW,EAAE,GAAG,IAAI;IAI7D,uCAAuC;IACvC,OAAO,IAAI,MAAM;IAIjB,oDAAoD;IACpD,MAAM,IAAI,WAAW,EAAE;IAIvB,wEAAwE;IACxE,KAAK,IAAI,IAAI;CAoBd"}
|
package/dist/phase-timer.js
CHANGED
|
@@ -8,30 +8,174 @@
|
|
|
8
8
|
* Laps instead of wrapped callbacks: `lap("x")` closes the step that ran
|
|
9
9
|
* since the previous lap, so a long function gets one line per boundary
|
|
10
10
|
* and keeps its control flow (early throws, shared locals) as it is.
|
|
11
|
+
*
|
|
12
|
+
* #1271 — with `{ memory: true }` every step also carries
|
|
13
|
+
* - the peak resident memory of the process while it ran (`peakRssMb`):
|
|
14
|
+
* sampled every {@link RSS_SAMPLE_MS} by one shared timer that runs only
|
|
15
|
+
* while a memory timer is open ({@link PhaseTimer.close}), plus a reading
|
|
16
|
+
* at every lap;
|
|
17
|
+
* - the CPU time the process spent in it (`cpuMs`, user + system, every
|
|
18
|
+
* thread of the process — zlib and the other runtime workers included).
|
|
19
|
+
* `cpuMs / ms` is the number of cores the step kept busy.
|
|
11
20
|
*/
|
|
12
21
|
import { z } from "zod";
|
|
13
22
|
/** One finished step: its name and how long it took, in whole milliseconds. */
|
|
14
23
|
export const phaseTimingSchema = z.object({
|
|
15
24
|
phase: z.string().min(1),
|
|
16
25
|
ms: z.number().int().nonnegative(),
|
|
26
|
+
/** #1271 — the process's peak resident memory during the step, in MiB. */
|
|
27
|
+
peakRssMb: z.number().int().nonnegative().optional(),
|
|
28
|
+
/** #1271 — CPU time (user + system, all threads) the process spent in the step, in ms. */
|
|
29
|
+
cpuMs: z.number().int().nonnegative().optional(),
|
|
17
30
|
});
|
|
31
|
+
/** How often the open memory timers sample the resident set. */
|
|
32
|
+
export const RSS_SAMPLE_MS = 25;
|
|
33
|
+
const MIB = 1024 * 1024;
|
|
34
|
+
/** Process CPU time so far (user + system), in ms; 0 where there is no process. */
|
|
35
|
+
function cpuNow() {
|
|
36
|
+
if (typeof process === "undefined" || typeof process.cpuUsage !== "function")
|
|
37
|
+
return 0;
|
|
38
|
+
const u = process.cpuUsage();
|
|
39
|
+
return (u.user + u.system) / 1000;
|
|
40
|
+
}
|
|
41
|
+
function rssNow() {
|
|
42
|
+
return typeof process !== "undefined" && typeof process.memoryUsage === "function"
|
|
43
|
+
? process.memoryUsage().rss
|
|
44
|
+
: 0;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* The one sampler of this process: its timer runs while at least one memory
|
|
48
|
+
* timer is open, and every open timer sees each sample.
|
|
49
|
+
*/
|
|
50
|
+
const sampler = (() => {
|
|
51
|
+
const listeners = new Set();
|
|
52
|
+
let timer = null;
|
|
53
|
+
return {
|
|
54
|
+
add(fn) {
|
|
55
|
+
listeners.add(fn);
|
|
56
|
+
if (timer === null) {
|
|
57
|
+
timer = setInterval(() => {
|
|
58
|
+
const rss = rssNow();
|
|
59
|
+
for (const l of listeners)
|
|
60
|
+
l(rss);
|
|
61
|
+
}, RSS_SAMPLE_MS);
|
|
62
|
+
// Never what keeps the process alive.
|
|
63
|
+
timer.unref?.();
|
|
64
|
+
}
|
|
65
|
+
},
|
|
66
|
+
remove(fn) {
|
|
67
|
+
listeners.delete(fn);
|
|
68
|
+
if (listeners.size === 0 && timer !== null) {
|
|
69
|
+
clearInterval(timer);
|
|
70
|
+
timer = null;
|
|
71
|
+
}
|
|
72
|
+
},
|
|
73
|
+
};
|
|
74
|
+
})();
|
|
18
75
|
export class PhaseTimer {
|
|
19
76
|
#now;
|
|
20
77
|
#phases = [];
|
|
21
78
|
#start;
|
|
79
|
+
#listener;
|
|
22
80
|
#last;
|
|
23
|
-
|
|
24
|
-
|
|
81
|
+
#peak = 0;
|
|
82
|
+
#lastCpu = 0;
|
|
83
|
+
/**
|
|
84
|
+
* @param now clock in milliseconds; injectable for tests.
|
|
85
|
+
* @param opts.memory record each step's peak RSS (see the file header);
|
|
86
|
+
* the timer must then be {@link close}d.
|
|
87
|
+
*/
|
|
88
|
+
constructor(now = () => performance.now(), opts = {}) {
|
|
25
89
|
this.#now = now;
|
|
26
90
|
this.#start = now();
|
|
27
91
|
this.#last = this.#start;
|
|
92
|
+
if (opts.memory) {
|
|
93
|
+
this.#peak = rssNow();
|
|
94
|
+
this.#lastCpu = cpuNow();
|
|
95
|
+
this.#listener = (rss) => {
|
|
96
|
+
if (rss > this.#peak)
|
|
97
|
+
this.#peak = rss;
|
|
98
|
+
};
|
|
99
|
+
sampler.add(this.#listener);
|
|
100
|
+
}
|
|
101
|
+
else {
|
|
102
|
+
this.#listener = null;
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
/** A timer that records peak RSS per step (`new PhaseTimer(undefined, { memory: true })`). */
|
|
106
|
+
static withMemory() {
|
|
107
|
+
return new PhaseTimer(undefined, { memory: true });
|
|
28
108
|
}
|
|
29
109
|
/** Close the step that ran since the previous lap (or construction) as `phase`. */
|
|
30
110
|
lap(phase) {
|
|
31
111
|
const t = this.#now();
|
|
32
|
-
this.#phases.push({
|
|
112
|
+
this.#phases.push({
|
|
113
|
+
phase,
|
|
114
|
+
ms: Math.round(t - this.#last),
|
|
115
|
+
...this.#takePeak(),
|
|
116
|
+
...this.#takeCpu(0),
|
|
117
|
+
});
|
|
33
118
|
this.#last = t;
|
|
34
119
|
}
|
|
120
|
+
/**
|
|
121
|
+
* Close the step since the previous lap as several phases measured
|
|
122
|
+
* inside it (`parts`, ms and peak each — e.g. the passes of every page
|
|
123
|
+
* batch summed), plus `rest` for whatever of the step they do not cover.
|
|
124
|
+
*/
|
|
125
|
+
lapParts(parts, rest) {
|
|
126
|
+
const t = this.#now();
|
|
127
|
+
const elapsed = t - this.#last;
|
|
128
|
+
let covered = 0;
|
|
129
|
+
let coveredCpu = 0;
|
|
130
|
+
for (const [phase, p] of parts) {
|
|
131
|
+
covered += p.ms;
|
|
132
|
+
coveredCpu += p.cpuMs ?? 0;
|
|
133
|
+
this.#phases.push({
|
|
134
|
+
phase,
|
|
135
|
+
ms: Math.round(p.ms),
|
|
136
|
+
...(p.peakRssMb !== undefined ? { peakRssMb: p.peakRssMb } : {}),
|
|
137
|
+
...(p.cpuMs !== undefined ? { cpuMs: Math.round(p.cpuMs) } : {}),
|
|
138
|
+
});
|
|
139
|
+
}
|
|
140
|
+
this.#phases.push({
|
|
141
|
+
phase: rest,
|
|
142
|
+
ms: Math.max(0, Math.round(elapsed - covered)),
|
|
143
|
+
...this.#takePeak(),
|
|
144
|
+
...this.#takeCpu(coveredCpu),
|
|
145
|
+
});
|
|
146
|
+
this.#last = t;
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* Run `fn` and add its duration (and, for a memory timer, its peak RSS)
|
|
150
|
+
* to `into[phase]` — for steps that repeat per batch, summed by
|
|
151
|
+
* {@link lapParts}.
|
|
152
|
+
*/
|
|
153
|
+
async measure(into, phase, fn) {
|
|
154
|
+
const peakBefore = this.#peak;
|
|
155
|
+
if (this.#listener)
|
|
156
|
+
this.#peak = rssNow();
|
|
157
|
+
const t0 = this.#now();
|
|
158
|
+
const cpu0 = this.#listener ? cpuNow() : 0;
|
|
159
|
+
try {
|
|
160
|
+
return await fn();
|
|
161
|
+
}
|
|
162
|
+
finally {
|
|
163
|
+
const prev = into.get(phase) ?? { ms: 0 };
|
|
164
|
+
const ms = prev.ms + (this.#now() - t0);
|
|
165
|
+
if (this.#listener) {
|
|
166
|
+
const peak = Math.max(this.#peak, rssNow());
|
|
167
|
+
into.set(phase, {
|
|
168
|
+
ms,
|
|
169
|
+
peakRssMb: Math.max(prev.peakRssMb ?? 0, Math.round(peak / MIB)),
|
|
170
|
+
cpuMs: (prev.cpuMs ?? 0) + (cpuNow() - cpu0),
|
|
171
|
+
});
|
|
172
|
+
this.#peak = Math.max(peakBefore, peak);
|
|
173
|
+
}
|
|
174
|
+
else {
|
|
175
|
+
into.set(phase, { ms });
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
}
|
|
35
179
|
/**
|
|
36
180
|
* Append steps timed elsewhere (the generator subprocess, a publisher)
|
|
37
181
|
* as `<prefix>.<phase>`. They ran inside the current lap, so the lap that
|
|
@@ -40,7 +184,7 @@ export class PhaseTimer {
|
|
|
40
184
|
*/
|
|
41
185
|
include(prefix, phases) {
|
|
42
186
|
for (const p of phases)
|
|
43
|
-
this.#phases.push({ phase: `${prefix}.${p.phase}
|
|
187
|
+
this.#phases.push({ ...p, phase: `${prefix}.${p.phase}` });
|
|
44
188
|
}
|
|
45
189
|
/** Milliseconds since construction. */
|
|
46
190
|
totalMs() {
|
|
@@ -50,5 +194,27 @@ export class PhaseTimer {
|
|
|
50
194
|
phases() {
|
|
51
195
|
return [...this.#phases];
|
|
52
196
|
}
|
|
197
|
+
/** Stop sampling memory (a memory timer must be closed; idempotent). */
|
|
198
|
+
close() {
|
|
199
|
+
if (this.#listener)
|
|
200
|
+
sampler.remove(this.#listener);
|
|
201
|
+
}
|
|
202
|
+
/** CPU time since the previous lap, less what parts already account for. */
|
|
203
|
+
#takeCpu(covered) {
|
|
204
|
+
if (!this.#listener)
|
|
205
|
+
return {};
|
|
206
|
+
const now = cpuNow();
|
|
207
|
+
const spent = now - this.#lastCpu - covered;
|
|
208
|
+
this.#lastCpu = now;
|
|
209
|
+
return { cpuMs: Math.max(0, Math.round(spent)) };
|
|
210
|
+
}
|
|
211
|
+
/** The peak since the previous lap, then restart it from now. */
|
|
212
|
+
#takePeak() {
|
|
213
|
+
if (!this.#listener)
|
|
214
|
+
return {};
|
|
215
|
+
const peak = Math.max(this.#peak, rssNow());
|
|
216
|
+
this.#peak = rssNow();
|
|
217
|
+
return { peakRssMb: Math.round(peak / MIB) };
|
|
218
|
+
}
|
|
53
219
|
}
|
|
54
220
|
//# sourceMappingURL=phase-timer.js.map
|
package/dist/phase-timer.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"phase-timer.js","sourceRoot":"","sources":["../src/phase-timer.ts"],"names":[],"mappings":"AAAA,mCAAmC;AAEnC
|
|
1
|
+
{"version":3,"file":"phase-timer.js","sourceRoot":"","sources":["../src/phase-timer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Issue #1254 — the database connection budget of an install.
|
|
3
|
+
*
|
|
4
|
+
* Every Caelo process that talks to Postgres holds connection pools, and
|
|
5
|
+
* they all draw from ONE server-wide `max_connections` (cms_admin and
|
|
6
|
+
* cms_public live on the same server). Before #1254 every pool took Bun's
|
|
7
|
+
* default of 10, so the admin alone asked for `adminMaxInstances × 2 × 10`
|
|
8
|
+
* — exactly the 100 slots of a default install, with nothing left for the
|
|
9
|
+
* gateway, the static generator, migrations or the provider's own agents.
|
|
10
|
+
* Under load the last admin instance to scale up could not connect at all.
|
|
11
|
+
*
|
|
12
|
+
* The budget turns that around: provisioning states how many connections
|
|
13
|
+
* the server has and how many instances may run, every fixed consumer is
|
|
14
|
+
* named as a {@link PoolBudgetReserve}, and what is left is split across
|
|
15
|
+
* the admin instances' cms_admin pools — the pool the write path uses.
|
|
16
|
+
* The admin's cms_public pool is small and fixed: the admin only reads
|
|
17
|
+
* plugin data there and publishes the gateway projection.
|
|
18
|
+
*
|
|
19
|
+
* Why not simply raise the pool: a larger pool only moves the wait from
|
|
20
|
+
* the pool to the server. A pool sized past the budget fails with "too
|
|
21
|
+
* many clients" at the worst moment (scale-out under load) instead of
|
|
22
|
+
* waiting a bounded time for a free connection of its own pool
|
|
23
|
+
* (query-api pool-guard.ts). docs/dev/connection-budget.md has the long
|
|
24
|
+
* version.
|
|
25
|
+
*
|
|
26
|
+
* Pure module — no I/O. Used by the provisioning stacks (which set the
|
|
27
|
+
* resulting env on each service) and re-exported by `@caelo-cms/query-api`.
|
|
28
|
+
*/
|
|
29
|
+
/** Env var sizing every pool of a `DatabaseAdapter` (both pools, unless the next one is set). */
|
|
30
|
+
export declare const DB_POOL_MAX_ENV = "CAELO_DB_POOL_MAX";
|
|
31
|
+
/**
|
|
32
|
+
* Env var sizing the cms_public pool of a `DatabaseAdapter` on its own. It
|
|
33
|
+
* wins over {@link DB_POOL_MAX_ENV} for that pool, so the admin can run a
|
|
34
|
+
* large cms_admin pool next to a small cms_public one.
|
|
35
|
+
*/
|
|
36
|
+
export declare const DB_PUBLIC_POOL_MAX_ENV = "CAELO_DB_PUBLIC_POOL_MAX";
|
|
37
|
+
/** Smallest pool a `DatabaseAdapter` accepts: one connection self-deadlocks it. */
|
|
38
|
+
export declare const MIN_POOL_MAX = 2;
|
|
39
|
+
/**
|
|
40
|
+
* Smallest cms_admin pool the budget hands an admin instance. Below it a
|
|
41
|
+
* handful of concurrent editors and agents queue on every write; an install
|
|
42
|
+
* whose server cannot afford it must get a larger tier or fewer instances,
|
|
43
|
+
* so {@link computePoolBudget} refuses instead of shipping a starved pool.
|
|
44
|
+
*/
|
|
45
|
+
export declare const ADMIN_POOL_FLOOR = 4;
|
|
46
|
+
/** The admin's cms_public pool: plugin-data reads and the gateway projection. */
|
|
47
|
+
export declare const ADMIN_PUBLIC_POOL_MAX = 4;
|
|
48
|
+
/** The gateway's only pool (public_role on cms_public), per instance. */
|
|
49
|
+
export declare const GATEWAY_POOL_MAX = 2;
|
|
50
|
+
/**
|
|
51
|
+
* Each pool of one static-generator subprocess. A build runs in ONE
|
|
52
|
+
* transaction (pool-guard.ts LONG_TRANSACTION_ALLOWLIST) and takes no
|
|
53
|
+
* second checkout, so the minimum pool ({@link MIN_POOL_MAX}) is enough.
|
|
54
|
+
*/
|
|
55
|
+
export declare const GENERATOR_POOL_MAX = 2;
|
|
56
|
+
/**
|
|
57
|
+
* #1267 — the dedicated connection each admin instance keeps open for
|
|
58
|
+
* `LISTEN` on the change journal's wake-up channel. A LISTEN connection is
|
|
59
|
+
* held for the instance's lifetime and can never serve a query of the pool,
|
|
60
|
+
* so it is budgeted outside the pools, one per admin instance.
|
|
61
|
+
*/
|
|
62
|
+
export declare const LISTEN_CONNECTIONS_PER_ADMIN_INSTANCE = 1;
|
|
63
|
+
/**
|
|
64
|
+
* The connection each gateway instance keeps open for `LISTEN
|
|
65
|
+
* caelo_gateway_settings` on cms_public (api-gateway server.ts): outside the
|
|
66
|
+
* gateway's pool, held for the instance's lifetime.
|
|
67
|
+
*/
|
|
68
|
+
export declare const LISTEN_CONNECTIONS_PER_GATEWAY_INSTANCE = 1;
|
|
69
|
+
/** What the budget is computed from: the server and the scale-out limits. */
|
|
70
|
+
export interface PoolBudgetInput {
|
|
71
|
+
/** The server's `max_connections`, as provisioning sets it. */
|
|
72
|
+
readonly maxConnections: number;
|
|
73
|
+
/** Most admin instances that may run at once (Cloud Run `maxInstanceCount`, …). */
|
|
74
|
+
readonly adminMaxInstances: number;
|
|
75
|
+
/** Most gateway instances that may run at once. */
|
|
76
|
+
readonly gatewayMaxInstances: number;
|
|
77
|
+
/**
|
|
78
|
+
* Static-generator subprocesses that may run at once across the install
|
|
79
|
+
* (a Stage, a Publish live and a plugin-data build can overlap).
|
|
80
|
+
*/
|
|
81
|
+
readonly concurrentBuilds: number;
|
|
82
|
+
/**
|
|
83
|
+
* Connections the server keeps for itself and the provider's agents:
|
|
84
|
+
* `superuser_reserved_connections`, Cloud SQL's `cloudsqladmin`, RDS's
|
|
85
|
+
* `rdsadmin`, Azure's replication and monitoring slots.
|
|
86
|
+
*/
|
|
87
|
+
readonly maintenanceReserve: number;
|
|
88
|
+
/** Connections a migration run opens (one per database). */
|
|
89
|
+
readonly migrationsReserve: number;
|
|
90
|
+
/**
|
|
91
|
+
* Connections of the install's other jobs (operator-access sync,
|
|
92
|
+
* upgrader, converge). They run one query at a time.
|
|
93
|
+
*/
|
|
94
|
+
readonly jobsReserve: number;
|
|
95
|
+
}
|
|
96
|
+
/** The named consumers the budget sets aside before it sizes the admin's cms_admin pool. */
|
|
97
|
+
export type PoolBudgetReserveName = "maintenance" | "migrations" | "jobs" | "generator" | "gateway"
|
|
98
|
+
/** #1267 — one LISTEN connection per admin instance ({@link LISTEN_CONNECTIONS_PER_ADMIN_INSTANCE}). */
|
|
99
|
+
| "listen"
|
|
100
|
+
/** The gateway's settings LISTEN, one per gateway instance ({@link LISTEN_CONNECTIONS_PER_GATEWAY_INSTANCE}). */
|
|
101
|
+
| "gateway-listen" | "admin-public";
|
|
102
|
+
/** One consumer of the server's connections the budget sets aside. */
|
|
103
|
+
export interface PoolBudgetReserve {
|
|
104
|
+
readonly name: PoolBudgetReserveName;
|
|
105
|
+
readonly connections: number;
|
|
106
|
+
}
|
|
107
|
+
/** The computed budget: pool sizes per process, and where every connection goes. */
|
|
108
|
+
export interface PoolBudget {
|
|
109
|
+
/** cms_admin pool of each admin instance ({@link DB_POOL_MAX_ENV} on the admin). */
|
|
110
|
+
readonly adminPoolMax: number;
|
|
111
|
+
/** cms_public pool of each admin instance ({@link DB_PUBLIC_POOL_MAX_ENV} on the admin). */
|
|
112
|
+
readonly adminPublicPoolMax: number;
|
|
113
|
+
/** The gateway's cms_public pool ({@link DB_PUBLIC_POOL_MAX_ENV} on the gateway). */
|
|
114
|
+
readonly gatewayPoolMax: number;
|
|
115
|
+
/** Each pool of a generator subprocess (the admin sets it on the child). */
|
|
116
|
+
readonly generatorPoolMax: number;
|
|
117
|
+
readonly reserves: readonly PoolBudgetReserve[];
|
|
118
|
+
/** Connections no pool may use (the remainder of the per-instance split). */
|
|
119
|
+
readonly unassigned: number;
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Split `maxConnections` across every process of the install.
|
|
123
|
+
*
|
|
124
|
+
* `adminPoolMax = floor((maxConnections − Σ reserves) / adminMaxInstances)`,
|
|
125
|
+
* where the reserves are the fixed consumers of {@link PoolBudgetInput} plus
|
|
126
|
+
* `gateway = gatewayMaxInstances × GATEWAY_POOL_MAX`,
|
|
127
|
+
* `generator = concurrentBuilds × 2 × GENERATOR_POOL_MAX`,
|
|
128
|
+
* `listen = adminMaxInstances × LISTEN_CONNECTIONS_PER_ADMIN_INSTANCE`,
|
|
129
|
+
* `gateway-listen = gatewayMaxInstances × LISTEN_CONNECTIONS_PER_GATEWAY_INSTANCE` and
|
|
130
|
+
* `admin-public = adminMaxInstances × ADMIN_PUBLIC_POOL_MAX`.
|
|
131
|
+
*
|
|
132
|
+
* @throws Error naming what to change when the server cannot give every
|
|
133
|
+
* admin instance at least {@link ADMIN_POOL_FLOOR} cms_admin connections.
|
|
134
|
+
*
|
|
135
|
+
* @example
|
|
136
|
+
* computePoolBudget({ maxConnections: 100, adminMaxInstances: 5,
|
|
137
|
+
* gatewayMaxInstances: 10, concurrentBuilds: 2, maintenanceReserve: 5,
|
|
138
|
+
* migrationsReserve: 2, jobsReserve: 4 }).adminPoolMax // → 7
|
|
139
|
+
*/
|
|
140
|
+
export declare function computePoolBudget(input: PoolBudgetInput): PoolBudget;
|
|
141
|
+
/** Which service's pool env {@link poolBudgetEnv} returns. */
|
|
142
|
+
export type PoolBudgetService = "admin" | "gateway";
|
|
143
|
+
/**
|
|
144
|
+
* The env that sizes `service`'s pools from `budget`, for the stacks to set.
|
|
145
|
+
* The admin gets both pools; the gateway, whose only pool is cms_public,
|
|
146
|
+
* gets just that one.
|
|
147
|
+
*/
|
|
148
|
+
export declare function poolBudgetEnv(budget: PoolBudget, service: PoolBudgetService): {
|
|
149
|
+
readonly name: string;
|
|
150
|
+
readonly value: string;
|
|
151
|
+
}[];
|
|
152
|
+
//# sourceMappingURL=pool-budget.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pool-budget.d.ts","sourceRoot":"","sources":["../src/pool-budget.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAEH,iGAAiG;AACjG,eAAO,MAAM,eAAe,sBAAsB,CAAC;AAEnD;;;;GAIG;AACH,eAAO,MAAM,sBAAsB,6BAA6B,CAAC;AAEjE,mFAAmF;AACnF,eAAO,MAAM,YAAY,IAAI,CAAC;AAE9B;;;;;GAKG;AACH,eAAO,MAAM,gBAAgB,IAAI,CAAC;AAElC,iFAAiF;AACjF,eAAO,MAAM,qBAAqB,IAAI,CAAC;AAEvC,yEAAyE;AACzE,eAAO,MAAM,gBAAgB,IAAI,CAAC;AAElC;;;;GAIG;AACH,eAAO,MAAM,kBAAkB,IAAI,CAAC;AAEpC;;;;;GAKG;AACH,eAAO,MAAM,qCAAqC,IAAI,CAAC;AAEvD;;;;GAIG;AACH,eAAO,MAAM,uCAAuC,IAAI,CAAC;AAEzD,6EAA6E;AAC7E,MAAM,WAAW,eAAe;IAC9B,+DAA+D;IAC/D,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,mFAAmF;IACnF,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;IACnC,mDAAmD;IACnD,QAAQ,CAAC,mBAAmB,EAAE,MAAM,CAAC;IACrC;;;OAGG;IACH,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC;;;;OAIG;IACH,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAC;IACpC,4DAA4D;IAC5D,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;IACnC;;;OAGG;IACH,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;CAC9B;AAED,4FAA4F;AAC5F,MAAM,MAAM,qBAAqB,GAC7B,aAAa,GACb,YAAY,GACZ,MAAM,GACN,WAAW,GACX,SAAS;AACX,wGAAwG;GACtG,QAAQ;AACV,iHAAiH;GAC/G,gBAAgB,GAChB,cAAc,CAAC;AAEnB,sEAAsE;AACtE,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,IAAI,EAAE,qBAAqB,CAAC;IACrC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;CAC9B;AAED,oFAAoF;AACpF,MAAM,WAAW,UAAU;IACzB,oFAAoF;IACpF,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,4FAA4F;IAC5F,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAC;IACpC,qFAAqF;IACrF,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,4EAA4E;IAC5E,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,QAAQ,EAAE,SAAS,iBAAiB,EAAE,CAAC;IAChD,6EAA6E;IAC7E,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B;AAQD;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,eAAe,GAAG,UAAU,CA6CpE;AAED,8DAA8D;AAC9D,MAAM,MAAM,iBAAiB,GAAG,OAAO,GAAG,SAAS,CAAC;AAEpD;;;;GAIG;AACH,wBAAgB,aAAa,CAC3B,MAAM,EAAE,UAAU,EAClB,OAAO,EAAE,iBAAiB,GACzB;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;CAAE,EAAE,CAQrD"}
|