Extract statistics tests into separate file
Summary: I'm going to add more DB tests for statistics as currently we have very few. I started a file dedicated to this purpose and moved the existing stats-specific tests there. Closes https://github.com/facebook/rocksdb/pull/2211 Differential Revision: D4951558 Pulled By: ajkr fbshipit-source-id: 05d11c35079c40ecabdfd2cf5556ccb761f694a4
This commit is contained in:
parent
385412b6c0
commit
958b4c9117
@ -584,6 +584,7 @@ set(TESTS
|
|||||||
db/db_properties_test.cc
|
db/db_properties_test.cc
|
||||||
db/db_range_del_test.cc
|
db/db_range_del_test.cc
|
||||||
db/db_sst_test.cc
|
db/db_sst_test.cc
|
||||||
|
db/db_statistics_test.cc
|
||||||
db/db_table_properties_test.cc
|
db/db_table_properties_test.cc
|
||||||
db/db_tailing_iter_test.cc
|
db/db_tailing_iter_test.cc
|
||||||
db/db_test.cc
|
db/db_test.cc
|
||||||
|
4
Makefile
4
Makefile
@ -339,6 +339,7 @@ TESTS = \
|
|||||||
db_io_failure_test \
|
db_io_failure_test \
|
||||||
db_properties_test \
|
db_properties_test \
|
||||||
db_table_properties_test \
|
db_table_properties_test \
|
||||||
|
db_statistics_test \
|
||||||
autovector_test \
|
autovector_test \
|
||||||
cleanable_test \
|
cleanable_test \
|
||||||
column_family_test \
|
column_family_test \
|
||||||
@ -1027,6 +1028,9 @@ db_range_del_test: db/db_range_del_test.o db/db_test_util.o $(LIBOBJECTS) $(TEST
|
|||||||
db_sst_test: db/db_sst_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
|
db_sst_test: db/db_sst_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
|
||||||
$(AM_LINK)
|
$(AM_LINK)
|
||||||
|
|
||||||
|
db_statistics_test: db/db_statistics_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
|
||||||
|
$(AM_LINK)
|
||||||
|
|
||||||
external_sst_file_basic_test: db/external_sst_file_basic_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
|
external_sst_file_basic_test: db/external_sst_file_basic_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
|
||||||
$(AM_LINK)
|
$(AM_LINK)
|
||||||
|
|
||||||
|
3
TARGETS
3
TARGETS
@ -449,7 +449,8 @@ ROCKS_TESTS = [['merger_test', 'table/merger_test.cc', 'serial'],
|
|||||||
['version_edit_test', 'db/version_edit_test.cc', 'serial'],
|
['version_edit_test', 'db/version_edit_test.cc', 'serial'],
|
||||||
['skiplist_test', 'memtable/skiplist_test.cc', 'serial'],
|
['skiplist_test', 'memtable/skiplist_test.cc', 'serial'],
|
||||||
['lru_cache_test', 'cache/lru_cache_test.cc', 'serial'],
|
['lru_cache_test', 'cache/lru_cache_test.cc', 'serial'],
|
||||||
['plain_table_db_test', 'db/plain_table_db_test.cc', 'serial']]
|
['plain_table_db_test', 'db/plain_table_db_test.cc', 'serial'],
|
||||||
|
['db_statistics_test', 'db/db_statistics_test.cc', 'serial']]
|
||||||
|
|
||||||
|
|
||||||
# Generate a test rule for each entry in ROCKS_TESTS
|
# Generate a test rule for each entry in ROCKS_TESTS
|
||||||
|
124
db/db_statistics_test.cc
Normal file
124
db/db_statistics_test.cc
Normal file
@ -0,0 +1,124 @@
|
|||||||
|
// Copyright (c) 2011-present, Facebook, Inc. All rights reserved.
|
||||||
|
// This source code is licensed under the BSD-style license found in the
|
||||||
|
// LICENSE file in the root directory of this source tree. An additional grant
|
||||||
|
// of patent rights can be found in the PATENTS file in the same directory.
|
||||||
|
|
||||||
|
#include <string>
|
||||||
|
|
||||||
|
#include "db/db_test_util.h"
|
||||||
|
#include "monitoring/thread_status_util.h"
|
||||||
|
#include "port/stack_trace.h"
|
||||||
|
#include "rocksdb/statistics.h"
|
||||||
|
|
||||||
|
namespace rocksdb {
|
||||||
|
|
||||||
|
class DBStatisticsTest : public DBTestBase {
|
||||||
|
public:
|
||||||
|
DBStatisticsTest() : DBTestBase("/db_statistics_test") {}
|
||||||
|
};
|
||||||
|
|
||||||
|
TEST_F(DBStatisticsTest, CompressionStatsTest) {
|
||||||
|
CompressionType type;
|
||||||
|
|
||||||
|
if (Snappy_Supported()) {
|
||||||
|
type = kSnappyCompression;
|
||||||
|
fprintf(stderr, "using snappy\n");
|
||||||
|
} else if (Zlib_Supported()) {
|
||||||
|
type = kZlibCompression;
|
||||||
|
fprintf(stderr, "using zlib\n");
|
||||||
|
} else if (BZip2_Supported()) {
|
||||||
|
type = kBZip2Compression;
|
||||||
|
fprintf(stderr, "using bzip2\n");
|
||||||
|
} else if (LZ4_Supported()) {
|
||||||
|
type = kLZ4Compression;
|
||||||
|
fprintf(stderr, "using lz4\n");
|
||||||
|
} else if (XPRESS_Supported()) {
|
||||||
|
type = kXpressCompression;
|
||||||
|
fprintf(stderr, "using xpress\n");
|
||||||
|
} else if (ZSTD_Supported()) {
|
||||||
|
type = kZSTD;
|
||||||
|
fprintf(stderr, "using ZSTD\n");
|
||||||
|
} else {
|
||||||
|
fprintf(stderr, "skipping test, compression disabled\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
Options options = CurrentOptions();
|
||||||
|
options.compression = type;
|
||||||
|
options.statistics = rocksdb::CreateDBStatistics();
|
||||||
|
options.statistics->stats_level_ = StatsLevel::kExceptTimeForMutex;
|
||||||
|
DestroyAndReopen(options);
|
||||||
|
|
||||||
|
int kNumKeysWritten = 100000;
|
||||||
|
|
||||||
|
// Check that compressions occur and are counted when compression is turned on
|
||||||
|
Random rnd(301);
|
||||||
|
for (int i = 0; i < kNumKeysWritten; ++i) {
|
||||||
|
// compressible string
|
||||||
|
ASSERT_OK(Put(Key(i), RandomString(&rnd, 128) + std::string(128, 'a')));
|
||||||
|
}
|
||||||
|
ASSERT_OK(Flush());
|
||||||
|
ASSERT_GT(options.statistics->getTickerCount(NUMBER_BLOCK_COMPRESSED), 0);
|
||||||
|
|
||||||
|
for (int i = 0; i < kNumKeysWritten; ++i) {
|
||||||
|
auto r = Get(Key(i));
|
||||||
|
}
|
||||||
|
ASSERT_GT(options.statistics->getTickerCount(NUMBER_BLOCK_DECOMPRESSED), 0);
|
||||||
|
|
||||||
|
options.compression = kNoCompression;
|
||||||
|
DestroyAndReopen(options);
|
||||||
|
uint64_t currentCompressions =
|
||||||
|
options.statistics->getTickerCount(NUMBER_BLOCK_COMPRESSED);
|
||||||
|
uint64_t currentDecompressions =
|
||||||
|
options.statistics->getTickerCount(NUMBER_BLOCK_DECOMPRESSED);
|
||||||
|
|
||||||
|
// Check that compressions do not occur when turned off
|
||||||
|
for (int i = 0; i < kNumKeysWritten; ++i) {
|
||||||
|
// compressible string
|
||||||
|
ASSERT_OK(Put(Key(i), RandomString(&rnd, 128) + std::string(128, 'a')));
|
||||||
|
}
|
||||||
|
ASSERT_OK(Flush());
|
||||||
|
ASSERT_EQ(options.statistics->getTickerCount(NUMBER_BLOCK_COMPRESSED)
|
||||||
|
- currentCompressions, 0);
|
||||||
|
|
||||||
|
for (int i = 0; i < kNumKeysWritten; ++i) {
|
||||||
|
auto r = Get(Key(i));
|
||||||
|
}
|
||||||
|
ASSERT_EQ(options.statistics->getTickerCount(NUMBER_BLOCK_DECOMPRESSED)
|
||||||
|
- currentDecompressions, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST_F(DBStatisticsTest, MutexWaitStatsDisabledByDefault) {
|
||||||
|
Options options = CurrentOptions();
|
||||||
|
options.create_if_missing = true;
|
||||||
|
options.statistics = rocksdb::CreateDBStatistics();
|
||||||
|
CreateAndReopenWithCF({"pikachu"}, options);
|
||||||
|
const uint64_t kMutexWaitDelay = 100;
|
||||||
|
ThreadStatusUtil::TEST_SetStateDelay(ThreadStatus::STATE_MUTEX_WAIT,
|
||||||
|
kMutexWaitDelay);
|
||||||
|
ASSERT_OK(Put("hello", "rocksdb"));
|
||||||
|
ASSERT_EQ(TestGetTickerCount(options, DB_MUTEX_WAIT_MICROS), 0);
|
||||||
|
ThreadStatusUtil::TEST_SetStateDelay(ThreadStatus::STATE_MUTEX_WAIT, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST_F(DBStatisticsTest, MutexWaitStats) {
|
||||||
|
Options options = CurrentOptions();
|
||||||
|
options.create_if_missing = true;
|
||||||
|
options.statistics = rocksdb::CreateDBStatistics();
|
||||||
|
options.statistics->stats_level_ = StatsLevel::kAll;
|
||||||
|
CreateAndReopenWithCF({"pikachu"}, options);
|
||||||
|
const uint64_t kMutexWaitDelay = 100;
|
||||||
|
ThreadStatusUtil::TEST_SetStateDelay(ThreadStatus::STATE_MUTEX_WAIT,
|
||||||
|
kMutexWaitDelay);
|
||||||
|
ASSERT_OK(Put("hello", "rocksdb"));
|
||||||
|
ASSERT_GE(TestGetTickerCount(options, DB_MUTEX_WAIT_MICROS), kMutexWaitDelay);
|
||||||
|
ThreadStatusUtil::TEST_SetStateDelay(ThreadStatus::STATE_MUTEX_WAIT, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
} // namespace rocksdb
|
||||||
|
|
||||||
|
int main(int argc, char** argv) {
|
||||||
|
rocksdb::port::InstallStackTraceHandler();
|
||||||
|
::testing::InitGoogleTest(&argc, argv);
|
||||||
|
return RUN_ALL_TESTS();
|
||||||
|
}
|
@ -4193,104 +4193,6 @@ TEST_F(DBTest, EncodeDecompressedBlockSizeTest) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST_F(DBTest, CompressionStatsTest) {
|
|
||||||
CompressionType type;
|
|
||||||
|
|
||||||
if (Snappy_Supported()) {
|
|
||||||
type = kSnappyCompression;
|
|
||||||
fprintf(stderr, "using snappy\n");
|
|
||||||
} else if (Zlib_Supported()) {
|
|
||||||
type = kZlibCompression;
|
|
||||||
fprintf(stderr, "using zlib\n");
|
|
||||||
} else if (BZip2_Supported()) {
|
|
||||||
type = kBZip2Compression;
|
|
||||||
fprintf(stderr, "using bzip2\n");
|
|
||||||
} else if (LZ4_Supported()) {
|
|
||||||
type = kLZ4Compression;
|
|
||||||
fprintf(stderr, "using lz4\n");
|
|
||||||
} else if (XPRESS_Supported()) {
|
|
||||||
type = kXpressCompression;
|
|
||||||
fprintf(stderr, "using xpress\n");
|
|
||||||
} else if (ZSTD_Supported()) {
|
|
||||||
type = kZSTD;
|
|
||||||
fprintf(stderr, "using ZSTD\n");
|
|
||||||
} else {
|
|
||||||
fprintf(stderr, "skipping test, compression disabled\n");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
Options options = CurrentOptions();
|
|
||||||
options.compression = type;
|
|
||||||
options.statistics = rocksdb::CreateDBStatistics();
|
|
||||||
options.statistics->stats_level_ = StatsLevel::kExceptTimeForMutex;
|
|
||||||
DestroyAndReopen(options);
|
|
||||||
|
|
||||||
int kNumKeysWritten = 100000;
|
|
||||||
|
|
||||||
// Check that compressions occur and are counted when compression is turned on
|
|
||||||
Random rnd(301);
|
|
||||||
for (int i = 0; i < kNumKeysWritten; ++i) {
|
|
||||||
// compressible string
|
|
||||||
ASSERT_OK(Put(Key(i), RandomString(&rnd, 128) + std::string(128, 'a')));
|
|
||||||
}
|
|
||||||
ASSERT_OK(Flush());
|
|
||||||
ASSERT_GT(options.statistics->getTickerCount(NUMBER_BLOCK_COMPRESSED), 0);
|
|
||||||
|
|
||||||
for (int i = 0; i < kNumKeysWritten; ++i) {
|
|
||||||
auto r = Get(Key(i));
|
|
||||||
}
|
|
||||||
ASSERT_GT(options.statistics->getTickerCount(NUMBER_BLOCK_DECOMPRESSED), 0);
|
|
||||||
|
|
||||||
options.compression = kNoCompression;
|
|
||||||
DestroyAndReopen(options);
|
|
||||||
uint64_t currentCompressions =
|
|
||||||
options.statistics->getTickerCount(NUMBER_BLOCK_COMPRESSED);
|
|
||||||
uint64_t currentDecompressions =
|
|
||||||
options.statistics->getTickerCount(NUMBER_BLOCK_DECOMPRESSED);
|
|
||||||
|
|
||||||
// Check that compressions do not occur when turned off
|
|
||||||
for (int i = 0; i < kNumKeysWritten; ++i) {
|
|
||||||
// compressible string
|
|
||||||
ASSERT_OK(Put(Key(i), RandomString(&rnd, 128) + std::string(128, 'a')));
|
|
||||||
}
|
|
||||||
ASSERT_OK(Flush());
|
|
||||||
ASSERT_EQ(options.statistics->getTickerCount(NUMBER_BLOCK_COMPRESSED)
|
|
||||||
- currentCompressions, 0);
|
|
||||||
|
|
||||||
for (int i = 0; i < kNumKeysWritten; ++i) {
|
|
||||||
auto r = Get(Key(i));
|
|
||||||
}
|
|
||||||
ASSERT_EQ(options.statistics->getTickerCount(NUMBER_BLOCK_DECOMPRESSED)
|
|
||||||
- currentDecompressions, 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
TEST_F(DBTest, MutexWaitStatsDisabledByDefault) {
|
|
||||||
Options options = CurrentOptions();
|
|
||||||
options.create_if_missing = true;
|
|
||||||
options.statistics = rocksdb::CreateDBStatistics();
|
|
||||||
CreateAndReopenWithCF({"pikachu"}, options);
|
|
||||||
const uint64_t kMutexWaitDelay = 100;
|
|
||||||
ThreadStatusUtil::TEST_SetStateDelay(ThreadStatus::STATE_MUTEX_WAIT,
|
|
||||||
kMutexWaitDelay);
|
|
||||||
ASSERT_OK(Put("hello", "rocksdb"));
|
|
||||||
ASSERT_EQ(TestGetTickerCount(options, DB_MUTEX_WAIT_MICROS), 0);
|
|
||||||
ThreadStatusUtil::TEST_SetStateDelay(ThreadStatus::STATE_MUTEX_WAIT, 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
TEST_F(DBTest, MutexWaitStats) {
|
|
||||||
Options options = CurrentOptions();
|
|
||||||
options.create_if_missing = true;
|
|
||||||
options.statistics = rocksdb::CreateDBStatistics();
|
|
||||||
options.statistics->stats_level_ = StatsLevel::kAll;
|
|
||||||
CreateAndReopenWithCF({"pikachu"}, options);
|
|
||||||
const uint64_t kMutexWaitDelay = 100;
|
|
||||||
ThreadStatusUtil::TEST_SetStateDelay(ThreadStatus::STATE_MUTEX_WAIT,
|
|
||||||
kMutexWaitDelay);
|
|
||||||
ASSERT_OK(Put("hello", "rocksdb"));
|
|
||||||
ASSERT_GE(TestGetTickerCount(options, DB_MUTEX_WAIT_MICROS), kMutexWaitDelay);
|
|
||||||
ThreadStatusUtil::TEST_SetStateDelay(ThreadStatus::STATE_MUTEX_WAIT, 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
TEST_F(DBTest, CloseSpeedup) {
|
TEST_F(DBTest, CloseSpeedup) {
|
||||||
Options options = CurrentOptions();
|
Options options = CurrentOptions();
|
||||||
options.compaction_style = kCompactionStyleLevel;
|
options.compaction_style = kCompactionStyleLevel;
|
||||||
|
1
src.mk
1
src.mk
@ -247,6 +247,7 @@ MAIN_SOURCES = \
|
|||||||
db/db_options_test.cc \
|
db/db_options_test.cc \
|
||||||
db/db_range_del_test.cc \
|
db/db_range_del_test.cc \
|
||||||
db/db_sst_test.cc \
|
db/db_sst_test.cc \
|
||||||
|
db/db_statistics_test.cc \
|
||||||
db/db_table_properties_test.cc \
|
db/db_table_properties_test.cc \
|
||||||
db/db_tailing_iter_test.cc \
|
db/db_tailing_iter_test.cc \
|
||||||
db/db_test.cc \
|
db/db_test.cc \
|
||||||
|
Loading…
Reference in New Issue
Block a user