retry-for-empty-xml-response
authorZhang Qiang <qiang.z.zhang@intel.com>
Thu, 8 May 2014 05:53:53 +0000 (13:53 +0800)
committerZhang Qiang <qiang.z.zhang@intel.com>
Thu, 8 May 2014 05:53:53 +0000 (13:53 +0800)
osc/core.py

index 72960b626beef1e75ced5d6cc40d9bd5d18115cb..4d53bb8ab11ffc2b62df0155e0cbb95b88c59dbd 100644 (file)
@@ -1489,9 +1489,25 @@ class Package:
         store_write_string(self.absdir, '_files', meta + '\n')
 
     def get_files_meta(self, revision='latest', skip_service=True):
-        fm = show_files_meta(self.apiurl, self.prjname, self.name, revision=revision, meta=self.meta)
+        from time import sleep
+
+        retry_count = 3
+        while retry_count > 0:
+            fm = show_files_meta(self.apiurl, self.prjname, self.name,
+                                      revision=revision, meta=self.meta)
+            try:
+                root = ET.fromstring(fm)
+                break
+            except:
+                print 'corrupted or empty obs server response ,retrying ...'
+                sleep(1)
+                retry_count -= 1
+
+        if not retry_count:
+            # all the re-try failed, abort
+            raise oscerr.OscIOError(None, 'cannet fetch files meta xml from server')
+
         # look for "too large" files according to size limit and mark them
-        root = ET.fromstring(fm)
         for e in root.findall('entry'):
             size = e.get('size')
             if size and self.size_limit and int(size) > self.size_limit \