]> git.ipfire.org Git - thirdparty/bacula.git/commitdiff
k8s: Fix #9735 Protocol error when tar file changed while we do backup it
authorfrancisco.garcia <francisco.garcia@baculasystems.com>
Wed, 19 Jul 2023 09:42:48 +0000 (11:42 +0200)
committerEric Bollengier <eric@baculasystems.com>
Thu, 14 Sep 2023 11:57:01 +0000 (13:57 +0200)
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

bacula/src/plugins/fd/kubernetes-backend/baculak8s/io/default_io.py
bacula/src/plugins/fd/kubernetes-backend/baculak8s/io/packet_definitions.py
bacula/src/plugins/fd/kubernetes-backend/baculak8s/jobs/job.py
bacula/src/plugins/fd/kubernetes-backend/baculak8s/jobs/job_pod_bacula.py

index b2c85e46e1a696643beb608ac2972fced996c200..3cbcc7ac51dc23a5bad61d2e5aaddc890d921b1b 100644 (file)
@@ -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)
 
index 89cdf7dc903e1e68dcbf3fe802fbaf8517496378..737ee56ad67282469c746791b693876f3842b9ba 100644 (file)
@@ -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"
 
index 8bc6a669d8955bf5c33fa50cc64e83c31ec8a298..4f78e1f0f85d8fe3f9212d348db54696d0160ffa 100644 (file)
@@ -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)
index a68277dbfccba40638e26c2025b59fe6cdf932ef..f0b710ac841160e71ebe8688e61a68b920e631e9 100644 (file)
@@ -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)