You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by dc...@apache.org on 2022/05/04 22:13:59 UTC

[cassandra-dtest] branch trunk updated: Fix flaky python-tests due to connection getting closed Patch by David Capwell; reviewed by Caleb Rackliffe for CASSANDRA-17594

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

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


The following commit(s) were added to refs/heads/trunk by this push:
     new be48c417 Fix flaky python-tests due to connection getting closed Patch by David Capwell; reviewed by Caleb Rackliffe for CASSANDRA-17594
be48c417 is described below

commit be48c417e6bbbd7c58f43ed001c9a2209a6339ab
Author: David Capwell <dc...@gmail.com>
AuthorDate: Tue May 3 11:49:14 2022 -0700

    Fix flaky python-tests due to connection getting closed
    Patch by David Capwell; reviewed by Caleb Rackliffe for CASSANDRA-17594
---
 conftest.py                 | 12 +++++-------
 dtest_setup.py              | 28 ++++++++++++++++++++++++----
 repair_tests/repair_test.py |  3 ++-
 topology_test.py            |  2 +-
 4 files changed, 32 insertions(+), 13 deletions(-)

diff --git a/conftest.py b/conftest.py
index 347c6965..19c30832 100644
--- a/conftest.py
+++ b/conftest.py
@@ -219,15 +219,16 @@ def fixture_log_test_name_and_date(request, fixture_logging_setup):
 def _filter_errors(dtest_setup, errors):
     """Filter errors, removing those that match ignore_log_patterns in the current DTestSetup"""
     for e in errors:
+        e = repr(e)
         for pattern in dtest_setup.ignore_log_patterns:
-            if re.search(pattern, repr(e)):
+            if re.search(pattern, e) or re.search(pattern, e.replace('\n', ' ')):
                 break
         else:
             yield e
 
 
 def check_logs_for_errors(dtest_setup):
-    errors = []
+    all_errors = []
     for node in dtest_setup.cluster.nodelist():
         if not os.path.exists(node.logfilename()):
             continue
@@ -240,11 +241,8 @@ def check_logs_for_errors(dtest_setup):
                     error_str = error.strip()
 
                 if error_str:
-                    logger.error("Unexpected error in {node_name} log, error: \n{error}"
-                                 .format(node_name=node.name, error=error_str))
-                    errors.append(error_str)
-                    break
-    return errors
+                    all_errors.append("[{node_name}] {error}".format(node_name=node.name, error=error_str))
+    return all_errors
 
 
 def copy_logs(request, cluster, directory=None, name=None):
diff --git a/dtest_setup.py b/dtest_setup.py
index d04fb001..6a396b8e 100644
--- a/dtest_setup.py
+++ b/dtest_setup.py
@@ -44,13 +44,18 @@ def retry_till_success(fun, *args, **kwargs):
                 # brief pause before next attempt
                 time.sleep(0.25)
 
+def default_ignore_log_patterns():
+    # to allow tests to append to the list, make sure to create a new list as the output
+    # to this function, else multiple tests could corrupt the default set
+    return ['.*\[epollEventLoopGroup-.*\].*- Unknown exception in client networking.*: Connection reset by peer']
+
 
 class DTestSetup(object):
     def __init__(self, dtest_config=None, setup_overrides=None, cluster_name="test"):
         self.dtest_config = dtest_config
         self.setup_overrides = setup_overrides
         self.cluster_name = cluster_name
-        self.ignore_log_patterns = []
+        self._ignore_log_patterns = default_ignore_log_patterns()
         self.cluster = None
         self.cluster_options = []
         self.replacement_node = None
@@ -72,6 +77,23 @@ class DTestSetup(object):
         self.create_cluster_func = None
         self.iterations = 0
 
+    def set_ignore_log_patterns(self, other):
+        if self._ignore_log_patterns == None:
+            self._ignore_log_patterns = default_ignore_log_patterns()
+        # iteration is used here to allow [] and () patterns to work... anything iterable is allowed
+        for a in other:
+            self._ignore_log_patterns.append(a)
+
+    def get_ignore_log_patterns(self):
+        if self._ignore_log_patterns == None:
+            self._ignore_log_patterns = default_ignore_log_patterns()
+        return self._ignore_log_patterns
+
+    def del_ignore_log_patterns(self):
+        del self._ignore_log_patterns
+
+    ignore_log_patterns = property(get_ignore_log_patterns, set_ignore_log_patterns, del_ignore_log_patterns)
+
     def get_test_path(self):
         test_path = tempfile.mkdtemp(prefix='dtest-')
 
@@ -289,11 +311,9 @@ class DTestSetup(object):
 
     def __filter_errors(self, errors):
         """Filter errors, removing those that match self.ignore_log_patterns"""
-        if not hasattr(self, 'ignore_log_patterns'):
-            self.ignore_log_patterns = []
         for e in errors:
             for pattern in self.ignore_log_patterns:
-                if re.search(pattern, e):
+                if re.search(pattern, e) or re.search(pattern, e.replace('\n', ' ')):
                     break
             else:
                 yield e
diff --git a/repair_tests/repair_test.py b/repair_tests/repair_test.py
index 17e124a3..af536a76 100644
--- a/repair_tests/repair_test.py
+++ b/repair_tests/repair_test.py
@@ -1267,7 +1267,8 @@ class TestRepair(BaseRepairTest):
             "Sync failed between .* and .*",
             "failed to send a stream message/file to peer",
             "failed to send a stream message/data to peer",
-            "Remote peer .* failed stream session"
+            "Remote peer .* failed stream session",
+            "org.apache.cassandra.repair.SomeRepairFailedException: null"
         ]
 
         # stream session will be closed upon EOF, see CASSANDRA-15666
diff --git a/topology_test.py b/topology_test.py
index ca9441b7..11485e0f 100644
--- a/topology_test.py
+++ b/topology_test.py
@@ -218,7 +218,7 @@ class TestTopology(Tester):
         self.fixture_dtest_setup.ignore_log_patterns = [r'Streaming error occurred',
                                                         r'Error while decommissioning node',
                                                         r'Remote peer 127.0.0.2 failed stream session',
-                                                        r'Remote peer 127.0.0.2:7000 failed stream session']
+                                                        r'Remote peer \/?127.0.0.2:7000 failed stream session']
         cluster = self.cluster
         cluster.set_configuration_options(values={'stream_throughput_outbound_megabits_per_sec': 1})
         cluster.populate(3, install_byteman=True).start()


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