From 8a88096a7ede2f564979ef9f75c5e8370da168e8 Mon Sep 17 00:00:00 2001 From: Felipe Lalanne <1822826+pipex@users.noreply.github.com> Date: Wed, 15 Nov 2023 14:49:00 -0300 Subject: [PATCH] Force remove container if updateMetadata fails The `updateMetadata` step renames the container to match the target release when the service doesn't change between releases. We have seen this step fail because of an engine bug that seems to relate to the engine keeping stale references after container restarts. The only way around this issue is to remove the old container and create it again. This implements that workaround during the updateMetadata step to deal with that issue. Change-type: minor Relates-to: balena-os/balena-engine#261 --- src/compose/service-manager.ts | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/src/compose/service-manager.ts b/src/compose/service-manager.ts index 987a00ab81..ecb05a315e 100644 --- a/src/compose/service-manager.ts +++ b/src/compose/service-manager.ts @@ -157,9 +157,20 @@ export async function updateMetadata(service: Service, target: Service) { ); } - await docker.getContainer(svc.containerId).rename({ - name: `${service.serviceName}_${target.imageId}_${target.releaseId}_${target.commit}`, - }); + try { + await docker.getContainer(svc.containerId).rename({ + name: `${service.serviceName}_${target.imageId}_${target.releaseId}_${target.commit}`, + }); + } catch (e) { + if (isNotFoundError(e)) { + log.warn( + 'Got 404 error while updating container metadata. Will attempt to recreate the container instead', + e, + ); + return await docker.getContainer(svc.containerId).remove({ force: true }); + } + throw e; + } } export async function handover(current: Service, target: Service) {