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: 05d11c35079c40ecabdfd2cf5556ccb761f694a4main
parent
7eddecce12
commit
f6a27d0bce
@ -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(); |
||||||
|
} |
Loading…
Reference in new issue