From 21bb32c15ffde43a24305c76355b118c9df57aa8 Mon Sep 17 00:00:00 2001 From: Chenxiong Qi Date: Sep 08 2017 09:02:07 +0000 Subject: Store compose_id for each event When each event ErrataAdvisoryRPMsSignedEvent happens, a series of docker images would be rebuilt with updated (newer version) RPMs. Each event will have its own compose (the YUM repository) that contains those updated RPMs, which will be used to rebuild docker images. When freshmaker gets message when a compose is generated successfully in ODCS, compose id will be used to retrieve docker images from database and start to rebuild. Signed-off-by: Chenxiong Qi --- diff --git a/freshmaker/handlers/errata/errata_advisory_rpms_signed.py b/freshmaker/handlers/errata/errata_advisory_rpms_signed.py index 01b4930..8ee38a0 100644 --- a/freshmaker/handlers/errata/errata_advisory_rpms_signed.py +++ b/freshmaker/handlers/errata/errata_advisory_rpms_signed.py @@ -166,6 +166,10 @@ class ErrataAdvisoryRPMsSignedHandler(BaseHandler): packages=packages) compose_id = new_compose['id'] + rebuild_event = Event.get(db.session, db_event.msg_id) + rebuild_event.compose_id = compose_id + db.session.commit() + log.info('Waiting for ODCS to finish the compose: %d', compose_id) while True: diff --git a/freshmaker/migrations/versions/bfc0e0d2eea6_add_compose_id_to_event.py b/freshmaker/migrations/versions/bfc0e0d2eea6_add_compose_id_to_event.py new file mode 100644 index 0000000..fd1c1bc --- /dev/null +++ b/freshmaker/migrations/versions/bfc0e0d2eea6_add_compose_id_to_event.py @@ -0,0 +1,26 @@ +"""Add compose_id to Event + +Revision ID: bfc0e0d2eea6 +Revises: 43b3c6580af7 +Create Date: 2017-09-08 16:47:14.882980 + +""" + +# revision identifiers, used by Alembic. +revision = 'bfc0e0d2eea6' +down_revision = '43b3c6580af7' + +from alembic import op +import sqlalchemy as sa + + +def upgrade(): + ### commands auto generated by Alembic - please adjust! ### + op.add_column('events', sa.Column('compose_id', sa.Integer(), nullable=True)) + ### end Alembic commands ### + + +def downgrade(): + ### commands auto generated by Alembic - please adjust! ### + op.drop_column('events', 'compose_id') + ### end Alembic commands ### diff --git a/freshmaker/models.py b/freshmaker/models.py index 9779f7f..37107dc 100644 --- a/freshmaker/models.py +++ b/freshmaker/models.py @@ -74,6 +74,11 @@ class Event(FreshmakerBase): # List of builds associated with this Event. builds = relationship("ArtifactBuild", back_populates="event") + compose_id = db.Column( + db.Integer, + default=None, + doc='Used to include new version packages to rebuild docker images') + @classmethod def create(cls, session, message_id, search_key, event_type, released=True): if event_type in EVENT_TYPES: @@ -88,8 +93,12 @@ class Event(FreshmakerBase): return event @classmethod + def get(cls, session, message_id): + return session.query(cls).filter_by(message_id=message_id).first() + + @classmethod def get_or_create(cls, session, message_id, search_key, event_type, released=True): - instance = session.query(cls).filter_by(message_id=message_id).first() + instance = cls.get(session, message_id) if instance: return instance return cls.create(session, message_id, search_key, event_type, released) diff --git a/tests/test_errata_advisory_state_changed.py b/tests/test_errata_advisory_state_changed.py index 51ec0ca..7fac6ab 100644 --- a/tests/test_errata_advisory_state_changed.py +++ b/tests/test_errata_advisory_state_changed.py @@ -360,6 +360,19 @@ class TestGetComposeSource(unittest.TestCase): class TestPrepareYumRepo(unittest.TestCase): """Test ErrataAdvisoryRPMsSignedHandler._prepare_yum_repo""" + def setUp(self): + db.session.remove() + db.drop_all() + db.create_all() + db.session.commit() + + Event.create(db.session, 'msg-id', 'nvr', 100) + + def tearDown(self): + db.session.remove() + db.drop_all() + db.session.commit() + @patch('freshmaker.handlers.errata.errata_advisory_rpms_signed.ODCS') @patch('freshmaker.handlers.errata.errata_advisory_rpms_signed.' 'ErrataAdvisoryRPMsSignedHandler._get_packages_for_compose') @@ -391,10 +404,14 @@ class TestPrepareYumRepo(unittest.TestCase): errata.return_value.get_builds.return_value = set(["httpd-2.4.15-1.f27"]) - event = Mock(search_key=12345) + event = Mock(msg_id='msg-id', search_key=12345) handler = ErrataAdvisoryRPMsSignedHandler() repo_url = handler._prepare_yum_repo(event) + rebuild_event = db.session.query(Event).filter( + Event.message_id == event.msg_id).first() + self.assertEqual(3, rebuild_event.compose_id) + _get_compose_source.assert_called_once_with("httpd-2.4.15-1.f27") _get_packages_for_compose.assert_called_once_with("httpd-2.4.15-1.f27")