test: Use linux-aio backend again on seastar-based tests

Since mid December, tests started failing with ENOMEM while
submitting I/O requests.

Logs of failed tests show IO uring was used as backend, but we
never deliberately switched to IO uring. Investigation pointed
to it happening accidentaly in commit 1bac6b75dc,
which turned on IO uring for allowing native tool in production,
and picked linux-aio backend explicitly when initializing Scylla.
But it missed that seastar-based tests would pick the default
backend, which is io_uring once enabled.

There's a reason we never made io_uring the default, which is
that it's not stable enough, and turns out we made the right
choice back then and it apparently continue to be unstable
causing flakiness in the tests.

Let's undo that accidental change in tests by explicitly
picking the linux-aio backend for seastar-based tests.
This should hopefully bring back stability.

Refs #21968.

Signed-off-by: Raphael S. Carvalho <raphaelsc@scylladb.com>

Closes scylladb/scylladb#22695
This commit is contained in:
Raphael S. Carvalho
2025-02-04 17:02:45 -03:00
committed by Avi Kivity
parent f7a729c3fd
commit ce65164315
3 changed files with 11 additions and 3 deletions

10
test.py
View File

@@ -390,6 +390,7 @@ class UnitTestSuite(TestSuite):
super().__init__(path, cfg, options, mode)
# Map of custom test command line arguments, if configured
self.custom_args = cfg.get("custom_args", {})
self.extra_cmdline_options = cfg.get("extra_scylla_cmdline_options", [])
# Map of tests that cannot run with compaction groups
self.all_can_run_compaction_groups_except = cfg.get("all_can_run_compaction_groups_except")
@@ -401,6 +402,10 @@ class UnitTestSuite(TestSuite):
test = UnitTest(self.next_id((shortname, self.suite_key)), shortname, suite, args)
self.tests.append(test)
def prepare_arg(self, arg):
extra_cmdline_options = ' '.join(self.extra_cmdline_options)
return f'{arg} {extra_cmdline_options}'
async def add_test(self, shortname, casename) -> None:
"""Create a UnitTest class with possibly custom command line
arguments and add it to the list of tests"""
@@ -413,7 +418,7 @@ class UnitTestSuite(TestSuite):
args = self.custom_args.get(shortname, ["-c2 -m2G"])
args = merge_cmdline_options(args, self.options.extra_scylla_cmdline_options)
for a in args:
await self.create_test(shortname, casename, self, a)
await self.create_test(shortname, casename, self, self.prepare_arg(a))
@property
def pattern(self) -> str:
@@ -531,13 +536,12 @@ class BoostTestSuite(UnitTestSuite):
# Skip tests which are not configured, and hence are not built
if os.path.join("test", self.name, execname if combined_test else shortname) not in self.options.tests:
return
# Default seastar arguments, if not provided in custom test options,
# are two cores and 2G of RAM
args = self.custom_args.get(shortname, ["-c2 -m2G"])
args = merge_cmdline_options(args, self.options.extra_scylla_cmdline_options)
for a in args:
await self.create_test(shortname, casename, self, a)
await self.create_test(shortname, casename, self, self.prepare_arg(a))
def junit_tests(self) -> Iterable['Test']:
"""Boost tests produce an own XML output, so are not included in a junit report"""

View File

@@ -1,4 +1,6 @@
type: boost
extra_scylla_cmdline_options:
- '--reactor-backend linux-aio'
# A list of long tests, which should be started early
run_first:
- index_with_paging_test

View File

@@ -1 +1,3 @@
type: boost
extra_scylla_cmdline_options:
- '--reactor-backend linux-aio'