Skip to content
Snippets Groups Projects
Commit 1abae87e authored by Jorrit Schaap's avatar Jorrit Schaap
Browse files

SW-699: proper use of exceptions in handling message

parent b631a2f9
No related branches found
No related tags found
No related merge requests found
...@@ -70,20 +70,17 @@ class IngestEventMessageHandlerForMomAdapter(IngestEventMessageHandler): ...@@ -70,20 +70,17 @@ class IngestEventMessageHandlerForMomAdapter(IngestEventMessageHandler):
try: try:
# try 'normal' handling of msg, should result in normal calls to onJob* methods # try 'normal' handling of msg, should result in normal calls to onJob* methods
# but MoM (via the momrpc) is notorious in properly handling the messages.... # but MoM (via the momrpc) is notorious in properly handling the messages....
if super(IngestEventMessageHandlerForMomAdapter, self).handle_message(msg): super().handle_message(msg)
return True
except Exception as e: except Exception as e:
# ... so handle the exceptions... # ... so handle the exceptions...
logger.warning(e) logger.warning(e)
# ... and try to deal with MoM's quirks. # ... and try to deal with MoM's quirks.
if self._remove_unknown_export_job_if_needed(msg): if self._remove_unknown_export_job_if_needed(msg):
return True return True
if self._resubmit_message_if_applicable(msg):
return True
return False if self._resubmit_message_if_applicable(msg):
return True
def onJobStarted(self, job_dict): def onJobStarted(self, job_dict):
self._update_mom_status_if_applicable(job_dict, JobProducing) self._update_mom_status_if_applicable(job_dict, JobProducing)
...@@ -208,34 +205,31 @@ class IngestEventMessageHandlerForMomAdapter(IngestEventMessageHandler): ...@@ -208,34 +205,31 @@ class IngestEventMessageHandlerForMomAdapter(IngestEventMessageHandler):
return False return False
def _resubmit_message_if_applicable(self, msg: EventMessage) -> bool: def _resubmit_message_if_applicable(self, msg: EventMessage) -> bool:
try: if msg and msg.content:
if msg and msg.content: retry_count = msg.content.get('retry_count', 0)
retry_count = msg.content.get('retry_count', 0)
if retry_count < min(MAX_NR_OF_RETRIES, 127): # mom can't handle more than 127 status updates...
if retry_count < min(MAX_NR_OF_RETRIES, 127): # mom can't handle more than 127 status updates... retry_count += 1
retry_count += 1 try:
try: retry_timestamp = msg.content.get('retry_timestamp', datetime.utcnow())
retry_timestamp = msg.content.get('retry_timestamp', datetime.utcnow()) ago = totalSeconds(datetime.utcnow() - retry_timestamp)
ago = totalSeconds(datetime.utcnow() - retry_timestamp) time.sleep(max(0,
time.sleep(max(0, 2 * retry_count - ago)) # wait longer between each retry, other messages can be processed in between
2 * retry_count - ago)) # wait longer between each retry, other messages can be processed in between except Exception as e:
except Exception as e: # just continue
# just continue logger.warning(e)
logger.warning(e)
# set/update retry values
# set/update retry values msg.content['retry_count'] = retry_count
msg.content['retry_count'] = retry_count msg.content['retry_timestamp'] = datetime.utcnow()
msg.content['retry_timestamp'] = datetime.utcnow()
# resubmit
# resubmit new_msg = EventMessage(subject=msg.subject, content=msg.content)
new_msg = EventMessage(subject=msg.subject, content=msg.content) new_msg.ttl = 48 * 3600 # remove message from queue's when not picked up within 48 hours
new_msg.ttl = 48 * 3600 # remove message from queue's when not picked up within 48 hours logger.info('resubmitting unhandled message to back of queue %s: %s %s', self.exchange, new_msg.subject,
logger.info('resubmitting unhandled message to back of queue %s: %s %s', self.exchange, new_msg.subject, str(new_msg.content).replace('\n', ' '))
str(new_msg.content).replace('\n', ' ')) self._tobus.send(new_msg)
self._tobus.send(new_msg) return True
return True
except Exception as e:
logger.error("_resubmit_message_if_applicable error: %s", e)
return False return False
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment