#85 WIP: create a copy of existing compose if tag has changed since last compose run
Closed 6 years ago by cqi. Opened 6 years ago by cqi.

file modified
+1 -22
@@ -28,6 +28,7 @@ 

  from odcs.server import log, conf, app, db

  from odcs.server.models import Compose, COMPOSE_STATES, COMPOSE_FLAGS

  from odcs.server.pungi import Pungi, PungiConfig, PungiSourceType

+ from odcs.server.utils import create_koji_session

  from concurrent.futures import ThreadPoolExecutor

  import odcs.server.utils

  import odcs.server.pdc
@@ -133,28 +134,6 @@ 

                  self._remove_compose_dir(compose.toplevel_dir)

  

  

- def create_koji_session():

-     """

-     Creates and returns new koji_session based on the `conf.koji_profile`.

-     """

- 

-     # We import koji here, because it does not support python3

-     import koji

-     koji_module = koji.get_profile_module(conf.koji_profile)

-     session_opts = {}

-     for key in ('krbservice', 'timeout', 'keepalive',

-                 'max_retries', 'retry_interval', 'anon_retry',

-                 'offline_retry', 'offline_retry_interval',

-                 'debug', 'debug_xmlrpc', 'krb_rdns',

-                 'use_fast_upload'):

-         value = getattr(koji_module.config, key, None)

-         if value is not None:

-             session_opts[key] = value

-     koji_session = koji.ClientSession(koji_module.config.server,

-                                       session_opts)

-     return koji_session

- 

- 

  def koji_get_inherited_tags(koji_session, tag, tags=None):

      """

      Returns list of ids of all tags the tag `tag` inherits from.

@@ -29,6 +29,28 @@ 

  from odcs.server import conf, log

  

  

+ def create_koji_session():

+     """

+     Creates and returns new koji_session based on the `conf.koji_profile`.

+     """

+ 

+     # We import koji here, because it does not support python3

+     import koji

+     koji_module = koji.get_profile_module(conf.koji_profile)

+     session_opts = {}

+     for key in ('krbservice', 'timeout', 'keepalive',

+                 'max_retries', 'retry_interval', 'anon_retry',

+                 'offline_retry', 'offline_retry_interval',

+                 'debug', 'debug_xmlrpc', 'krb_rdns',

+                 'use_fast_upload'):

+         value = getattr(koji_module.config, key, None)

+         if value is not None:

+             session_opts[key] = value

+     koji_session = koji.ClientSession(koji_module.config.server,

+                                       session_opts)

+     return koji_session

+ 

+ 

  def retry(timeout=conf.net_timeout, interval=conf.net_retry_interval, wait_on=Exception, logger=None):

      """A decorator that allows to retry a section of code until success or timeout."""

      def wrapper(function):

file modified
+14 -1
@@ -34,6 +34,7 @@ 

  from odcs.server.api_utils import pagination_metadata, filter_composes

  from odcs.server.auth import requires_role, login_required

  from odcs.server.auth import require_oidc_scope

+ from odcs.server.utils import create_koji_session

  

  

  api_v1 = {
@@ -65,6 +66,13 @@ 

  }

  

  

+ def tag_content_has_changed(tag_name, event_id):

+     """Determine if content with tag has changed since koji event"""

+     koji_session = create_koji_session()

+     tag_info = koji_session.getTag(tag_name)

+     return koji_session.tagChangedSinceEvent(event_id, [tag_info['id']])

+ 

+ 

  class ODCSAPI(MethodView):

      def get(self, id):

          if id is None:
@@ -131,7 +139,12 @@ 

                  raise NotFound(err)

  

              state = old_compose.state

-             if state in (COMPOSE_STATES['removed'], COMPOSE_STATES['failed']):

+             if (state in (COMPOSE_STATES['removed'], COMPOSE_STATES['failed'])

+                     or

+                     old_compose.source_type == PUNGI_SOURCE_TYPE_NAMES['tag']

+                     and

+                     tag_content_has_changed(old_compose.source,

+                                             old_compose.koji_event)):

                  log.info("%r: Going to regenerate the compose", old_compose)

                  compose = Compose.create_copy(db.session, old_compose, owner,

                                                seconds_to_live)

Signed-off-by: Chenxiong Qi cqi@redhat.com

This is a fix of comment given by mikeb mentioned in #5

rebased onto dba0808

6 years ago

Pull-Request has been closed by cqi

6 years ago