From 965ccc32f68d8b57550a54b53da227ce37e25533 Mon Sep 17 00:00:00 2001 From: Radoslaw Zarzynski Date: Sun, 3 Nov 2019 13:22:30 +0100 Subject: [PATCH] Revert "Revert "test: librados startup/shutdown racer test"" This reverts commit 3010d3a531ab21e8d3d2753b2a40526fd33589c9. Signed-off-by: Radoslaw Zarzynski --- src/test/librados/misc.cc | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/src/test/librados/misc.cc b/src/test/librados/misc.cc index 5f7fdd889f5..0c351db2d26 100644 --- a/src/test/librados/misc.cc +++ b/src/test/librados/misc.cc @@ -16,6 +16,8 @@ #include "test/librados/test.h" #include "test/librados/TestCase.h" #include "gtest/gtest.h" +#include +#include #include #include @@ -308,3 +310,36 @@ TEST_F(LibRadosMisc, MinCompatClient) { ASSERT_LE(-1, require_min_compat_client); ASSERT_GT(CEPH_RELEASE_MAX, require_min_compat_client); } + +static void shutdown_racer_func() +{ + const int niter = 32; + rados_t rad; + int i; + + for (i = 0; i < niter; ++i) { + ASSERT_EQ("", connect_cluster(&rad)); + rados_shutdown(rad); + } +} + +// See trackers #20988 and #42026 +TEST_F(LibRadosMisc, ShutdownRace) +{ + const int nthreads = 128; + std::thread threads[nthreads]; + + // Need a bunch of fd's for this test + struct rlimit rold, rnew; + ASSERT_EQ(getrlimit(RLIMIT_NOFILE, &rold), 0); + rnew = rold; + rnew.rlim_cur = rnew.rlim_max; + ASSERT_EQ(setrlimit(RLIMIT_NOFILE, &rnew), 0); + + for (int i = 0; i < nthreads; ++i) + threads[i] = std::thread(shutdown_racer_func); + + for (int i = 0; i < nthreads; ++i) + threads[i].join(); + ASSERT_EQ(setrlimit(RLIMIT_NOFILE, &rold), 0); +} -- 2.47.3