Unverified Commit 1241ab44 authored by Ahmed Hamid Awan's avatar Ahmed Hamid Awan Committed by GitHub
Browse files

Merge pull request #20436 from mvdbeek/fix_job_metric_copy

[25.0] Fix copying of job metrics for cached jobs
parents 63b29193 711923a3
Loading
Loading
Loading
Loading
+20 −2
Original line number Diff line number Diff line
@@ -1484,6 +1484,15 @@ class JobMetricText(BaseJobMetric, RepresentById):
    metric_name: Mapped[Optional[str]] = mapped_column(Unicode(255))
    metric_value: Mapped[Optional[str]] = mapped_column(Unicode(JOB_METRIC_MAX_LENGTH))

    def copy_to_job(self, job: "Job"):
        job.text_metrics.append(
            JobMetricText(
                plugin=self.plugin,
                metric_name=self.metric_name,
                metric_value=self.metric_value,
            )
        )


class JobMetricNumeric(BaseJobMetric, RepresentById):
    __tablename__ = "job_metric_numeric"
@@ -1494,6 +1503,15 @@ class JobMetricNumeric(BaseJobMetric, RepresentById):
    metric_name: Mapped[Optional[str]] = mapped_column(Unicode(255))
    metric_value: Mapped[Optional[Decimal]] = mapped_column(Numeric(JOB_METRIC_PRECISION, JOB_METRIC_SCALE))

    def copy_to_job(self, job: "Job"):
        job.numeric_metrics.append(
            JobMetricNumeric(
                plugin=self.plugin,
                metric_name=self.metric_name,
                metric_value=self.metric_value,
            )
        )


class TaskMetricText(BaseJobMetric, RepresentById):
    __tablename__ = "task_metric_text"
@@ -1664,8 +1682,8 @@ class Job(Base, JobLike, UsesCreateAndUpdateTime, Dictifiable, Serializable):

    def copy_from_job(self, job: "Job", copy_outputs: bool = False):
        self.copied_from_job_id = job.id
        self.numeric_metrics = job.numeric_metrics
        self.text_metrics = job.text_metrics
        for metric in job.numeric_metrics + job.text_metrics:
            metric.copy_to_job(self)
        self.dependencies = job.dependencies
        self.state = job.state
        self.job_stderr = job.job_stderr
+1 −0
Original line number Diff line number Diff line
@@ -1052,6 +1052,7 @@ class TestToolsApi(ApiTestCase, TestsTools):
            for output in [outputs_one, outputs_two, outputs_three]:
                output_id = output["outputs"][0]["id"]
                dataset_details.append(self._get(f"datasets/{output_id}").json())
                assert self._get(f"jobs/{output['jobs'][0]['id']}/metrics").json()
            filenames = [dd["file_name"] for dd in dataset_details]
            assert len(filenames) == 3, filenames
            assert len(set(filenames)) <= 2, filenames