From ee7bec2d665a32ba7c7f1bfc5bd55a1df6632d10 Mon Sep 17 00:00:00 2001 From: Alexander Sabino <32822107+asabino2@users.noreply.github.com> Date: Thu, 7 May 2026 11:56:28 +0100 Subject: [PATCH] =?UTF-8?q?ajusta=20tratamento=20de=20sa=C3=ADda=20de=20st?= =?UTF-8?q?reams=20no=20DockerService=20para=20evitar=20travamentos=20e=20?= =?UTF-8?q?garantir=20a=20resolu=C3=A7=C3=A3o=20de=20promessas?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/backupService.js | 8 +++++--- src/dockerService.js | 9 +++++++++ 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/src/backupService.js b/src/backupService.js index 4aa4d30..a8d151b 100644 --- a/src/backupService.js +++ b/src/backupService.js @@ -489,13 +489,15 @@ class BackupService { maxOkExitCode: 1, onOutput: (line, stream) => { const normalizedLine = String(line || '').trim(); - if (!normalizedLine || stream !== 'stderr' || normalizedLine.startsWith('__DBKP_TAR_BEGIN__')) { + if (!normalizedLine || normalizedLine.startsWith('__DBKP_TAR_BEGIN__')) { return; } - if (!normalizedLine.startsWith('tar:')) { + // No helper (tar escreve em arquivo): lista de arquivos vai para stdout; + // avisos do tar vão para stderr. + if (stream === 'stdout' && !normalizedLine.startsWith('tar:')) { fileCurrent += 1; updateFileProgress(normalizedLine); - } else { + } else if (stream === 'stderr') { pushLog(`Aviso do tar: ${normalizedLine}`, 'gerando-tar'); } }, diff --git a/src/dockerService.js b/src/dockerService.js index 25b1cc9..36291cd 100644 --- a/src/dockerService.js +++ b/src/dockerService.js @@ -654,6 +654,15 @@ class DockerService { await container.start(); const result = await container.wait(); + + // Destruir o attachStream para que os PassThrough streams emitam 'end' + // e as outputPromises possam resolver. Sem isso o runHelper trava indefinidamente. + if (attachStream && typeof attachStream.destroy === 'function') { + attachStream.destroy(); + } + stdoutStream.end(); + stderrStream.end(); + await Promise.all(outputPromises); output = output.trim();