@procwire/transport 0.2.0 → 0.3.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/dist/framing/line-delimited.d.ts.map +1 -1
- package/dist/framing/line-delimited.js.map +1 -1
- package/dist/heartbeat/constants.d.ts +12 -0
- package/dist/heartbeat/constants.d.ts.map +1 -0
- package/dist/heartbeat/constants.js +17 -0
- package/dist/heartbeat/constants.js.map +1 -0
- package/dist/heartbeat/index.d.ts +10 -0
- package/dist/heartbeat/index.d.ts.map +1 -0
- package/dist/heartbeat/index.js +10 -0
- package/dist/heartbeat/index.js.map +1 -0
- package/dist/heartbeat/manager.d.ts +107 -0
- package/dist/heartbeat/manager.d.ts.map +1 -0
- package/dist/heartbeat/manager.js +252 -0
- package/dist/heartbeat/manager.js.map +1 -0
- package/dist/heartbeat/types.d.ts +99 -0
- package/dist/heartbeat/types.d.ts.map +1 -0
- package/dist/heartbeat/types.js +8 -0
- package/dist/heartbeat/types.js.map +1 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -0
- package/dist/index.js.map +1 -1
- package/dist/process/manager.d.ts.map +1 -1
- package/dist/process/manager.js +2 -1
- package/dist/process/manager.js.map +1 -1
- package/dist/protocol/index.d.ts +2 -0
- package/dist/protocol/index.d.ts.map +1 -1
- package/dist/protocol/index.js +3 -0
- package/dist/protocol/index.js.map +1 -1
- package/dist/protocol/reserved-methods.d.ts +90 -0
- package/dist/protocol/reserved-methods.d.ts.map +1 -0
- package/dist/protocol/reserved-methods.js +99 -0
- package/dist/protocol/reserved-methods.js.map +1 -0
- package/dist/protocol/reserved-types.d.ts +231 -0
- package/dist/protocol/reserved-types.d.ts.map +1 -0
- package/dist/protocol/reserved-types.js +10 -0
- package/dist/protocol/reserved-types.js.map +1 -0
- package/dist/reconnect/constants.d.ts +12 -0
- package/dist/reconnect/constants.d.ts.map +1 -0
- package/dist/reconnect/constants.js +21 -0
- package/dist/reconnect/constants.js.map +1 -0
- package/dist/reconnect/index.d.ts +10 -0
- package/dist/reconnect/index.d.ts.map +1 -0
- package/dist/reconnect/index.js +10 -0
- package/dist/reconnect/index.js.map +1 -0
- package/dist/reconnect/manager.d.ts +110 -0
- package/dist/reconnect/manager.d.ts.map +1 -0
- package/dist/reconnect/manager.js +264 -0
- package/dist/reconnect/manager.js.map +1 -0
- package/dist/reconnect/types.d.ts +137 -0
- package/dist/reconnect/types.d.ts.map +1 -0
- package/dist/reconnect/types.js +8 -0
- package/dist/reconnect/types.js.map +1 -0
- package/dist/resilience/handle.d.ts +112 -0
- package/dist/resilience/handle.d.ts.map +1 -0
- package/dist/resilience/handle.js +371 -0
- package/dist/resilience/handle.js.map +1 -0
- package/dist/resilience/index.d.ts +9 -0
- package/dist/resilience/index.d.ts.map +1 -0
- package/dist/resilience/index.js +9 -0
- package/dist/resilience/index.js.map +1 -0
- package/dist/resilience/types.d.ts +191 -0
- package/dist/resilience/types.d.ts.map +1 -0
- package/dist/resilience/types.js +8 -0
- package/dist/resilience/types.js.map +1 -0
- package/dist/shutdown/constants.d.ts +12 -0
- package/dist/shutdown/constants.d.ts.map +1 -0
- package/dist/shutdown/constants.js +15 -0
- package/dist/shutdown/constants.js.map +1 -0
- package/dist/shutdown/index.d.ts +10 -0
- package/dist/shutdown/index.d.ts.map +1 -0
- package/dist/shutdown/index.js +10 -0
- package/dist/shutdown/index.js.map +1 -0
- package/dist/shutdown/manager.d.ts +102 -0
- package/dist/shutdown/manager.d.ts.map +1 -0
- package/dist/shutdown/manager.js +252 -0
- package/dist/shutdown/manager.js.map +1 -0
- package/dist/shutdown/types.d.ts +133 -0
- package/dist/shutdown/types.d.ts.map +1 -0
- package/dist/shutdown/types.js +8 -0
- package/dist/shutdown/types.js.map +1 -0
- package/dist/transport/socket-transport.d.ts.map +1 -1
- package/dist/transport/socket-transport.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/shutdown/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,cAAc,YAAY,CAAC;AAC3B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,cAAc,CAAC"}
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ShutdownManager implementation.
|
|
3
|
+
*
|
|
4
|
+
* Provides graceful shutdown capabilities for managed processes.
|
|
5
|
+
* Follows the Wire Protocol Specification for shutdown sequence:
|
|
6
|
+
* 1. Send __shutdown__ request with timeout
|
|
7
|
+
* 2. Wait for __shutdown__ response (ack with pending_requests count)
|
|
8
|
+
* 3. Wait for __shutdown_complete__ notification
|
|
9
|
+
* 4. If timeout exceeded, escalate to SIGKILL
|
|
10
|
+
*
|
|
11
|
+
* @packageDocumentation
|
|
12
|
+
* @module Shutdown
|
|
13
|
+
*/
|
|
14
|
+
import { EventEmitter } from "../utils/events.js";
|
|
15
|
+
import type { ShutdownOptions, ShutdownState, ShutdownEventMap, Shutdownable } from "./types.js";
|
|
16
|
+
import type { ShutdownReason } from "../protocol/reserved-types.js";
|
|
17
|
+
/**
|
|
18
|
+
* Manages graceful shutdown of processes with protocol-level coordination.
|
|
19
|
+
*
|
|
20
|
+
* The ShutdownManager implements the Wire Protocol shutdown sequence:
|
|
21
|
+
* 1. Sends `__shutdown__` request to the worker with a timeout
|
|
22
|
+
* 2. Worker responds with pending request count
|
|
23
|
+
* 3. Worker drains pending requests and sends `__shutdown_complete__`
|
|
24
|
+
* 4. If graceful timeout is exceeded, SIGKILL is sent
|
|
25
|
+
*
|
|
26
|
+
* @example
|
|
27
|
+
* ```typescript
|
|
28
|
+
* const shutdown = new ShutdownManager({
|
|
29
|
+
* gracefulTimeoutMs: 5000,
|
|
30
|
+
* });
|
|
31
|
+
*
|
|
32
|
+
* shutdown.on('shutdown:complete', ({ processId, exitCode }) => {
|
|
33
|
+
* console.log(`Process ${processId} completed with exit code ${exitCode}`);
|
|
34
|
+
* });
|
|
35
|
+
*
|
|
36
|
+
* shutdown.on('shutdown:force', ({ processId, reason }) => {
|
|
37
|
+
* console.warn(`Process ${processId} force killed: ${reason}`);
|
|
38
|
+
* });
|
|
39
|
+
*
|
|
40
|
+
* // Initiate graceful shutdown
|
|
41
|
+
* await shutdown.initiateShutdown(processHandle, 'user_requested');
|
|
42
|
+
* ```
|
|
43
|
+
*/
|
|
44
|
+
export declare class ShutdownManager extends EventEmitter<ShutdownEventMap> {
|
|
45
|
+
private readonly options;
|
|
46
|
+
private readonly activeShutdowns;
|
|
47
|
+
/**
|
|
48
|
+
* Creates a new ShutdownManager.
|
|
49
|
+
*
|
|
50
|
+
* @param options - Configuration options (merged with defaults)
|
|
51
|
+
*/
|
|
52
|
+
constructor(options?: Partial<ShutdownOptions>);
|
|
53
|
+
/**
|
|
54
|
+
* Initiates graceful shutdown of a process.
|
|
55
|
+
*
|
|
56
|
+
* @param target - The process to shut down
|
|
57
|
+
* @param reason - Reason for shutdown
|
|
58
|
+
* @returns Promise that resolves when shutdown is complete (graceful or forced)
|
|
59
|
+
*/
|
|
60
|
+
initiateShutdown(target: Shutdownable, reason: ShutdownReason): Promise<void>;
|
|
61
|
+
/**
|
|
62
|
+
* Gets the current shutdown state for a process.
|
|
63
|
+
*/
|
|
64
|
+
getState(processId: string): Readonly<ShutdownState> | null;
|
|
65
|
+
/**
|
|
66
|
+
* Checks if a process is currently being shut down.
|
|
67
|
+
*/
|
|
68
|
+
isShuttingDown(processId: string): boolean;
|
|
69
|
+
/**
|
|
70
|
+
* Get current options (readonly).
|
|
71
|
+
*/
|
|
72
|
+
getOptions(): Readonly<Required<ShutdownOptions>>;
|
|
73
|
+
/**
|
|
74
|
+
* Performs the graceful shutdown sequence.
|
|
75
|
+
*
|
|
76
|
+
* The gracefulTimeoutMs is enforced as a single overall limit for the entire
|
|
77
|
+
* shutdown sequence (ack + drain + complete), not as separate timeouts for each phase.
|
|
78
|
+
*/
|
|
79
|
+
private performGracefulShutdown;
|
|
80
|
+
/**
|
|
81
|
+
* Force kills a process with SIGKILL.
|
|
82
|
+
*/
|
|
83
|
+
private forceKill;
|
|
84
|
+
/**
|
|
85
|
+
* Updates the phase of an active shutdown.
|
|
86
|
+
*/
|
|
87
|
+
private updatePhase;
|
|
88
|
+
/**
|
|
89
|
+
* Calculates remaining time from the overall graceful timeout.
|
|
90
|
+
* Returns 0 if the timeout has already been exceeded.
|
|
91
|
+
*/
|
|
92
|
+
private getRemainingTime;
|
|
93
|
+
/**
|
|
94
|
+
* Creates a timeout promise.
|
|
95
|
+
*/
|
|
96
|
+
private createTimeout;
|
|
97
|
+
/**
|
|
98
|
+
* Sleep for specified milliseconds.
|
|
99
|
+
*/
|
|
100
|
+
private sleep;
|
|
101
|
+
}
|
|
102
|
+
//# sourceMappingURL=manager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../src/shutdown/manager.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAQlD,OAAO,KAAK,EACV,eAAe,EACf,aAAa,EACb,gBAAgB,EAChB,YAAY,EAEb,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAEpE;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,qBAAa,eAAgB,SAAQ,YAAY,CAAC,gBAAgB,CAAC;IACjE,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA4B;IACpD,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAoC;IAEpE;;;;OAIG;gBACS,OAAO,GAAE,OAAO,CAAC,eAAe,CAAM;IAKlD;;;;;;OAMG;IACG,gBAAgB,CAAC,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;IAiCnF;;OAEG;IACH,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,GAAG,IAAI;IAK3D;;OAEG;IACH,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO;IAI1C;;OAEG;IACH,UAAU,IAAI,QAAQ,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC;IAIjD;;;;;OAKG;YACW,uBAAuB;IAmHrC;;OAEG;IACH,OAAO,CAAC,SAAS;IAqBjB;;OAEG;IACH,OAAO,CAAC,WAAW;IAOnB;;;OAGG;IACH,OAAO,CAAC,gBAAgB;IAIxB;;OAEG;IACH,OAAO,CAAC,aAAa;IAIrB;;OAEG;IACH,OAAO,CAAC,KAAK;CAGd"}
|
|
@@ -0,0 +1,252 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ShutdownManager implementation.
|
|
3
|
+
*
|
|
4
|
+
* Provides graceful shutdown capabilities for managed processes.
|
|
5
|
+
* Follows the Wire Protocol Specification for shutdown sequence:
|
|
6
|
+
* 1. Send __shutdown__ request with timeout
|
|
7
|
+
* 2. Wait for __shutdown__ response (ack with pending_requests count)
|
|
8
|
+
* 3. Wait for __shutdown_complete__ notification
|
|
9
|
+
* 4. If timeout exceeded, escalate to SIGKILL
|
|
10
|
+
*
|
|
11
|
+
* @packageDocumentation
|
|
12
|
+
* @module Shutdown
|
|
13
|
+
*/
|
|
14
|
+
import { EventEmitter } from "../utils/events.js";
|
|
15
|
+
import { ReservedMethods } from "../protocol/reserved-methods.js";
|
|
16
|
+
import { DEFAULT_SHUTDOWN_OPTIONS } from "./constants.js";
|
|
17
|
+
/**
|
|
18
|
+
* Manages graceful shutdown of processes with protocol-level coordination.
|
|
19
|
+
*
|
|
20
|
+
* The ShutdownManager implements the Wire Protocol shutdown sequence:
|
|
21
|
+
* 1. Sends `__shutdown__` request to the worker with a timeout
|
|
22
|
+
* 2. Worker responds with pending request count
|
|
23
|
+
* 3. Worker drains pending requests and sends `__shutdown_complete__`
|
|
24
|
+
* 4. If graceful timeout is exceeded, SIGKILL is sent
|
|
25
|
+
*
|
|
26
|
+
* @example
|
|
27
|
+
* ```typescript
|
|
28
|
+
* const shutdown = new ShutdownManager({
|
|
29
|
+
* gracefulTimeoutMs: 5000,
|
|
30
|
+
* });
|
|
31
|
+
*
|
|
32
|
+
* shutdown.on('shutdown:complete', ({ processId, exitCode }) => {
|
|
33
|
+
* console.log(`Process ${processId} completed with exit code ${exitCode}`);
|
|
34
|
+
* });
|
|
35
|
+
*
|
|
36
|
+
* shutdown.on('shutdown:force', ({ processId, reason }) => {
|
|
37
|
+
* console.warn(`Process ${processId} force killed: ${reason}`);
|
|
38
|
+
* });
|
|
39
|
+
*
|
|
40
|
+
* // Initiate graceful shutdown
|
|
41
|
+
* await shutdown.initiateShutdown(processHandle, 'user_requested');
|
|
42
|
+
* ```
|
|
43
|
+
*/
|
|
44
|
+
export class ShutdownManager extends EventEmitter {
|
|
45
|
+
options;
|
|
46
|
+
activeShutdowns = new Map();
|
|
47
|
+
/**
|
|
48
|
+
* Creates a new ShutdownManager.
|
|
49
|
+
*
|
|
50
|
+
* @param options - Configuration options (merged with defaults)
|
|
51
|
+
*/
|
|
52
|
+
constructor(options = {}) {
|
|
53
|
+
super();
|
|
54
|
+
this.options = { ...DEFAULT_SHUTDOWN_OPTIONS, ...options };
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Initiates graceful shutdown of a process.
|
|
58
|
+
*
|
|
59
|
+
* @param target - The process to shut down
|
|
60
|
+
* @param reason - Reason for shutdown
|
|
61
|
+
* @returns Promise that resolves when shutdown is complete (graceful or forced)
|
|
62
|
+
*/
|
|
63
|
+
async initiateShutdown(target, reason) {
|
|
64
|
+
const processId = target.id;
|
|
65
|
+
// Check if already shutting down
|
|
66
|
+
if (this.activeShutdowns.has(processId)) {
|
|
67
|
+
throw new Error(`Process '${processId}' is already being shut down`);
|
|
68
|
+
}
|
|
69
|
+
// If graceful shutdown is disabled, just kill
|
|
70
|
+
if (!this.options.enabled) {
|
|
71
|
+
this.forceKill(target, "no_response");
|
|
72
|
+
return;
|
|
73
|
+
}
|
|
74
|
+
const state = {
|
|
75
|
+
processId,
|
|
76
|
+
phase: "sending_request",
|
|
77
|
+
startedAt: Date.now(),
|
|
78
|
+
pendingRequests: null,
|
|
79
|
+
exitCode: null,
|
|
80
|
+
};
|
|
81
|
+
this.activeShutdowns.set(processId, state);
|
|
82
|
+
this.emit("shutdown:start", { processId, reason });
|
|
83
|
+
try {
|
|
84
|
+
await this.performGracefulShutdown(target, reason, state);
|
|
85
|
+
}
|
|
86
|
+
finally {
|
|
87
|
+
this.activeShutdowns.delete(processId);
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Gets the current shutdown state for a process.
|
|
92
|
+
*/
|
|
93
|
+
getState(processId) {
|
|
94
|
+
const state = this.activeShutdowns.get(processId);
|
|
95
|
+
return state ? { ...state } : null;
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Checks if a process is currently being shut down.
|
|
99
|
+
*/
|
|
100
|
+
isShuttingDown(processId) {
|
|
101
|
+
return this.activeShutdowns.has(processId);
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Get current options (readonly).
|
|
105
|
+
*/
|
|
106
|
+
getOptions() {
|
|
107
|
+
return { ...this.options };
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Performs the graceful shutdown sequence.
|
|
111
|
+
*
|
|
112
|
+
* The gracefulTimeoutMs is enforced as a single overall limit for the entire
|
|
113
|
+
* shutdown sequence (ack + drain + complete), not as separate timeouts for each phase.
|
|
114
|
+
*/
|
|
115
|
+
async performGracefulShutdown(target, reason, state) {
|
|
116
|
+
const processId = target.id;
|
|
117
|
+
// Set up __shutdown_complete__ notification listener
|
|
118
|
+
let shutdownCompleteReceived = false;
|
|
119
|
+
let resolveComplete;
|
|
120
|
+
const completePromise = new Promise((resolve) => {
|
|
121
|
+
resolveComplete = resolve;
|
|
122
|
+
});
|
|
123
|
+
const unsubscribe = target.onNotification(ReservedMethods.SHUTDOWN_COMPLETE, (params) => {
|
|
124
|
+
const completeParams = params;
|
|
125
|
+
state.exitCode = completeParams.exit_code;
|
|
126
|
+
state.phase = "completed";
|
|
127
|
+
shutdownCompleteReceived = true;
|
|
128
|
+
this.emit("shutdown:complete", {
|
|
129
|
+
processId,
|
|
130
|
+
exitCode: completeParams.exit_code,
|
|
131
|
+
});
|
|
132
|
+
resolveComplete();
|
|
133
|
+
});
|
|
134
|
+
try {
|
|
135
|
+
// Phase 1: Send __shutdown__ request
|
|
136
|
+
state.phase = "awaiting_ack";
|
|
137
|
+
const shutdownParams = {
|
|
138
|
+
timeout_ms: this.options.gracefulTimeoutMs,
|
|
139
|
+
reason,
|
|
140
|
+
};
|
|
141
|
+
let ackReceived = false;
|
|
142
|
+
// Calculate remaining time for ack phase
|
|
143
|
+
const ackTimeout = this.getRemainingTime(state.startedAt);
|
|
144
|
+
if (ackTimeout <= 0) {
|
|
145
|
+
this.forceKill(target, "timeout");
|
|
146
|
+
return;
|
|
147
|
+
}
|
|
148
|
+
try {
|
|
149
|
+
const response = (await target.request(ReservedMethods.SHUTDOWN, shutdownParams, ackTimeout));
|
|
150
|
+
ackReceived = true;
|
|
151
|
+
state.pendingRequests = response.pending_requests;
|
|
152
|
+
state.phase = "draining";
|
|
153
|
+
this.emit("shutdown:ack", {
|
|
154
|
+
processId,
|
|
155
|
+
pendingRequests: response.pending_requests,
|
|
156
|
+
});
|
|
157
|
+
}
|
|
158
|
+
catch (error) {
|
|
159
|
+
// Worker didn't respond to shutdown request - force kill
|
|
160
|
+
this.emit("shutdown:error", {
|
|
161
|
+
processId,
|
|
162
|
+
error: error instanceof Error ? error : new Error(String(error)),
|
|
163
|
+
});
|
|
164
|
+
this.forceKill(target, "no_response");
|
|
165
|
+
return;
|
|
166
|
+
}
|
|
167
|
+
// Phase 2: Wait for __shutdown_complete__ or timeout
|
|
168
|
+
if (ackReceived) {
|
|
169
|
+
state.phase = "awaiting_complete";
|
|
170
|
+
// Calculate remaining time for complete phase
|
|
171
|
+
const completeTimeout = this.getRemainingTime(state.startedAt);
|
|
172
|
+
if (completeTimeout <= 0) {
|
|
173
|
+
state.phase = "force_killing";
|
|
174
|
+
this.forceKill(target, "timeout");
|
|
175
|
+
return;
|
|
176
|
+
}
|
|
177
|
+
const timeoutPromise = this.createTimeout(completeTimeout);
|
|
178
|
+
const result = await Promise.race([
|
|
179
|
+
completePromise.then(() => "complete"),
|
|
180
|
+
timeoutPromise.then(() => "timeout"),
|
|
181
|
+
]);
|
|
182
|
+
if (result === "timeout" && !shutdownCompleteReceived) {
|
|
183
|
+
// Graceful timeout exceeded - force kill
|
|
184
|
+
state.phase = "force_killing";
|
|
185
|
+
this.forceKill(target, "timeout");
|
|
186
|
+
return;
|
|
187
|
+
}
|
|
188
|
+
// Wait a bit for process to actually exit
|
|
189
|
+
await this.sleep(this.options.exitWaitMs);
|
|
190
|
+
const durationMs = Date.now() - state.startedAt;
|
|
191
|
+
this.emit("shutdown:done", {
|
|
192
|
+
processId,
|
|
193
|
+
graceful: true,
|
|
194
|
+
durationMs,
|
|
195
|
+
});
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
finally {
|
|
199
|
+
unsubscribe();
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
/**
|
|
203
|
+
* Force kills a process with SIGKILL.
|
|
204
|
+
*/
|
|
205
|
+
forceKill(target, reason) {
|
|
206
|
+
const processId = target.id;
|
|
207
|
+
const state = this.activeShutdowns.get(processId);
|
|
208
|
+
const startedAt = state?.startedAt ?? Date.now();
|
|
209
|
+
this.emit("shutdown:force", { processId, reason });
|
|
210
|
+
try {
|
|
211
|
+
target.kill("SIGKILL");
|
|
212
|
+
}
|
|
213
|
+
catch {
|
|
214
|
+
// Process may already be dead
|
|
215
|
+
}
|
|
216
|
+
const durationMs = Date.now() - startedAt;
|
|
217
|
+
this.emit("shutdown:done", {
|
|
218
|
+
processId,
|
|
219
|
+
graceful: false,
|
|
220
|
+
durationMs,
|
|
221
|
+
});
|
|
222
|
+
}
|
|
223
|
+
/**
|
|
224
|
+
* Updates the phase of an active shutdown.
|
|
225
|
+
*/
|
|
226
|
+
updatePhase(processId, phase) {
|
|
227
|
+
const state = this.activeShutdowns.get(processId);
|
|
228
|
+
if (state) {
|
|
229
|
+
state.phase = phase;
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
/**
|
|
233
|
+
* Calculates remaining time from the overall graceful timeout.
|
|
234
|
+
* Returns 0 if the timeout has already been exceeded.
|
|
235
|
+
*/
|
|
236
|
+
getRemainingTime(startedAt) {
|
|
237
|
+
return Math.max(0, this.options.gracefulTimeoutMs - (Date.now() - startedAt));
|
|
238
|
+
}
|
|
239
|
+
/**
|
|
240
|
+
* Creates a timeout promise.
|
|
241
|
+
*/
|
|
242
|
+
createTimeout(ms) {
|
|
243
|
+
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
244
|
+
}
|
|
245
|
+
/**
|
|
246
|
+
* Sleep for specified milliseconds.
|
|
247
|
+
*/
|
|
248
|
+
sleep(ms) {
|
|
249
|
+
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
//# sourceMappingURL=manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manager.js","sourceRoot":"","sources":["../../src/shutdown/manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Type definitions for graceful shutdown management.
|
|
3
|
+
*
|
|
4
|
+
* @packageDocumentation
|
|
5
|
+
* @module Shutdown
|
|
6
|
+
*/
|
|
7
|
+
import type { EventMap } from "../utils/events.js";
|
|
8
|
+
import type { ShutdownReason } from "../protocol/reserved-types.js";
|
|
9
|
+
/**
|
|
10
|
+
* Options for the ShutdownManager.
|
|
11
|
+
*/
|
|
12
|
+
export interface ShutdownOptions {
|
|
13
|
+
/**
|
|
14
|
+
* Whether graceful shutdown is enabled.
|
|
15
|
+
* If disabled, processes are killed immediately.
|
|
16
|
+
* @default true
|
|
17
|
+
*/
|
|
18
|
+
enabled?: boolean;
|
|
19
|
+
/**
|
|
20
|
+
* Timeout for graceful shutdown in milliseconds.
|
|
21
|
+
* After this time, SIGKILL is sent.
|
|
22
|
+
* @default 5000
|
|
23
|
+
*/
|
|
24
|
+
gracefulTimeoutMs?: number;
|
|
25
|
+
/**
|
|
26
|
+
* Additional time to wait after __shutdown_complete__ for process exit.
|
|
27
|
+
* @default 1000
|
|
28
|
+
*/
|
|
29
|
+
exitWaitMs?: number;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Shutdown request payload sent to the worker.
|
|
33
|
+
*/
|
|
34
|
+
export interface ShutdownRequest {
|
|
35
|
+
/** Shutdown reason */
|
|
36
|
+
reason: ShutdownReason;
|
|
37
|
+
/** Timeout for graceful shutdown in milliseconds */
|
|
38
|
+
timeoutMs: number;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* State of a shutdown operation.
|
|
42
|
+
*/
|
|
43
|
+
export interface ShutdownState {
|
|
44
|
+
/** Process ID being shut down */
|
|
45
|
+
processId: string;
|
|
46
|
+
/** Current phase of shutdown */
|
|
47
|
+
phase: ShutdownPhase;
|
|
48
|
+
/** When shutdown started */
|
|
49
|
+
startedAt: number;
|
|
50
|
+
/** Number of pending requests reported by worker */
|
|
51
|
+
pendingRequests: number | null;
|
|
52
|
+
/** Worker's reported exit code (from __shutdown_complete__) */
|
|
53
|
+
exitCode: number | null;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Phases of the shutdown process.
|
|
57
|
+
*/
|
|
58
|
+
export type ShutdownPhase = "sending_request" | "awaiting_ack" | "draining" | "awaiting_complete" | "force_killing" | "completed";
|
|
59
|
+
/**
|
|
60
|
+
* Shutdown event map for event emitter.
|
|
61
|
+
*/
|
|
62
|
+
export interface ShutdownEventMap extends EventMap {
|
|
63
|
+
/**
|
|
64
|
+
* Fired when shutdown starts.
|
|
65
|
+
*/
|
|
66
|
+
"shutdown:start": {
|
|
67
|
+
processId: string;
|
|
68
|
+
reason: ShutdownReason;
|
|
69
|
+
};
|
|
70
|
+
/**
|
|
71
|
+
* Fired when worker acknowledges shutdown.
|
|
72
|
+
*/
|
|
73
|
+
"shutdown:ack": {
|
|
74
|
+
processId: string;
|
|
75
|
+
pendingRequests: number;
|
|
76
|
+
};
|
|
77
|
+
/**
|
|
78
|
+
* Fired when worker sends __shutdown_complete__.
|
|
79
|
+
*/
|
|
80
|
+
"shutdown:complete": {
|
|
81
|
+
processId: string;
|
|
82
|
+
exitCode: number;
|
|
83
|
+
};
|
|
84
|
+
/**
|
|
85
|
+
* Fired when graceful timeout is exceeded and force kill is triggered.
|
|
86
|
+
*/
|
|
87
|
+
"shutdown:force": {
|
|
88
|
+
processId: string;
|
|
89
|
+
reason: "timeout" | "no_response";
|
|
90
|
+
};
|
|
91
|
+
/**
|
|
92
|
+
* Fired when shutdown is fully done (process exited).
|
|
93
|
+
*/
|
|
94
|
+
"shutdown:done": {
|
|
95
|
+
processId: string;
|
|
96
|
+
graceful: boolean;
|
|
97
|
+
durationMs: number;
|
|
98
|
+
};
|
|
99
|
+
/**
|
|
100
|
+
* Fired when an error occurs during shutdown.
|
|
101
|
+
*/
|
|
102
|
+
"shutdown:error": {
|
|
103
|
+
processId: string;
|
|
104
|
+
error: Error;
|
|
105
|
+
};
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Interface for objects that can be gracefully shut down.
|
|
109
|
+
* This is typically a ProcessHandle or similar object.
|
|
110
|
+
*/
|
|
111
|
+
export interface Shutdownable {
|
|
112
|
+
/**
|
|
113
|
+
* Unique identifier for the process.
|
|
114
|
+
*/
|
|
115
|
+
readonly id: string;
|
|
116
|
+
/**
|
|
117
|
+
* Process ID (OS-level).
|
|
118
|
+
*/
|
|
119
|
+
readonly pid: number | null;
|
|
120
|
+
/**
|
|
121
|
+
* Sends a request to the process.
|
|
122
|
+
*/
|
|
123
|
+
request(method: string, params?: unknown, timeout?: number): Promise<unknown>;
|
|
124
|
+
/**
|
|
125
|
+
* Force kills the process.
|
|
126
|
+
*/
|
|
127
|
+
kill(signal?: string): void;
|
|
128
|
+
/**
|
|
129
|
+
* Subscribes to notifications from the process.
|
|
130
|
+
*/
|
|
131
|
+
onNotification(method: string, handler: (params: unknown) => void): () => void;
|
|
132
|
+
}
|
|
133
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/shutdown/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAEpE;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B;;;;OAIG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAElB;;;;OAIG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAE3B;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,sBAAsB;IACtB,MAAM,EAAE,cAAc,CAAC;IAEvB,oDAAoD;IACpD,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,iCAAiC;IACjC,SAAS,EAAE,MAAM,CAAC;IAElB,gCAAgC;IAChC,KAAK,EAAE,aAAa,CAAC;IAErB,4BAA4B;IAC5B,SAAS,EAAE,MAAM,CAAC;IAElB,oDAAoD;IACpD,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAE/B,+DAA+D;IAC/D,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;CACzB;AAED;;GAEG;AACH,MAAM,MAAM,aAAa,GACrB,iBAAiB,GACjB,cAAc,GACd,UAAU,GACV,mBAAmB,GACnB,eAAe,GACf,WAAW,CAAC;AAEhB;;GAEG;AACH,MAAM,WAAW,gBAAiB,SAAQ,QAAQ;IAChD;;OAEG;IACH,gBAAgB,EAAE;QAChB,SAAS,EAAE,MAAM,CAAC;QAClB,MAAM,EAAE,cAAc,CAAC;KACxB,CAAC;IAEF;;OAEG;IACH,cAAc,EAAE;QACd,SAAS,EAAE,MAAM,CAAC;QAClB,eAAe,EAAE,MAAM,CAAC;KACzB,CAAC;IAEF;;OAEG;IACH,mBAAmB,EAAE;QACnB,SAAS,EAAE,MAAM,CAAC;QAClB,QAAQ,EAAE,MAAM,CAAC;KAClB,CAAC;IAEF;;OAEG;IACH,gBAAgB,EAAE;QAChB,SAAS,EAAE,MAAM,CAAC;QAClB,MAAM,EAAE,SAAS,GAAG,aAAa,CAAC;KACnC,CAAC;IAEF;;OAEG;IACH,eAAe,EAAE;QACf,SAAS,EAAE,MAAM,CAAC;QAClB,QAAQ,EAAE,OAAO,CAAC;QAClB,UAAU,EAAE,MAAM,CAAC;KACpB,CAAC;IAEF;;OAEG;IACH,gBAAgB,EAAE;QAChB,SAAS,EAAE,MAAM,CAAC;QAClB,KAAK,EAAE,KAAK,CAAC;KACd,CAAC;CACH;AAED;;;GAGG;AACH,MAAM,WAAW,YAAY;IAC3B;;OAEG;IACH,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IAEpB;;OAEG;IACH,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IAE5B;;OAEG;IACH,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAE9E;;OAEG;IACH,IAAI,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAE5B;;OAEG;IACH,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,GAAG,MAAM,IAAI,CAAC;CAChF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/shutdown/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"socket-transport.d.ts","sourceRoot":"","sources":["../../src/transport/socket-transport.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,SAAS,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAC7E,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAE5D;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC;;;;OAIG;IACH,IAAI,EAAE,MAAM,CAAC;IAEb;;;OAGG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAE3B;;;OAGG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;IAExB;;;OAGG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;IAExB;;;OAGG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAE3B;;OAEG;IACH,OAAO,CAAC,EAAE,gBAAgB,CAAC;CAC5B;AAwBD,qBAAa,eAAgB,YAAW,SAAS;IAC/C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAuC;IAC/D,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAiC;IACzD,OAAO,CAAC,MAAM,CAA2B;IACzC,OAAO,CAAC,MAAM,CAAkC;IAChD,OAAO,CAAC,YAAY,CAA+B;IACnD,OAAO,CAAC,cAAc,CAA+B;IACrD,OAAO,CAAC,iBAAiB,CAAK;IAC9B,OAAO,CAAC,gBAAgB,CAAS;gBAErB,OAAO,EAAE,sBAAsB;
|
|
1
|
+
{"version":3,"file":"socket-transport.d.ts","sourceRoot":"","sources":["../../src/transport/socket-transport.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,SAAS,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAC7E,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAE5D;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC;;;;OAIG;IACH,IAAI,EAAE,MAAM,CAAC;IAEb;;;OAGG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAE3B;;;OAGG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;IAExB;;;OAGG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;IAExB;;;OAGG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAE3B;;OAEG;IACH,OAAO,CAAC,EAAE,gBAAgB,CAAC;CAC5B;AAwBD,qBAAa,eAAgB,YAAW,SAAS;IAC/C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAuC;IAC/D,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAiC;IACzD,OAAO,CAAC,MAAM,CAA2B;IACzC,OAAO,CAAC,MAAM,CAAkC;IAChD,OAAO,CAAC,YAAY,CAA+B;IACnD,OAAO,CAAC,cAAc,CAA+B;IACrD,OAAO,CAAC,iBAAiB,CAAK;IAC9B,OAAO,CAAC,gBAAgB,CAAS;gBAErB,OAAO,EAAE,sBAAsB;IAkC3C,IAAI,KAAK,IAAI,cAAc,CAE1B;IAED;;;OAGG;IACH,OAAO,CAAC,QAAQ;IAIV,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IA8DxB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAwC3B,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA0BxC,MAAM,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,GAAG,WAAW;IAIpD,EAAE,CAAC,CAAC,SAAS,MAAM,eAAe,EAChC,KAAK,EAAE,CAAC,EACR,OAAO,EAAE,CAAC,IAAI,EAAE,eAAe,CAAC,CAAC,CAAC,KAAK,IAAI,GAC1C,WAAW;IAId,OAAO,CAAC,oBAAoB;IAsB5B,OAAO,CAAC,iBAAiB;IA2BzB,OAAO,CAAC,OAAO;IAgBf,OAAO,CAAC,WAAW;CAMpB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"socket-transport.js","sourceRoot":"","sources":["../../src/transport/socket-transport.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,GAAG,MAAM,UAAU,CAAC;AAChC,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAoErD,MAAM,OAAO,eAAe;IACT,OAAO,GAAG,IAAI,YAAY,EAAmB,CAAC;IAC9C,OAAO,CAAiC;IACjD,MAAM,GAAsB,IAAI,CAAC;IACjC,MAAM,GAAmB,cAAc,CAAC;IACxC,YAAY,GAA0B,IAAI,CAAC;IAC3C,cAAc,GAA0B,IAAI,CAAC;IAC7C,iBAAiB,GAAG,CAAC,CAAC;IACtB,gBAAgB,GAAG,KAAK,CAAC;IAEjC,YAAY,OAA+B;QACzC,4BAA4B;QAC5B,IAAI,CAAC,OAAO,CAAC,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;YAChD,MAAM,IAAI,KAAK,CAAC,uDAAuD,CAAC,CAAC;QAC3E,CAAC;QAED,oCAAoC;QACpC,IAAI,OAAO,CAAC,iBAAiB,KAAK,SAAS,IAAI,OAAO,CAAC,iBAAiB,IAAI,CAAC,EAAE,CAAC;YAC9E,MAAM,IAAI,KAAK,CAAC,qDAAqD,CAAC,CAAC;QACzE,CAAC;QACD,IAAI,OAAO,CAAC,cAAc,KAAK,SAAS,IAAI,OAAO,CAAC,cAAc,GAAG,CAAC,EAAE,CAAC;YACvE,MAAM,IAAI,KAAK,CAAC,oDAAoD,CAAC,CAAC;QACxE,CAAC;QACD,IAAI,OAAO,CAAC,iBAAiB,KAAK,SAAS,IAAI,OAAO,CAAC,iBAAiB,GAAG,CAAC,EAAE,CAAC;YAC7E,MAAM,IAAI,KAAK,CAAC,uDAAuD,CAAC,CAAC;QAC3E,CAAC;QACD,IACE,OAAO,CAAC,cAAc,KAAK,SAAS;YACpC,OAAO,CAAC,iBAAiB,KAAK,SAAS;YACvC,OAAO,CAAC,cAAc,GAAG,OAAO,CAAC,iBAAiB,EAClD,CAAC;YACD,MAAM,IAAI,KAAK,
|
|
1
|
+
{"version":3,"file":"socket-transport.js","sourceRoot":"","sources":["../../src/transport/socket-transport.ts"],"names":[],"mappings":"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"}
|