#157 Handle more fedora-messaging exceptions when publishing messages
Closed 2 years ago by lholecek. Opened 2 years ago by adamwill.
taskotron/ adamwill/resultsdb more-messaging-exceptions  into  develop

file modified
+9 -1
@@ -31,7 +31,7 @@ 

  

  try:

      from fedora_messaging.api import Message, publish

-     from fedora_messaging.exceptions import PublishReturned, ConnectionException

+     from fedora_messaging.exceptions import PublishReturned, PublishTimeout, PublishForbidden, ConnectionException

  except ImportError:

      if app.config.get('MESSAGE_BUS_PUBLISH_TASKOTRON') or app.config.get('MESSAGE_BUS_PLUGIN') == 'fedmsg':

          log.error('fedora-messaging must be installed if "MESSAGE_BUS_PUBLISH_TASKOTRON" is '
@@ -113,6 +113,10 @@ 

          log.debug("Message published")

      except PublishReturned as e:

          log.error('Fedora Messaging broker rejected message {}: {}'.format(msg.id, e))

+     except PublishTimeout:

+         log.error('Timeout publishing message {}'.format(msg.id))

+     except PublishForbidden as e:

+         log.error('Permission error publishing message {}: {}'.format(msg.id, e))

      except ConnectionException as e:

          log.error('Error sending message {}: {}'.format(msg.id, e.reason))

  
@@ -165,6 +169,10 @@ 

              log.debug("Message published")

          except PublishReturned as e:

              log.error('Fedora Messaging broker rejected message {}: {}'.format(msg.id, e))

+         except PublishTimeout:

+             log.error('Timeout publishing message {}'.format(msg.id))

+         except PublishForbidden as e:

+             log.error('Permission error publishing message {}: {}'.format(msg.id, e))

          except ConnectionException as e:

              log.error('Error sending message {}: {}'.format(msg.id, e.reason))

  

As well as PublishReturned and ConnectionException, messaging
can raise PublishTimeout (publishing timed out) or
PublishForbidden (publishing was denied for lack of permission)
when you attempt to publish a message. We should handle these
as well. At present it seems like if this happens, the exception
being unhandled ultimately causes WSGI to return a 500 or 504
error to the client that submitted the result; the client may
then try and submit the result again, leading to it being
duplicated many times. If we handle the exception instead, the
client should get a successful response and not re-submit the
result. The message not being published is still a problem, but
probably not as bad as clients constantly re-submitted results
forever.

Signed-off-by: Adam Williamson awilliam@redhat.com

LGTM but someone else should also review. cc @jskladan

BTW, I'm trying to move git repos for gating services (Greenwave, WaiverDB, ResultsDB) to GitHub (see #156). We have few new commits there which where not merged to Pagure (see https://github.com/release-engineering/resultsdb). I can merge this change there too if you don't want to create PR on github instead.

Pull-Request has been closed by lholecek

2 years ago

Oh sorry, I forgot to move it to github. Thanks for handling that.

Metadata