You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by br...@apache.org on 2020/10/13 18:23:28 UTC

[cassandra-dtest] branch master updated: Fix file size calculations racing with async file deletions

This is an automated email from the ASF dual-hosted git repository.

brandonwilliams pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/cassandra-dtest.git


The following commit(s) were added to refs/heads/master by this push:
     new 9500cb9  Fix file size calculations racing with async file deletions
9500cb9 is described below

commit 9500cb982b579dba95e0765aa1c13b436777c3be
Author: Adam Holmberg <ad...@datastax.com>
AuthorDate: Tue Oct 13 09:28:47 2020 -0500

    Fix file size calculations racing with async file deletions
    
    Patch by Adam Holmberg, reviewed by brandonwilliams for CASSANDRA-16196
---
 disk_balance_test.py | 26 +++++++++++++++++++-------
 1 file changed, 19 insertions(+), 7 deletions(-)

diff --git a/disk_balance_test.py b/disk_balance_test.py
index 91ba848..1ff16a4 100644
--- a/disk_balance_test.py
+++ b/disk_balance_test.py
@@ -1,6 +1,7 @@
 import os
 import os.path
 import re
+from time import sleep
 
 import pytest
 import logging
@@ -165,13 +166,24 @@ class TestDiskBalance(Tester):
             self.assert_balanced(node)
 
     def assert_balanced(self, node):
-        sums = []
-        for sstabledir in node.get_sstables_per_data_directory('keyspace1', 'standard1'):
-            sum = 0
-            for sstable in sstabledir:
-                sum = sum + os.path.getsize(sstable)
-            sums.append(sum)
-        assert_almost_equal(*sums, error=0.1, error_message=node.name)
+        old_sums = new_sums = None
+        # This extra looping and logic is to account for a race with obsolete file deletions, which are scheduled
+        # asynchronously in the server. We want to allow a chance to settle if files are still being removed
+        for _ in range(20):
+            old_sums = new_sums
+            new_sums = []
+            for sstabledir in node.get_sstables_per_data_directory('keyspace1', 'standard1'):
+                sum = 0
+                for sstable in sstabledir:
+                    sum = sum + os.path.getsize(sstable)
+                new_sums.append(sum)
+            if new_sums == old_sums:
+                break
+            sleep(2)
+
+        assert len(new_sums)
+        assert new_sums == old_sums  # we settled
+        assert_almost_equal(*new_sums, error=0.1, error_message=node.name)
 
     @since('3.10')
     def test_disk_balance_after_boundary_change_stcs(self):


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@cassandra.apache.org
For additional commands, e-mail: commits-help@cassandra.apache.org