From 5d523f1bcc3b4d178ccb128eade7ff3945bc23c5 Mon Sep 17 00:00:00 2001 From: Jan Kaluza Date: Nov 23 2017 07:10:45 +0000 Subject: Allow rebuilding FAILED events in case new event arrives. --- diff --git a/freshmaker/handlers/errata/errata_advisory_state_changed.py b/freshmaker/handlers/errata/errata_advisory_state_changed.py index a33cf5a..0794b98 100644 --- a/freshmaker/handlers/errata/errata_advisory_state_changed.py +++ b/freshmaker/handlers/errata/errata_advisory_state_changed.py @@ -25,6 +25,7 @@ from freshmaker.events import ( from freshmaker.models import Event, EVENT_TYPES from freshmaker.handlers import BaseHandler, fail_event_on_handler_exception from freshmaker.errata import Errata +from freshmaker.types import EventState class ErrataAdvisoryStateChangedHandler(BaseHandler): @@ -76,7 +77,7 @@ class ErrataAdvisoryStateChangedHandler(BaseHandler): db_event = db.session.query(Event).filter_by( event_type_id=EVENT_TYPES[ErrataAdvisoryRPMsSignedEvent], search_key=str(errata_id)).first() - if db_event: + if db_event and db_event.state != EventState.FAILED.value: log.debug("Ignoring Errata advisory %d - it already exists in " "Freshmaker db.", errata_id) return [] diff --git a/freshmaker/handlers/internal/manual_rebuild.py b/freshmaker/handlers/internal/manual_rebuild.py index 5d66f61..baa49d0 100644 --- a/freshmaker/handlers/internal/manual_rebuild.py +++ b/freshmaker/handlers/internal/manual_rebuild.py @@ -52,7 +52,7 @@ class FreshmakerManualRebuildHandler(ContainerBuildHandler): db_event = db.session.query(Event).filter_by( event_type_id=EVENT_TYPES[ErrataAdvisoryRPMsSignedEvent], search_key=str(errata_id)).first() - if db_event: + if db_event and db_event.state != EventState.FAILED.value: msg = ("Ignoring Errata advisory %d - it already exists in " "Freshmaker db." % errata_id) self.current_db_event.transition(EventState.SKIPPED, msg) diff --git a/tests/test_errata_advisory_state_changed.py b/tests/test_errata_advisory_state_changed.py index 0c57aa3..b75e115 100644 --- a/tests/test_errata_advisory_state_changed.py +++ b/tests/test_errata_advisory_state_changed.py @@ -34,7 +34,7 @@ from freshmaker.errata import ErrataAdvisory from freshmaker import db, events from freshmaker.models import Event, ArtifactBuild -from freshmaker.types import ArtifactBuildState, ArtifactType +from freshmaker.types import ArtifactBuildState, ArtifactType, EventState class TestFindBuildSrpmName(unittest.TestCase): @@ -816,17 +816,25 @@ class TestErrataAdvisoryStateChangedHandler(unittest.TestCase): self, advisories_from_event): handler = ErrataAdvisoryStateChangedHandler() - Event.create( + db_event = Event.create( db.session, "msg124", "123", ErrataAdvisoryRPMsSignedEvent) db.session.commit() - for state in ["REL_PREP", "PUSH_READY", "IN_PUSH", "SHIPPED_LIVE"]: - advisories_from_event.return_value = [ - ErrataAdvisory(123, "RHSA-2017", state, "Critical")] - ev = ErrataAdvisoryStateChangedEvent("msg123", 123, state) - ret = handler.handle(ev) - - self.assertEqual(len(ret), 0) + for db_event_state in [EventState.INITIALIZED, EventState.BUILDING, + EventState.COMPLETE, EventState.FAILED, + EventState.SKIPPED]: + db_event.state = db_event_state + db.session.commit() + for state in ["REL_PREP", "PUSH_READY", "IN_PUSH", "SHIPPED_LIVE"]: + advisories_from_event.return_value = [ + ErrataAdvisory(123, "RHSA-2017", state, "Critical")] + ev = ErrataAdvisoryStateChangedEvent("msg123", 123, state) + ret = handler.handle(ev) + + if db_event_state == EventState.FAILED: + self.assertEqual(len(ret), 1) + else: + self.assertEqual(len(ret), 0) @patch('freshmaker.errata.Errata.advisories_from_event') def test_rebuild_if_not_exists_unknown_errata_id(