17465: Fixed tests and made the suite less noisy.
authorLucas Di Pentima <lucas.dipentima@curii.com>
Mon, 7 Jun 2021 14:02:22 +0000 (11:02 -0300)
committerLucas Di Pentima <lucas.dipentima@curii.com>
Mon, 7 Jun 2021 14:02:22 +0000 (11:02 -0300)
Arvados-DCO-1.1-Signed-off-by: Lucas Di Pentima <lucas.dipentima@curii.com>

sdk/python/arvados/keep.py
sdk/python/tests/test_keep_client.py

index 1d4092d5599b60a7a3315b1c49c31af8661023ad..86b1d91b8246ef20ed860cdb516ca5d4a53624b9 100644 (file)
@@ -570,8 +570,8 @@ class KeepClient(object):
             self.confirmed_storage_classes = {}
             self.response = None
             self.storage_classes_tracking = True
-            self.queue_data_lock = threading.Lock()
-            self.pending_tries = max(copies, len(classes))+1
+            self.queue_data_lock = threading.RLock()
+            self.pending_tries = max(copies, len(classes))
             self.pending_tries_notification = threading.Condition()
 
         def write_success(self, response, replicas_nr, classes_confirmed):
@@ -585,6 +585,7 @@ class KeepClient(object):
                             self.confirmed_storage_classes[st_class] += st_copies
                         except KeyError:
                             self.confirmed_storage_classes[st_class] = st_copies
+                    self.pending_tries = max(self.wanted_copies - self.successful_copies, len(self.pending_classes()))
                 self.response = response
             with self.pending_tries_notification:
                 self.pending_tries_notification.notify_all()
index cdc492b5144154d70586b779122cb7688bbe5df3..0eefa586d9c436413e2e1934d9cf401e4ed17467 100644 (file)
@@ -607,14 +607,15 @@ class KeepStorageClassesTestCase(unittest.TestCase, tutil.ApiClientMock):
             # wanted_copies, wanted_classes, confirmed_copies, confirmed_classes, return_code
             [ 1, ['foo'], 1, 'bar=1', 200],
             [ 1, ['foo'], 1, None, 503],
-            [ 2, ['foo'], 1, 'bar=1, foo=1', 200],
-            [ 2, ['foo, bar'], 1, 'bar=2, foo=1', 200],
+            [ 2, ['foo'], 1, 'bar=1, foo=0', 200],
+            [ 3, ['foo'], 1, 'bar=1, foo=1', 200],
+            [ 3, ['foo', 'bar'], 1, 'bar=2, foo=1', 200],
         ]
         for w_copies, w_classes, c_copies, c_classes, return_code in cases:
             headers = {'x-keep-replicas-stored': c_copies}
             if c_classes is not None:
                 headers.update({'x-keep-storage-classes-confirmed': c_classes})
-            with tutil.mock_keep_responses(self.locator, return_code, **headers):
+            with tutil.mock_keep_responses(self.locator, return_code, return_code, **headers):
                 case_desc = 'wanted_copies={}, wanted_classes="{}", confirmed_copies={}, confirmed_classes="{}"'.format(w_copies, ', '.join(w_classes), c_copies, c_classes)
                 with self.assertRaises(arvados.errors.KeepWriteError, msg=case_desc):
                     self.keep_client.put(self.data, copies=w_copies, classes=w_classes)