From 679e29fda7d097fe153caeb02898dd4ccdcc5fc1 Mon Sep 17 00:00:00 2001 From: Jan Kaluža Date: Apr 24 2018 14:25:44 +0000 Subject: Merge #257 `Set KojiService._FAKE_TASK_ID to highest ArtifactBuild.build_id` --- diff --git a/freshmaker/kojiservice.py b/freshmaker/kojiservice.py index 215234e..c0b2a8d 100644 --- a/freshmaker/kojiservice.py +++ b/freshmaker/kojiservice.py @@ -34,9 +34,10 @@ import contextlib import re import requests import freshmaker.utils -from freshmaker import log, conf +from freshmaker import log, conf, db from freshmaker.consumer import work_queue_put from freshmaker.events import BrewContainerTaskStateChangeEvent +from freshmaker.models import ArtifactBuild class KojiService(object): @@ -56,6 +57,13 @@ class KojiService(object): self._config = koji.read_config(profile or 'koji') self.dry_run = dry_run + # In case we run in DRY_RUN mode, we need to initialize + # _FAKE_TASK_ID to the id of last ODCS builds to have the IDs + # increasing and unique even between Freshmaker restarts. + if self.dry_run: + KojiService._FAKE_TASK_ID = \ + ArtifactBuild.get_highest_build_id(db.session) + 1 + @property def config(self): return self._config diff --git a/freshmaker/models.py b/freshmaker/models.py index 4bc5c2e..669ec4a 100644 --- a/freshmaker/models.py +++ b/freshmaker/models.py @@ -453,6 +453,18 @@ class ArtifactBuild(FreshmakerBase): return field.value raise ValueError("%s: %s, not in %r" % (key, field, list(ArtifactType))) + @classmethod + def get_highest_build_id(cls, session): + """ + Returns the highest build_id. If there is no build so far, + returns 0. + """ + build = session.query(ArtifactBuild).order_by( + ArtifactBuild.build_id.desc()).first() + if not build: + return 0 + return build.build_id + def depending_artifact_builds(self): """ Returns list of artifact builds depending on this one.