Skip to content

Commit

Permalink
close #8 : An unhandled exception might crash wpsagent and related WP…
Browse files Browse the repository at this point in the history
…S process
  • Loading branch information
geosolutions committed Jun 19, 2017
1 parent 5d81e2c commit dd83b1d
Showing 1 changed file with 22 additions and 3 deletions.
25 changes: 22 additions & 3 deletions src/wpsremote/servicebot.py
Expand Up @@ -162,7 +162,7 @@ def handle_execute(self, execute_message):
logger.info("created process " + self.service + " with PId " + str(invoked_process.pid) + " and cmd: " + cmd )

#use a parallel thread to wait the end of the request handler process and get the exit code of the just created asynchronous process computation
thread.start_new_thread(self.output_parser_verbose, (invoked_process,))
thread.start_new_thread(self.output_parser_verbose, (invoked_process, param_filepath,))

logger.info("end of execute message handler, going back in listening mode")

Expand Down Expand Up @@ -209,7 +209,7 @@ def handle_getloadavg(self, getloadavg_message):
# if return_code != 0:
# logger.critical("Process " + self.service + " PId " + str(invoked_process.pid) + " terminated with exit code " + str(return_code))

def output_parser_verbose(self, invoked_process):
def output_parser_verbose(self, invoked_process, param_filepath):
logger = logging.getLogger("servicebot.output_parser_verbose")
logger.info("wait for end of execution of created process " + self.service + ", PId " + str(invoked_process.pid) )

Expand Down Expand Up @@ -245,8 +245,23 @@ def output_parser_verbose(self, invoked_process):
msg = "Process " + self.service + " PId " + str(invoked_process.pid) + " terminated with exit code " + str(return_code)
logger.critical(msg)

logger.debug("gs_UID[%s] / gs_JID[%s]" % (gs_UID, gs_JID))
if gs_UID and gs_JID:
self.bus.SendMessage( busIndipendentMessages.ErrorMessage( gs_JID, msg + " Exception: " + str(gs_MSG), gs_UID ) )
elif self._remote_wps_endpoint:
self.bus.SendMessage( busIndipendentMessages.ErrorMessage( self._remote_wps_endpoint, msg ) )
else:
exe_msg = None
try:
logger.debug("Trying to recover Originator from Process Params!")
exe_msg = busIndipendentMessages.ExecuteMessage.deserialize( param_filepath )
if exe_msg.originator():
self.bus.SendMessage( busIndipendentMessages.ErrorMessage( exe_msg.originator(), msg + " Exception: remote process exception. Please check outputs!", exe_msg.UniqueId() ) )
except:
pass
if not exe_msg:
msg = "Process " + self.service + " PId " + str(invoked_process.pid) + " STALLED! Don't know who to send ERROR Message..."
logger.error(msg)
else:
msg = "Process " + self.service + " PId " + str(invoked_process.pid) + " terminated successfully!"
logger.debug(msg)
Expand All @@ -261,7 +276,11 @@ def send_error_message(self, msg):
# self.bus.xmpp.get_roster()
except:
logger.info( "[XMPP Disconnected]: Service "+str(self.service)+" Could not send error message to GeoServer Endpoint "+str(self._remote_wps_endpoint))
self.bus.SendMessage( busIndipendentMessages.ErrorMessage( self._remote_wps_endpoint, msg ) )
if self._remote_wps_endpoint:
self.bus.SendMessage( busIndipendentMessages.ErrorMessage( self._remote_wps_endpoint, msg ) )
else:
msg = "Process " + str(self.service) + " STALLED! Don't know who to send ERROR Message..."
logger.error(msg)

def disconnect(self):
self.bus.disconnect()
Expand Down

0 comments on commit dd83b1d

Please sign in to comment.