From: francisco.garcia Date: Wed, 19 Jul 2023 09:42:48 +0000 (+0200) Subject: k8s: Fix #9735 Protocol error when tar file changed while we do backup it X-Git-Tag: Beta-15.0.0~156 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=f54fa699a98de1fcee309ef58aca18cf96637ed9;p=thirdparty%2Fbacula.git k8s: Fix #9735 Protocol error when tar file changed while we do backup it The problem was resolved changing protocol with metaplugin. Now we can use Q messages. That it's means that is not fatal error and it continues the backup --- diff --git a/bacula/src/plugins/fd/kubernetes-backend/baculak8s/io/default_io.py b/bacula/src/plugins/fd/kubernetes-backend/baculak8s/io/default_io.py index b2c85e46e..3cbcc7ac5 100644 --- a/bacula/src/plugins/fd/kubernetes-backend/baculak8s/io/default_io.py +++ b/bacula/src/plugins/fd/kubernetes-backend/baculak8s/io/default_io.py @@ -76,6 +76,9 @@ class DefaultIO(object): def send_error(self, message): self.send_packet(STATUS_ERROR, message) + def send_non_fatal_error(self, message): + self.send_packet(STATUS_NON_FATAL_ERROR, message) + def send_warning(self, message): self.send_packet(STATUS_WARNING, message) diff --git a/bacula/src/plugins/fd/kubernetes-backend/baculak8s/io/packet_definitions.py b/bacula/src/plugins/fd/kubernetes-backend/baculak8s/io/packet_definitions.py index 89cdf7dc9..737ee56ad 100644 --- a/bacula/src/plugins/fd/kubernetes-backend/baculak8s/io/packet_definitions.py +++ b/bacula/src/plugins/fd/kubernetes-backend/baculak8s/io/packet_definitions.py @@ -19,6 +19,7 @@ STATUS_COMMAND = "C" STATUS_DATA = "D" STATUS_ABORT = "A" STATUS_ERROR = "E" +STATUS_NON_FATAL_ERROR = "Q" STATUS_WARNING = "W" STATUS_INFO = "I" diff --git a/bacula/src/plugins/fd/kubernetes-backend/baculak8s/jobs/job.py b/bacula/src/plugins/fd/kubernetes-backend/baculak8s/jobs/job.py index 8bc6a669d..4f78e1f0f 100644 --- a/bacula/src/plugins/fd/kubernetes-backend/baculak8s/jobs/job.py +++ b/bacula/src/plugins/fd/kubernetes-backend/baculak8s/jobs/job.py @@ -88,6 +88,13 @@ class Job(metaclass=ABCMeta): git_version=data.git_version, )) + def _handle_non_fatal_error(self, error_message): + if self._params.get("abort_on_error", None) == "1": + self._io.send_abort(error_message) + self._abort() + else: + self._io.send_non_fatal_error(error_message) + def _handle_error(self, error_message): if self._params.get("abort_on_error", None) == "1": self._io.send_abort(error_message) diff --git a/bacula/src/plugins/fd/kubernetes-backend/baculak8s/jobs/job_pod_bacula.py b/bacula/src/plugins/fd/kubernetes-backend/baculak8s/jobs/job_pod_bacula.py index a68277dbf..f0b710ac8 100644 --- a/bacula/src/plugins/fd/kubernetes-backend/baculak8s/jobs/job_pod_bacula.py +++ b/bacula/src/plugins/fd/kubernetes-backend/baculak8s/jobs/job_pod_bacula.py @@ -284,7 +284,7 @@ class JobPodBacula(Job, metaclass=ABCMeta): self.tarstderr = self.tarstderr.rstrip('\n') # classify it as error or warning if self.tarexitcode != '0': - self._handle_error(self.tarstderr) + self._handle_non_fatal_error(self.tarstderr) else: self._io.send_warning(self.tarstderr)