]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
test/crimson: disable stall-detector on aarch64 to fix asan failures 60276/head
authorcailianchun <arm7star@qq.com>
Fri, 18 Oct 2024 02:39:46 +0000 (02:39 +0000)
committerRongqi Sun <sunrongqi@huawei.com>
Wed, 23 Oct 2024 03:00:55 +0000 (03:00 +0000)
Ceph crimson uses seastar on debug mode which would enable ASAN, while stall-detector uses glibc backtrace function which would cause ASAN failures on aarch64.
Reason see scylladb/scylladb#15090 (comment)

Because arm ci servers in lab are "elderly", causing stall happened often, this PR is to disable stall-detector until seastar upstream migrated to libunwind, see scylladb/seastar#1878
Seastar does not provide a function to disable stall-detector, at present, increase stall-detector time to avoid stall-detector timeout on arm platform.

fixes: https://tracker.ceph.com/issues/65635

Signed-off-by: cailianchun <arm7star@qq.com>
src/test/crimson/seastar_runner.h

index 63cc50d9f059d64cacd32c104f7a07f0be3c99c7..590eef13adf361bb1b41a579388ad103787d8534 100644 (file)
@@ -71,6 +71,19 @@ struct SeastarRunner {
     auto ret = app.run(argc, argv, [this] {
       on_end.reset(new seastar::readable_eventfd);
       return seastar::now().then([this] {
+// FIXME: The stall detector uses glibc backtrace function to
+// collect backtraces, this causes ASAN failures on ARM.
+// For now we just extend timeout duration to 10000h in order to
+// get the same effect as disabling the stall detector which is not provided by seastar.
+// the ticket about migrating to libunwind: https://github.com/scylladb/seastar/issues/1878
+// Will remove once the ticket fixed.
+// Ceph ticket see: https://tracker.ceph.com/issues/65635
+#ifdef __aarch64__
+       seastar::smp::invoke_on_all([] {
+         using namespace std::chrono;
+         seastar::engine().update_blocked_reactor_notify_ms(duration_cast<milliseconds>(10000h));
+       }).get();
+#endif
        begin_signaled = true;
        [[maybe_unused]] auto r = ::eventfd_write(begin_fd.get(), APP_RUNNING);
        assert(r == 0);