fix(node-agent): await async cleanup + fix syntax

This commit is contained in:
Wild Dragon Dev 2026-06-04 00:57:22 +00:00
parent 315b31a68b
commit 21ba7595b3

View file

@ -611,12 +611,12 @@ async function handleSidecarStart(body, res) {
hostConfig.IpcMode = 'host'; hostConfig.IpcMode = 'host';
} }
// Single cleanup for ALL failure paths (create fail, start fail, throw): // Single cleanup for ALL failure paths (create fail, start fail, throw):
// decrements the right bridge counter (stopping the bridge when it hits 0) // decrements the right bridge counter (stopping the bridge when it hits 0)
// AND stops any net_ingest started for this request. Previously only the // AND stops any net_ingest started for this request. Previously only the
// deltacast counter was decremented — blackmagic count and net_ingest leaked // deltacast counter was decremented — blackmagic count and net_ingest leaked
// on every failed start, eventually stranding the bridge / ingest forever. // on every failed start, eventually stranding the bridge / ingest forever.
const _cleanupOnFailure = () => { const _cleanupOnFailure = async () => {
if (sourceType === 'deltacast') { if (sourceType === 'deltacast') {
_dcSidecarCount--; _dcSidecarCount--;
if (_dcSidecarCount <= 0) { _dcSidecarCount = 0; stopDeltacastBridge(); } if (_dcSidecarCount <= 0) { _dcSidecarCount = 0; stopDeltacastBridge(); }
@ -632,12 +632,12 @@ async function handleSidecarStart(body, res) {
}; };
let containerId; let containerId;
try { try {
const createRes = await dockerApi('POST', '/containers/create', spec); const createRes = await dockerApi('POST', '/containers/create', spec);
if (createRes.status !== 201) { if (createRes.status !== 201) {
_cleanupOnFailure(); await _cleanupOnFailure();
return jsonResponse(res, 502, { error: 'Failed to create container', details: createRes.data }); return jsonResponse(res, 502, { error: 'Failed to create container', details: createRes.data });
} }
containerId = createRes.data.Id; containerId = createRes.data.Id;
const _u = (env.find(e => e.startsWith('MAM_API_URL=')) || '').slice(12); const _u = (env.find(e => e.startsWith('MAM_API_URL=')) || '').slice(12);
@ -646,7 +646,7 @@ async function handleSidecarStart(body, res) {
const startRes = await dockerApi('POST', `/containers/${containerId}/start`); const startRes = await dockerApi('POST', `/containers/${containerId}/start`);
if (startRes.status !== 204) { if (startRes.status !== 204) {
await dockerApi('DELETE', `/containers/${containerId}?force=true`).catch(() => {}); await dockerApi('DELETE', `/containers/${containerId}?force=true`).catch(() => {});
_cleanupOnFailure(); await _cleanupOnFailure();
return jsonResponse(res, 502, { error: 'Failed to start container', details: startRes.data }); return jsonResponse(res, 502, { error: 'Failed to start container', details: startRes.data });
} }
@ -663,7 +663,7 @@ async function handleSidecarStart(body, res) {
} }
jsonResponse(res, 201, { containerId, capturePort }); jsonResponse(res, 201, { containerId, capturePort });
} catch (err) { } catch (err) {
_cleanupOnFailure(); await _cleanupOnFailure();
throw err; throw err;
} }
} catch (err) { } catch (err) {
@ -774,7 +774,7 @@ async function handleSidecarStandby(body, res) {
hostConfig.IpcMode = 'host'; hostConfig.IpcMode = 'host';
} }
const _cleanupOnFailure = () => { const _cleanupOnFailure = async () => {
if (sourceType === 'deltacast') { if (sourceType === 'deltacast') {
_dcSidecarCount--; _dcSidecarCount--;
if (_dcSidecarCount <= 0) { _dcSidecarCount = 0; stopDeltacastBridge(); } if (_dcSidecarCount <= 0) { _dcSidecarCount = 0; stopDeltacastBridge(); }
@ -788,7 +788,7 @@ async function handleSidecarStandby(body, res) {
try { try {
const createRes = await dockerApi('POST', '/containers/create', { Image: image, Env: sidecarEnv, HostConfig: hostConfig }); const createRes = await dockerApi('POST', '/containers/create', { Image: image, Env: sidecarEnv, HostConfig: hostConfig });
if (createRes.status !== 201) { if (createRes.status !== 201) {
_cleanupOnFailure(); await _cleanupOnFailure();
return jsonResponse(res, 502, { error: 'Failed to create standby container', details: createRes.data }); return jsonResponse(res, 502, { error: 'Failed to create standby container', details: createRes.data });
} }
containerId = createRes.data.Id; containerId = createRes.data.Id;
@ -796,14 +796,14 @@ async function handleSidecarStandby(body, res) {
const startRes = await dockerApi('POST', `/containers/${containerId}/start`); const startRes = await dockerApi('POST', `/containers/${containerId}/start`);
if (startRes.status !== 204) { if (startRes.status !== 204) {
await dockerApi('DELETE', `/containers/${containerId}?force=true`).catch(() => {}); await dockerApi('DELETE', `/containers/${containerId}?force=true`).catch(() => {});
_cleanupOnFailure(); await _cleanupOnFailure();
return jsonResponse(res, 502, { error: 'Failed to start standby container', details: startRes.data }); return jsonResponse(res, 502, { error: 'Failed to start standby container', details: startRes.data });
} }
if (sourceType === 'deltacast') _containerSourceType.set(containerId, 'deltacast'); if (sourceType === 'deltacast') _containerSourceType.set(containerId, 'deltacast');
if (sourceType === 'sdi' || sourceType === 'blackmagic') _containerSourceType.set(containerId, 'blackmagic'); if (sourceType === 'sdi' || sourceType === 'blackmagic') _containerSourceType.set(containerId, 'blackmagic');
jsonResponse(res, 201, { containerId, capturePort }); jsonResponse(res, 201, { containerId, capturePort });
} catch (err) { } catch (err) {
_cleanupOnFailure(); await _cleanupOnFailure();
throw err; throw err;
} }
} catch (err) { } catch (err) {