From ce42ae6ffd0429a764a3dd9e6afefeb5b1b541a7 Mon Sep 17 00:00:00 2001 From: Andrew Kryczka Date: Tue, 7 Dec 2021 16:22:52 -0800 Subject: [PATCH] Fix Statistics in db_stress (#9260) Summary: The `Statistics` objects are meant to be shared across translation units, but this was prevented by declaring them static. We need to ensure they are defined once in the program. The effect is now `StressTest::PrintStatistics()` can actually print statistics since it now sees non-null values when `--statistics=1`. Pull Request resolved: https://github.com/facebook/rocksdb/pull/9260 Reviewed By: zhichao-cao Differential Revision: D32910162 Pulled By: ajkr fbshipit-source-id: c926d6f556177987bee5fa3cbc87597803b230ee --- TARGETS | 1 + db_stress_tool/CMakeLists.txt | 1 + db_stress_tool/db_stress_stat.cc | 17 +++++++++++++++++ db_stress_tool/db_stress_stat.h | 5 +++-- src.mk | 1 + 5 files changed, 23 insertions(+), 2 deletions(-) create mode 100644 db_stress_tool/db_stress_stat.cc diff --git a/TARGETS b/TARGETS index 903d7e5f3..c33545cfd 100644 --- a/TARGETS +++ b/TARGETS @@ -871,6 +871,7 @@ cpp_library( "db_stress_tool/db_stress_gflags.cc", "db_stress_tool/db_stress_listener.cc", "db_stress_tool/db_stress_shared_state.cc", + "db_stress_tool/db_stress_stat.cc", "db_stress_tool/db_stress_test_base.cc", "db_stress_tool/db_stress_tool.cc", "db_stress_tool/expected_state.cc", diff --git a/db_stress_tool/CMakeLists.txt b/db_stress_tool/CMakeLists.txt index 68001967e..afbc5fa20 100644 --- a/db_stress_tool/CMakeLists.txt +++ b/db_stress_tool/CMakeLists.txt @@ -7,6 +7,7 @@ add_executable(db_stress${ARTIFACT_SUFFIX} db_stress_gflags.cc db_stress_listener.cc db_stress_shared_state.cc + db_stress_stat.cc db_stress_test_base.cc db_stress_tool.cc expected_state.cc diff --git a/db_stress_tool/db_stress_stat.cc b/db_stress_tool/db_stress_stat.cc new file mode 100644 index 000000000..6a7883a52 --- /dev/null +++ b/db_stress_tool/db_stress_stat.cc @@ -0,0 +1,17 @@ +// Copyright (c) 2011-present, Facebook, Inc. All rights reserved. +// This source code is licensed under both the GPLv2 (found in the +// COPYING file in the root directory) and Apache 2.0 License +// (found in the LICENSE.Apache file in the root directory). + +#ifdef GFLAGS + +#include "db_stress_tool/db_stress_stat.h" + +namespace ROCKSDB_NAMESPACE { + +std::shared_ptr dbstats; +std::shared_ptr dbstats_secondaries; + +} // namespace ROCKSDB_NAMESPACE + +#endif // GFLAGS diff --git a/db_stress_tool/db_stress_stat.h b/db_stress_tool/db_stress_stat.h index 429cf3b2a..5b38c6e2b 100644 --- a/db_stress_tool/db_stress_stat.h +++ b/db_stress_tool/db_stress_stat.h @@ -21,9 +21,10 @@ DECLARE_bool(histogram); DECLARE_bool(progress_reports); namespace ROCKSDB_NAMESPACE { + // Database statistics -static std::shared_ptr dbstats; -static std::shared_ptr dbstats_secondaries; +extern std::shared_ptr dbstats; +extern std::shared_ptr dbstats_secondaries; class Stats { private: diff --git a/src.mk b/src.mk index 12718c66b..f53a417ba 100644 --- a/src.mk +++ b/src.mk @@ -349,6 +349,7 @@ STRESS_LIB_SOURCES = \ db_stress_tool/db_stress_gflags.cc \ db_stress_tool/db_stress_listener.cc \ db_stress_tool/db_stress_shared_state.cc \ + db_stress_tool/db_stress_stat.cc \ db_stress_tool/db_stress_test_base.cc \ db_stress_tool/db_stress_tool.cc \ db_stress_tool/expected_state.cc \