Fix bug w. 0 file syncing
authorStavros Sachtouris <saxtouri@admin.grnet.gr>
Wed, 11 Dec 2013 10:59:25 +0000 (12:59 +0200)
committerStavros Sachtouris <saxtouri@admin.grnet.gr>
Wed, 11 Dec 2013 11:03:06 +0000 (13:03 +0200)
kamaki/clients/pithos/__init__.py

index ef903f9..c6c51ba 100644 (file)
@@ -66,9 +66,11 @@ def _range_up(start, end, max_value, a_range):
     :returns: (str) a range string cut-off for the start-end range
         an empty response means this window is out of range
     """
-    assert start >= 0, '_range_up was called with start < 0'
-    assert end >= start, '_range_up was called with end < start'
-    assert end <= max_value, '_range_up was called with max_value < end'
+    assert start >= 0, '_range_up called w. start(%s) < 0' % start
+    assert end >= start, '_range_up called w. end(%s) < start(%s)' % (
+        end, start)
+    assert end <= max_value, '_range_up called w. max_value(%s) < end(%s)' % (
+        max_value, end)
     if not a_range:
         return '%s-%s' % (start, end)
     selected = []
@@ -729,19 +731,21 @@ class PithosClient(PithosRestClient):
             self._cb_next(len(blockids) - len(unsaved))
             if unsaved:
                 key = unsaved[0]
-                self._watch_thread_limit(flying.values())
-                self._thread2file(
-                    flying, blockid_dict, local_file, offset,
-                    **restargs)
-                end = total_size - 1 if (
-                    key + blocksize > total_size) else key + blocksize - 1
-                data_range = _range_up(key, end, total_size, filerange)
-                if not data_range:
-                    self._cb_next()
-                    continue
-                restargs['async_headers'] = {'Range': 'bytes=%s' % data_range}
-                flying[key] = self._get_block_async(obj, **restargs)
-                blockid_dict[key] = unsaved
+                if key:
+                    self._watch_thread_limit(flying.values())
+                    self._thread2file(
+                        flying, blockid_dict, local_file, offset,
+                        **restargs)
+                    end = total_size - 1 if (
+                        key + blocksize > total_size) else key + blocksize - 1
+                    data_range = _range_up(key, end, total_size, filerange)
+                    if not data_range:
+                        self._cb_next()
+                        continue
+                    restargs[
+                        'async_headers'] = {'Range': 'bytes=%s' % data_range}
+                    flying[key] = self._get_block_async(obj, **restargs)
+                    blockid_dict[key] = unsaved
 
         for thread in flying.values():
             thread.join()