fix(servicemanager): cancel shutdown timeouts after services stop
This commit is contained in:
@@ -1,5 +1,11 @@
|
|||||||
# Changelog
|
# Changelog
|
||||||
|
|
||||||
|
## 2026-03-23 - 8.0.1 - fix(servicemanager)
|
||||||
|
cancel shutdown timeouts after services stop
|
||||||
|
|
||||||
|
- Replace the shutdown race delay with a cancellable Timeout in ServiceManager.
|
||||||
|
- Prevent timeout handlers from lingering after a service stops successfully during shutdown.
|
||||||
|
|
||||||
## 2026-03-20 - 8.0.0 - BREAKING CHANGE(service)
|
## 2026-03-20 - 8.0.0 - BREAKING CHANGE(service)
|
||||||
expand service lifecycle management with instance-aware hooks, startup timeouts, labels, readiness waits, and auto-restart support
|
expand service lifecycle management with instance-aware hooks, startup timeouts, labels, readiness waits, and auto-restart support
|
||||||
|
|
||||||
|
|||||||
@@ -3,6 +3,6 @@
|
|||||||
*/
|
*/
|
||||||
export const commitinfo = {
|
export const commitinfo = {
|
||||||
name: '@push.rocks/taskbuffer',
|
name: '@push.rocks/taskbuffer',
|
||||||
version: '8.0.0',
|
version: '8.0.1',
|
||||||
description: 'A flexible task management library supporting TypeScript, allowing for task buffering, scheduling, and execution with dependency management.'
|
description: 'A flexible task management library supporting TypeScript, allowing for task buffering, scheduling, and execution with dependency management.'
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -158,12 +158,15 @@ export class ServiceManager {
|
|||||||
runningInLevel.map(async (name) => {
|
runningInLevel.map(async (name) => {
|
||||||
const service = this.services.get(name)!;
|
const service = this.services.get(name)!;
|
||||||
try {
|
try {
|
||||||
await Promise.race([
|
const timeout = new plugins.smartdelay.Timeout(this.options.shutdownTimeoutMs);
|
||||||
service.stop(),
|
const timeoutPromise = timeout.promise.then(() => {
|
||||||
plugins.smartdelay.delayFor(this.options.shutdownTimeoutMs).then(() => {
|
throw new Error(`Timeout stopping service '${name}'`);
|
||||||
throw new Error(`Timeout stopping service '${name}'`);
|
});
|
||||||
}),
|
try {
|
||||||
]);
|
await Promise.race([service.stop(), timeoutPromise]);
|
||||||
|
} finally {
|
||||||
|
timeout.cancel();
|
||||||
|
}
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
logger.log('warn', `${this.name}: error stopping '${name}': ${err instanceof Error ? err.message : String(err)}`);
|
logger.log('warn', `${this.name}: error stopping '${name}': ${err instanceof Error ? err.message : String(err)}`);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,6 +3,6 @@
|
|||||||
*/
|
*/
|
||||||
export const commitinfo = {
|
export const commitinfo = {
|
||||||
name: '@push.rocks/taskbuffer',
|
name: '@push.rocks/taskbuffer',
|
||||||
version: '8.0.0',
|
version: '8.0.1',
|
||||||
description: 'A flexible task management library supporting TypeScript, allowing for task buffering, scheduling, and execution with dependency management.'
|
description: 'A flexible task management library supporting TypeScript, allowing for task buffering, scheduling, and execution with dependency management.'
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user