From 6c3923c222a1c1b8661515fbb02a80aa19c84461 Mon Sep 17 00:00:00 2001
From: Romain Broucquart <romain.broucquart@synchrotron-soleil.fr>
Date: Fri, 17 Sep 2021 17:35:26 +0200
Subject: [PATCH] [ArchiveExtractor] Add retry on DevFailed

---
 ArchiveExtractor.py | 30 ++++++++++++++++++------------
 1 file changed, 18 insertions(+), 12 deletions(-)

diff --git a/ArchiveExtractor.py b/ArchiveExtractor.py
index a1c0e09..1c2c98c 100755
--- a/ArchiveExtractor.py
+++ b/ArchiveExtractor.py
@@ -455,18 +455,24 @@ if __name__ == "__main__":
     for attr in attributes:
         logger.info("Extracting attribute %s..."%attr)
 
-        try:
-            datevalue = query_ADB_BetweenDates(attr, args.dateStart, args.dateStop, extractor)
-
-            # Add to result dictionnary
-            results[attr] = datevalue
-
-        except ValueError as e:
-            logger.debug("ErrorMsg: %s"%e)
-            logger.warning("Failed to extract %s. Skipping..."%attr)
-        except tango.CommunicationFailed:
-            logger.warning("Failed to extract %s. Skipping..."%attr)
-            logger.error("The device %s might have crash.\n"+
+        for attempt in range(3):
+            try:
+                datevalue = query_ADB_BetweenDates(attr, args.dateStart, args.dateStop, extractor)
+
+                # Add to result dictionnary
+                results[attr] = datevalue
+
+            except ValueError as e:
+                logger.debug("ErrorMsg: %s"%e)
+                logger.warning("Failed to extract %s. Skipping..."%attr)
+            except (tango.CommunicationFailed, tango.DevFailed) as e:
+                # retry
+                logger.debug("ErrorMsg: %s"%e)
+                logger.warning("Failed to extract %s. Retry..."%attr)
+            break
+
+        else:
+            logger.error("The device %s might have crash.\n"%extractor+
                     "You should check with Jive and probably restart with Astor.\n")
 
         # Save all at each step
-- 
GitLab