From a29da84cce2d621ff55757300bafe657d7b6e1cb Mon Sep 17 00:00:00 2001 From: SATYAM GUPTA <143061930+Satyamgupta2365@users.noreply.github.com> Date: Tue, 3 Feb 2026 17:08:29 +0530 Subject: [PATCH] Fix: Resolve stuck submissions in remote evaluation (#4921) - Fixed submission_worker.py: Added proper status update to FINISHED after successful remote evaluation - Fixed remote_submission_worker.py: Added complete submission data handling for remote evaluations - Both workers now correctly save evaluation results, metadata, and logs - Submissions now properly transition from running to finished status - Prevents submissions from getting stuck indefinitely --- scripts/workers/remote_submission_worker.py | 27 +++++++++++++ scripts/workers/submission_worker.py | 42 +++++++++++++++++++++ 2 files changed, 69 insertions(+) diff --git a/scripts/workers/remote_submission_worker.py b/scripts/workers/remote_submission_worker.py index d05a052dae..378ba18d8c 100644 --- a/scripts/workers/remote_submission_worker.py +++ b/scripts/workers/remote_submission_worker.py @@ -527,6 +527,33 @@ def run_submission( submission_metadata=submission, ) if remote_evaluation: + # Handle successful remote evaluation - save the submission output + stdout.close() + stderr.close() + + stdout_content = read_file_content(stdout_file) + stderr_content = read_file_content(stderr_file) + + submission_data = { + "challenge_phase": phase_pk, + "submission": submission_pk, + "submission_status": "finished", + "stdout": stdout_content, + "stderr": stderr_content, + } + + if "result" in submission_output: + submission_data["result"] = json.dumps( + submission_output.get("result") + ) + submission_data["metadata"] = json.dumps( + submission_output.get("submission_metadata") + ) + + update_submission_data( + submission_data, challenge_pk, submission_pk + ) + shutil.rmtree(temp_run_dir) return except Exception: status = "failed" diff --git a/scripts/workers/submission_worker.py b/scripts/workers/submission_worker.py index 8de368adab..3873ffdb20 100644 --- a/scripts/workers/submission_worker.py +++ b/scripts/workers/submission_worker.py @@ -529,6 +529,48 @@ def run_submission( challenge_phase.codename, submission_metadata=submission_serializer.data, ) + # Handle successful remote evaluation + submission.status = Submission.FINISHED + submission.completed_at = timezone.now() + submission.save() + + # Save submission output if available + if submission_output: + output = {} + output["result"] = submission_output.get("result", "") + submission.output = output + + # Save submission_result_file + submission_result = submission_output.get("submission_result", "") + submission_result = json.dumps(submission_result) + submission.submission_result_file.save( + "submission_result.json", ContentFile(submission_result) + ) + + # Save submission_metadata_file + submission_metadata = submission_output.get( + "submission_metadata", "" + ) + submission.submission_metadata_file.save( + "submission_metadata.json", + ContentFile(json.dumps(submission_metadata)), + ) + submission.save() + + if not challenge_phase.disable_logs: + with open(stdout_file, "r") as stdout_f: + stdout_content = stdout_f.read() + submission.stdout_file.save( + "stdout.txt", ContentFile(stdout_content) + ) + with open(stderr_file, "r") as stderr_f: + stderr_content = stderr_f.read() + submission.stderr_file.save( + "stderr.txt", ContentFile(stderr_content) + ) + + # Delete the complete temp run directory + shutil.rmtree(temp_run_dir) return except Exception: stderr.write(traceback.format_exc())