#465 [frontend] pg#369 Make pagure-events service load-balanceable
Merged 5 years ago by msuchy. Opened 5 years ago by clime.

@@ -14,7 +14,7 @@ 

      os.path.dirname(os.path.dirname(os.path.realpath(__file__)))

  )

  

- from coprs import db, app

+ from coprs import db, app, models

  from coprs.logic.coprs_logic import CoprDirsLogic

  from coprs.logic.builds_logic import BuildsLogic

  from coprs.logic.complex_logic import ComplexLogic
@@ -74,12 +74,15 @@ 

          else:

              package = self.package

  

-         build = BuildsLogic.rebuild_package(

+         db.session.execute('LOCK TABLE build IN EXCLUSIVE MODE')

+         if models.Build.query.filter(models.Build.scm_object_url == scm_object_url).first():

+             log.info('\t -> Build for {} already exists.'.format(scm_object_url))

+             return None

+ 

+         return BuildsLogic.rebuild_package(

              package, source_dict_update, copr_dir, update_callback,

              scm_object_type, scm_object_id, scm_object_url)

  

-         return build

- 

      @classmethod

      def get_candidates_for_rebuild(cls, clone_url):

          if db.engine.url.drivername == 'sqlite':
@@ -262,7 +265,7 @@ 

                      and (not pkg.committish or event_info.branch_to.endswith(pkg.committish))

                      and pkg.is_dir_in_commit(raw_commit_text)):

  

-                 log.info('\t -> rebuilding.')

+                 log.info('\t -> accepted.')

  

                  if event_info.object_type == 'pull-request':

                      dirname = pkg.copr.name + ':pr:' + str(event_info.object_id)
@@ -284,16 +287,22 @@ 

                      'committish': event_info.end_commit,

                  }

  

-                 build = pkg.build(

-                     source_dict_update,

-                     copr_dir,

-                     update_callback,

-                     event_info.object_type,

-                     event_info.object_id,

-                     scm_object_url

-                 )

-                 log.info('\t -> {}'.format(build.to_dict()))

-                 db.session.commit()

+                 try:

+                     build = pkg.build(

+                         source_dict_update,

+                         copr_dir,

+                         update_callback,

+                         event_info.object_type,

+                         event_info.object_id,

+                         scm_object_url

+                     )

+                     if build:

+                         log.info('\t -> {}'.format(build.to_dict()))

+                 except Exception as e:

+                     log.error(str(e))

+                     db.session.rollback()

+                 else:

+                     db.session.commit()

              else:

                  log.info('\t -> skipping.')

  

Fixes https://pagure.io/copr/copr/issue/369 by asking db if build with the same scm_url doesn't exist already.

1 new commit added

  • [frontend] add try-except block to rollback session properly if an error ocurrs
5 years ago

Pull-Request has been merged by msuchy

5 years ago
Metadata