From 89717989382da15859632ff756925508cb1b68b1 Mon Sep 17 00:00:00 2001 From: I515719 Date: Mon, 20 Apr 2026 11:16:20 +0800 Subject: [PATCH 1/3] fix(DM01-5918): gracefully stop docker-compose containers before archive upload on timeout --- src/job/job.py | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/job/job.py b/src/job/job.py index e0b1b8ae..65bb59a7 100755 --- a/src/job/job.py +++ b/src/job/job.py @@ -511,6 +511,14 @@ def handle_abort(self, signum, sigframe): if not self.aborted: self.aborted = True self.console.collect("##Aborted", show=True) + if hasattr(self, '_compose_file_new'): + try: + subprocess.call( + ['docker-compose', '-f', self._compose_file_new, 'stop', '--timeout', '30'], + env=self.environment, + timeout=35) + except Exception: + pass self.finalize_upload() def main_run_job(self): @@ -722,6 +730,8 @@ def run_job_docker_compose(self, c): with open(compose_file_new, "w+") as out: json.dump(compose_file_content, out) + self._compose_file_new = compose_file_new + collector = StatsCollector() self._login_source_registries() From 9f942519b4da6b6ee4a38fda1595ff997f110c6e Mon Sep 17 00:00:00 2001 From: I515719 Date: Wed, 22 Apr 2026 10:20:47 +0800 Subject: [PATCH 2/3] increase the priority of the upload_archive() function --- src/job/job.py | 3 ++- src/scheduler/kubernetes/scheduler.py | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/job/job.py b/src/job/job.py index 65bb59a7..26bec3de 100755 --- a/src/job/job.py +++ b/src/job/job.py @@ -501,16 +501,17 @@ def _get_size(self, start_path): return total_size def finalize_upload(self): + self.upload_archive() self.upload_coverage_results() self.upload_test_results() self.upload_markup_files() self.upload_badge_files() - self.upload_archive() def handle_abort(self, signum, sigframe): if not self.aborted: self.aborted = True self.console.collect("##Aborted", show=True) + self.upload_archive() if hasattr(self, '_compose_file_new'): try: subprocess.call( diff --git a/src/scheduler/kubernetes/scheduler.py b/src/scheduler/kubernetes/scheduler.py index b3d0e077..438f540a 100644 --- a/src/scheduler/kubernetes/scheduler.py +++ b/src/scheduler/kubernetes/scheduler.py @@ -481,7 +481,7 @@ def _sync(self, fi): 'automountServiceAccountToken': False, 'containers': containers, 'restartPolicy': 'Never', - 'terminationGracePeriodSeconds': 60, + 'terminationGracePeriodSeconds': 180, 'volumes': f['spec']['volumes'], 'imagePullSecrets': f['spec'].get('imagePullSecrets', None) }, From 0efc60df2a8baa2ce164964af18fcba17b3b963f Mon Sep 17 00:00:00 2001 From: I515719 Date: Wed, 22 Apr 2026 15:00:29 +0800 Subject: [PATCH 3/3] update upload archive func --- src/job/job.py | 21 ++++++++------------- 1 file changed, 8 insertions(+), 13 deletions(-) diff --git a/src/job/job.py b/src/job/job.py index 26bec3de..f42cf5fb 100755 --- a/src/job/job.py +++ b/src/job/job.py @@ -378,22 +378,12 @@ def upload_archive(self): testresult_exists = False if os.path.exists(self.infrabox_archive_dir): - files = self.get_files_in_dir(self.infrabox_archive_dir) - - if files: - c.collect("Uploading /infrabox/upload/archive", show=True) + if self.get_files_in_dir(self.infrabox_archive_dir): archive_exists = True - for f in files: - c.collect("%s" % f, show=True) - self.post_file_to_api_server("/archive", f, filename=f.replace(self.infrabox_upload_dir+'/', '')) if os.path.exists(self.infrabox_testresult_dir): - files = self.get_files_in_dir(self.infrabox_testresult_dir) - - if files: + if self.get_files_in_dir(self.infrabox_testresult_dir): testresult_exists = True - for f in files: - c.collect("%s" % f, show=True) tar_file = os.path.join(self.infrabox_upload_dir, 'all_archives' + '.tar.gz') with tarfile.open(tar_file, mode='w:gz') as archive: @@ -404,6 +394,12 @@ def upload_archive(self): self.post_file_to_api_server("/archive", tar_file) + if archive_exists: + c.collect("Uploading /infrabox/upload/archive", show=True) + for f in self.get_files_in_dir(self.infrabox_archive_dir): + c.collect("%s" % f, show=True) + self.post_file_to_api_server("/archive", f, filename=f.replace(self.infrabox_upload_dir+'/', '')) + def upload_coverage_results(self): if not os.path.exists(self.infrabox_coverage_dir): @@ -511,7 +507,6 @@ def handle_abort(self, signum, sigframe): if not self.aborted: self.aborted = True self.console.collect("##Aborted", show=True) - self.upload_archive() if hasattr(self, '_compose_file_new'): try: subprocess.call(