diff --git a/hub/kojihub.py b/hub/kojihub.py index 2f0ea421..d8128e6f 100644 --- a/hub/kojihub.py +++ b/hub/kojihub.py @@ -5421,10 +5421,13 @@ def _singleValue(query, values=None, strict=True): return None -def _dml(operation, values): - """Run an insert, update, or delete. Return number of rows affected""" +def _dml(operation, values, log=True): + """Run an insert, update, or delete. Return number of rows affected + If log is False, errors will not be logged. It makes sense only for + queries which are expected to fail (LOCK NOWAIT) + """ c = context.cnx.cursor() - c.execute(operation, values) + c.execute(operation, values, log=log) ret = c.rowcount logger.debug("Operation affected %s row(s)", ret) c.close() diff --git a/koji/db.py b/koji/db.py index 31043be8..7b21eb77 100644 --- a/koji/db.py +++ b/koji/db.py @@ -132,7 +132,7 @@ class CursorWrapper: params[i] = tuple(item) return sql, params - def execute(self, operation, parameters=()): + def execute(self, operation, parameters=(), log=True): debug = self.logger.isEnabledFor(logging.DEBUG) operation, parameters = self.preformat(operation, parameters) if debug: @@ -141,7 +141,8 @@ class CursorWrapper: try: ret = self.cursor.execute(operation, parameters) except Exception: - self.logger.error('Query failed. Query was: %s', self.quote(operation, parameters)) + if log: + self.logger.error('Query failed. Query was: %s', self.quote(operation, parameters)) raise if debug: self.logger.debug("Execute operation completed in %.4f seconds", time.time() - start) diff --git a/plugins/hub/protonmsg.py b/plugins/hub/protonmsg.py index e415bf0b..0975f66c 100644 --- a/plugins/hub/protonmsg.py +++ b/plugins/hub/protonmsg.py @@ -356,7 +356,7 @@ def handle_db_msgs(urls, CONFIG): # we're running in postCommit, so we need to handle new transaction c.execute('BEGIN') try: - c.execute('LOCK TABLE proton_queue IN ACCESS EXCLUSIVE MODE NOWAIT') + c.execute('LOCK TABLE proton_queue IN ACCESS EXCLUSIVE MODE NOWAIT', log=False) except psycopg2.OperationalError: LOG.debug('skipping db queue due to lock') return