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