diff --git a/src/server/CMakeLists.txt b/src/server/CMakeLists.txt index ebf0e147d..d8dbdf7d5 100644 --- a/src/server/CMakeLists.txt +++ b/src/server/CMakeLists.txt @@ -98,6 +98,9 @@ endif() add_library(dfly_test_lib test_utils.cc) cxx_link(dfly_test_lib dragonfly_lib facade_test gtest_main_ext) +if (WITH_ASAN OR WITH_USAN) + target_compile_definitions(dfly_test_lib PRIVATE SANITIZERS) +endif() cxx_test(dragonfly_test dfly_test_lib LABELS DFLY) cxx_test(multi_test dfly_test_lib LABELS DFLY) diff --git a/src/server/rdb_test.cc b/src/server/rdb_test.cc index 861141106..6a3123578 100644 --- a/src/server/rdb_test.cc +++ b/src/server/rdb_test.cc @@ -42,14 +42,6 @@ class RdbTest : public BaseFamilyTest { protected: void SetUp(); - static void SetUpTestSuite() { - static bool init = true; - if (exchange(init, false)) { - fb2::SetDefaultStackResource(&fb2::std_malloc_resource, 32_KB); - } - BaseFamilyTest::SetUpTestSuite(); - } - io::FileSource GetSource(string name); std::error_code LoadRdb(const string& filename) { diff --git a/src/server/test_utils.cc b/src/server/test_utils.cc index a942a8e8c..34ef119da 100644 --- a/src/server/test_utils.cc +++ b/src/server/test_utils.cc @@ -34,6 +34,23 @@ ABSL_FLAG(bool, force_epoll, false, "If true, uses epoll api instead iouring to ABSL_DECLARE_FLAG(uint32_t, acllog_max_len); namespace dfly { +namespace { + +// Default stack size for fibers. We decrease it by 16 bytes because some allocators +// need additional 8-16 bytes for their internal structures, thus over reserving additional +// memory pages if using round sizes. +#ifdef NDEBUG +constexpr size_t kFiberDefaultStackSize = 32_KB - 16; +#elif defined SANITIZERS +// Increase stack size for sanitizers builds. +constexpr size_t kFiberDefaultStackSize = 64_KB - 16; +#else +// Increase stack size for debug builds. +constexpr size_t kFiberDefaultStackSize = 50_KB - 16; +#endif + +} // namespace + std::ostream& operator<<(std::ostream& os, const DbStats& stats) { os << "keycount: " << stats.key_count << ", tiered_size: " << stats.tiered_used_bytes << ", tiered_entries: " << stats.tiered_entries << "\n"; @@ -168,6 +185,12 @@ void BaseFamilyTest::SetUpTestSuite() { absl::SetFlag(&FLAGS_rss_oom_deny_ratio, -1); absl::SetFlag(&FLAGS_dbfilename, ""); + + static bool init = true; + if (exchange(init, false)) { + fb2::SetDefaultStackResource(&fb2::std_malloc_resource, kFiberDefaultStackSize); + } + init_zmalloc_threadlocal(mi_heap_get_backing()); // TODO: go over all env variables starting with FLAGS_ and make sure they are in the below list.