fix: stop endpoint handles missing/dead containers gracefully
This commit is contained in:
parent
6510871448
commit
994fd799d0
1 changed files with 21 additions and 11 deletions
|
|
@ -450,7 +450,13 @@ router.post('/:id/stop', async (req, res, next) => {
|
||||||
const recorder = recorderResult.rows[0];
|
const recorder = recorderResult.rows[0];
|
||||||
|
|
||||||
if (!recorder.container_id) {
|
if (!recorder.container_id) {
|
||||||
return res.status(400).json({ error: 'No container running' });
|
// No container tracked — reset stuck status gracefully.
|
||||||
|
const result = await pool.query(
|
||||||
|
`UPDATE recorders SET container_id = NULL, status = 'stopped', updated_at = NOW()
|
||||||
|
WHERE id = $1 RETURNING *`,
|
||||||
|
[id]
|
||||||
|
);
|
||||||
|
return res.json(result.rows[0]);
|
||||||
}
|
}
|
||||||
|
|
||||||
const { remote: isRemote, apiUrl: targetNodeApiUrl } = await resolveNodeTarget(recorder.node_id);
|
const { remote: isRemote, apiUrl: targetNodeApiUrl } = await resolveNodeTarget(recorder.node_id);
|
||||||
|
|
@ -469,23 +475,27 @@ router.post('/:id/stop', async (req, res, next) => {
|
||||||
`/containers/${recorder.container_id}/stop`
|
`/containers/${recorder.container_id}/stop`
|
||||||
);
|
);
|
||||||
|
|
||||||
if (stopRes.status !== 204 && stopRes.status !== 304) {
|
// 204 = stopped, 304 = already stopped, 404 = container gone — all acceptable.
|
||||||
|
if (stopRes.status !== 204 && stopRes.status !== 304 && stopRes.status !== 404) {
|
||||||
return res.status(500).json({
|
return res.status(500).json({
|
||||||
error: 'Failed to stop container',
|
error: 'Failed to stop container',
|
||||||
details: stopRes.data,
|
details: stopRes.data,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
const removeRes = await dockerApi(
|
// Only attempt remove if the container existed (not 404).
|
||||||
'DELETE',
|
if (stopRes.status !== 404) {
|
||||||
`/containers/${recorder.container_id}`
|
const removeRes = await dockerApi(
|
||||||
);
|
'DELETE',
|
||||||
|
`/containers/${recorder.container_id}`
|
||||||
|
);
|
||||||
|
|
||||||
if (removeRes.status !== 204 && removeRes.status !== 404) {
|
if (removeRes.status !== 204 && removeRes.status !== 404) {
|
||||||
return res.status(500).json({
|
return res.status(500).json({
|
||||||
error: 'Failed to remove container',
|
error: 'Failed to remove container',
|
||||||
details: removeRes.data,
|
details: removeRes.data,
|
||||||
});
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue