From 20d6532342ae0ef089d7e785d80ab4613d107563 Mon Sep 17 00:00:00 2001
From: Giorgos Korfiatis <gkorf@grnet.gr>
Date: Fri, 16 Oct 2015 12:37:38 +0300
Subject: [PATCH] handle token renewal and other pithos errors

---
 agkyra/protocol.py             | 10 ++++++++++
 agkyra/syncer/messaging.py     | 14 ++++++++++++++
 agkyra/syncer/pithos_client.py |  6 +++++-
 3 files changed, 29 insertions(+), 1 deletion(-)

diff --git a/agkyra/protocol.py b/agkyra/protocol.py
index 6654546..393959a 100644
--- a/agkyra/protocol.py
+++ b/agkyra/protocol.py
@@ -455,6 +455,16 @@ class WebSocketProtocol(WebSocket):
                         'STOP BACKEND, %s'% getattr(msg, 'objname', ''))
                     self.set_status(code=STATUS['CONTAINER ERROR'])
                     self.syncer.stop_all_daemons()
+                elif isinstance(msg, messaging.PithosAuthTokenError):
+                    LOGGER.debug(
+                        'STOP BACKEND, %s'% getattr(msg, 'objname', ''))
+                    self.set_status(code=STATUS['TOKEN ERROR'])
+                    self.syncer.stop_all_daemons()
+                elif isinstance(msg, messaging.PithosGenericError):
+                    LOGGER.debug(
+                        'STOP BACKEND, %s'% getattr(msg, 'objname', ''))
+                    self.set_status(code=STATUS['CRITICAL ERROR'])
+                    self.syncer.stop_all_daemons()
                 LOGGER.debug('Backend message: %s %s' % (msg.name, type(msg)))
                 # Limit the amount of messages consumed each time
                 max_consumption -= 1
diff --git a/agkyra/syncer/messaging.py b/agkyra/syncer/messaging.py
index 3349423..67df4c7 100644
--- a/agkyra/syncer/messaging.py
+++ b/agkyra/syncer/messaging.py
@@ -191,3 +191,17 @@ class PithosSyncEnabled(Message):
     def __init__(self, *args, **kwargs):
         Message.__init__(self, *args, **kwargs)
         self.logger.info("Pithos sync is enabled")
+
+
+class PithosGenericError(Message):
+    def __init__(self, *args, **kwargs):
+        Message.__init__(self, *args, **kwargs)
+        self.exc = kwargs["exc"]
+        self.logger.error(self.exc)
+
+
+class PithosAuthTokenError(Message):
+    def __init__(self, *args, **kwargs):
+        Message.__init__(self, *args, **kwargs)
+        self.exc = kwargs["exc"]
+        self.logger.error(self.exc)
diff --git a/agkyra/syncer/pithos_client.py b/agkyra/syncer/pithos_client.py
index 42f37f9..8a20eb5 100644
--- a/agkyra/syncer/pithos_client.py
+++ b/agkyra/syncer/pithos_client.py
@@ -287,8 +287,12 @@ class PithosFileClient(FileClient):
                 self.settings.set_pithos_enabled(False)
                 msg = messaging.PithosSyncDisabled(logger=logger)
                 self.settings.messager.put(msg)
+            elif e.status == 401:
+                msg = messaging.PithosAuthTokenError(logger=logger, exc=e)
+                self.settings.messager.put(msg)
             else:
-                logger.error(e)
+                msg = messaging.PithosGenericError(logger=logger, exc=e)
+                self.settings.messager.put(msg)
             return {}
         self.objects = objects
         upstream_all = {}
-- 
GitLab