From d1bfa2412e417b455ba716e42e180d964aec7339 Mon Sep 17 00:00:00 2001 From: iLLiCiTiT Date: Wed, 23 Oct 2019 14:33:01 +0200 Subject: [PATCH] pymongo connection error cause that subprocess will end --- .../session_processor.py | 28 +++++++++++-------- .../parallel_event_server/sub_event_storer.py | 13 ++++++--- 2 files changed, 25 insertions(+), 16 deletions(-) diff --git a/pype/ftrack/ftrack_server/parallel_event_server/session_processor.py b/pype/ftrack/ftrack_server/parallel_event_server/session_processor.py index 55bdf0fba9..d51da28938 100644 --- a/pype/ftrack/ftrack_server/parallel_event_server/session_processor.py +++ b/pype/ftrack/ftrack_server/parallel_event_server/session_processor.py @@ -31,11 +31,14 @@ class ProcessEventHub(ftrack_api.event.hub.EventHub): super(ProcessEventHub, self).__init__(*args, **kwargs) def prepare_dbcon(self): - self.dbcon.install() - if not self.is_table_created: - self.dbcon.create_table(self.table_name, capped=False) - self.dbcon.active_table = self.table_name - self.is_table_created = True + try: + self.dbcon.install() + if not self.is_table_created: + self.dbcon.create_table(self.table_name, capped=False) + self.dbcon.active_table = self.table_name + self.is_table_created = True + except pymongo.errors.AutoReconnect: + sys.exit(0) def wait(self, duration=None): '''Wait for events and handle as they arrive. @@ -46,7 +49,6 @@ class ProcessEventHub(ftrack_api.event.hub.EventHub): ''' started = time.time() - self.prepare_dbcon() while True: try: @@ -55,11 +57,14 @@ class ProcessEventHub(ftrack_api.event.hub.EventHub): if not self.load_events(): time.sleep(0.5) else: - self._handle(event) - self.dbcon.update_one( - {"id": event["id"]}, - {"$set": {"pype_data.is_processed": True}} - ) + try: + self._handle(event) + self.dbcon.update_one( + {"id": event["id"]}, + {"$set": {"pype_data.is_processed": True}} + ) + except pymongo.errors.AutoReconnect: + sys.exit(0) # Additional special processing of events. if event['topic'] == 'ftrack.meta.disconnected': break @@ -78,7 +83,6 @@ class ProcessEventHub(ftrack_api.event.hub.EventHub): } try: event = ftrack_api.event.base.Event(**new_event_data) - print(event) except Exception: self.logger.exception(L( 'Failed to convert payload into event: {0}', diff --git a/pype/ftrack/ftrack_server/parallel_event_server/sub_event_storer.py b/pype/ftrack/ftrack_server/parallel_event_server/sub_event_storer.py index 295504f389..bf2dd0eefa 100644 --- a/pype/ftrack/ftrack_server/parallel_event_server/sub_event_storer.py +++ b/pype/ftrack/ftrack_server/parallel_event_server/sub_event_storer.py @@ -23,9 +23,12 @@ table_name = "ftrack_events" ignore_topics = [] def install_db(): - dbcon.install() - dbcon.create_table(table_name, capped=False) - dbcon.active_table = table_name + try: + dbcon.install() + dbcon.create_table(table_name, capped=False) + dbcon.active_table = table_name + except pymongo.errors.AutoReconnect: + sys.exit(0) def launch(event): if event.get("topic") in ignore_topics: @@ -47,6 +50,9 @@ def launch(event): except pymongo.errors.DuplicateKeyError: log.debug("Event: {} already exists".format(event_id)) + except pymongo.errors.AutoReconnect: + sys.exit(0) + except Exception as exc: log.error( "Event: {} failed to store".format(event_id), @@ -76,7 +82,6 @@ def main(args): session = StorerSession(auto_connect_event_hub=True, sock=sock) register(session) server = FtrackServer("event") - log.info(os.environ["FTRACK_EVENTS_PATH"]) log.debug("Launched Ftrack Event storer") server.run_server(session, load_files=False)