2752: arv-put displays progress quickly after resuming.
authorBrett Smith <brett@curoverse.com>
Thu, 29 May 2014 12:55:25 +0000 (08:55 -0400)
committerBrett Smith <brett@curoverse.com>
Thu, 29 May 2014 12:55:25 +0000 (08:55 -0400)
Refs #2752.

sdk/python/arvados/commands/put.py
sdk/python/tests/test_arv-put.py

index d67cf8494b485619310a5d5f0e0e7a2dd10e8a8d..1ccf7861144ce4b61043df96914c944f2089f778 100644 (file)
@@ -226,7 +226,10 @@ class ArvPutCollectionWriter(arvados.ResumableCollectionWriter):
     def __init__(self, cache=None, reporter=None, bytes_expected=None):
         self.bytes_written = 0
         self.cache = cache
-        self.report_func = reporter
+        if reporter is None:
+            self.report_progress = lambda bytes_w, bytes_e: None
+        else:
+            self.report_progress = reporter
         self.bytes_expected = bytes_expected
         super(ArvPutCollectionWriter, self).__init__()
 
@@ -244,6 +247,7 @@ class ArvPutCollectionWriter(arvados.ResumableCollectionWriter):
 
     def preresume_hook(self):
         print >>sys.stderr, "arv-put: Resuming previous upload.  Bypass with the --no-resume option."
+        self.report_progress(self.bytes_written, self.bytes_expected)
 
     def checkpoint_state(self):
         if self.cache is None:
@@ -261,8 +265,7 @@ class ArvPutCollectionWriter(arvados.ResumableCollectionWriter):
         bytes_buffered = self._data_buffer_len
         super(ArvPutCollectionWriter, self).flush_data()
         self.bytes_written += (bytes_buffered - self._data_buffer_len)
-        if self.report_func is not None:
-            self.report_func(self.bytes_written, self.bytes_expected)
+        self.report_progress(self.bytes_written, self.bytes_expected)
 
 
 def expected_bytes_for(pathlist):
index 4b7dc89e0b558f39e1d4881dd5da3f5e698f9fb8..9623923dadedb2e015200a70702fcf9dab657a92 100644 (file)
@@ -263,10 +263,11 @@ class ArvadosPutCollectionWriterTest(ArvadosKeepLocalStoreTestCase):
             cwriter.finish_current_stream()
             cwriter.checkpoint_state()
             # Restore a writer from that state and check its progress report.
+            # We're also checking that progress is reported immediately after
+            # resuming.
             progression, reporter = self.make_progress_tester()
             new_writer = arv_put.ArvPutCollectionWriter.from_cache(
                 self.cache, reporter, bytes_expected=4)
-            new_writer.flush_data()
             self.assertIn((4, 4), progression)