mirror of https://github.com/facebook/rocksdb.git
Fix/minimize mock_time_env.h dependencies (#7426)
Summary: (a) own copy of kMicrosInSecond (b) out-of-line sync point code Pull Request resolved: https://github.com/facebook/rocksdb/pull/7426 Test Plan: FB internal Reviewed By: ajkr Differential Revision: D23861363 Pulled By: pdillinger fbshipit-source-id: de6b1621dca2f7391c5ff72bad04a7613dc27527
This commit is contained in:
parent
b005f96937
commit
ac1734d06b
|
@ -1019,6 +1019,7 @@ option(WITH_ALL_TESTS "Build all test, rather than a small subset" ON)
|
||||||
if(WITH_TESTS OR WITH_BENCHMARK_TOOLS)
|
if(WITH_TESTS OR WITH_BENCHMARK_TOOLS)
|
||||||
add_subdirectory(third-party/gtest-1.8.1/fused-src/gtest)
|
add_subdirectory(third-party/gtest-1.8.1/fused-src/gtest)
|
||||||
add_library(testharness STATIC
|
add_library(testharness STATIC
|
||||||
|
test_util/mock_time_env.cc
|
||||||
test_util/testharness.cc)
|
test_util/testharness.cc)
|
||||||
target_link_libraries(testharness gtest)
|
target_link_libraries(testharness gtest)
|
||||||
endif()
|
endif()
|
||||||
|
|
1
TARGETS
1
TARGETS
|
@ -396,6 +396,7 @@ cpp_library(
|
||||||
srcs = [
|
srcs = [
|
||||||
"db/db_test_util.cc",
|
"db/db_test_util.cc",
|
||||||
"table/mock_table.cc",
|
"table/mock_table.cc",
|
||||||
|
"test_util/mock_time_env.cc",
|
||||||
"test_util/testharness.cc",
|
"test_util/testharness.cc",
|
||||||
"test_util/testutil.cc",
|
"test_util/testutil.cc",
|
||||||
"tools/block_cache_analyzer/block_cache_trace_analyzer.cc",
|
"tools/block_cache_analyzer/block_cache_trace_analyzer.cc",
|
||||||
|
|
1
src.mk
1
src.mk
|
@ -305,6 +305,7 @@ STRESS_LIB_SOURCES = \
|
||||||
|
|
||||||
TEST_LIB_SOURCES = \
|
TEST_LIB_SOURCES = \
|
||||||
db/db_test_util.cc \
|
db/db_test_util.cc \
|
||||||
|
test_util/mock_time_env.cc \
|
||||||
test_util/testharness.cc \
|
test_util/testharness.cc \
|
||||||
test_util/testutil.cc \
|
test_util/testutil.cc \
|
||||||
utilities/cassandra/test_utils.cc \
|
utilities/cassandra/test_utils.cc \
|
||||||
|
|
|
@ -0,0 +1,38 @@
|
||||||
|
// 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).
|
||||||
|
|
||||||
|
#include "test_util/mock_time_env.h"
|
||||||
|
|
||||||
|
#include "test_util/sync_point.h"
|
||||||
|
|
||||||
|
namespace ROCKSDB_NAMESPACE {
|
||||||
|
|
||||||
|
// TODO: this is a workaround for the different behavior on different platform
|
||||||
|
// for timedwait timeout. Ideally timedwait API should be moved to env.
|
||||||
|
// details: PR #7101.
|
||||||
|
void MockTimeEnv::InstallTimedWaitFixCallback() {
|
||||||
|
#ifndef NDEBUG
|
||||||
|
SyncPoint::GetInstance()->DisableProcessing();
|
||||||
|
SyncPoint::GetInstance()->ClearAllCallBacks();
|
||||||
|
#ifdef OS_MACOSX
|
||||||
|
// This is an alternate way (vs. SpecialEnv) of dealing with the fact
|
||||||
|
// that on some platforms, pthread_cond_timedwait does not appear to
|
||||||
|
// release the lock for other threads to operate if the deadline time
|
||||||
|
// is already passed. (TimedWait calls are currently a bad abstraction
|
||||||
|
// because the deadline parameter is usually computed from Env time,
|
||||||
|
// but is interpreted in real clock time.)
|
||||||
|
SyncPoint::GetInstance()->SetCallBack(
|
||||||
|
"InstrumentedCondVar::TimedWaitInternal", [&](void* arg) {
|
||||||
|
uint64_t time_us = *reinterpret_cast<uint64_t*>(arg);
|
||||||
|
if (time_us < this->RealNowMicros()) {
|
||||||
|
*reinterpret_cast<uint64_t*>(arg) = this->RealNowMicros() + 1000;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
#endif // OS_MACOSX
|
||||||
|
SyncPoint::GetInstance()->EnableProcessing();
|
||||||
|
#endif // !NDEBUG
|
||||||
|
}
|
||||||
|
|
||||||
|
} // namespace ROCKSDB_NAMESPACE
|
|
@ -5,6 +5,8 @@
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
#include <atomic>
|
||||||
|
|
||||||
#include "rocksdb/env.h"
|
#include "rocksdb/env.h"
|
||||||
|
|
||||||
namespace ROCKSDB_NAMESPACE {
|
namespace ROCKSDB_NAMESPACE {
|
||||||
|
@ -62,29 +64,11 @@ class MockTimeEnv : public EnvWrapper {
|
||||||
// TODO: this is a workaround for the different behavior on different platform
|
// TODO: this is a workaround for the different behavior on different platform
|
||||||
// for timedwait timeout. Ideally timedwait API should be moved to env.
|
// for timedwait timeout. Ideally timedwait API should be moved to env.
|
||||||
// details: PR #7101.
|
// details: PR #7101.
|
||||||
void InstallTimedWaitFixCallback() {
|
void InstallTimedWaitFixCallback();
|
||||||
SyncPoint::GetInstance()->DisableProcessing();
|
|
||||||
SyncPoint::GetInstance()->ClearAllCallBacks();
|
|
||||||
#if defined(OS_MACOSX) && !defined(NDEBUG)
|
|
||||||
// This is an alternate way (vs. SpecialEnv) of dealing with the fact
|
|
||||||
// that on some platforms, pthread_cond_timedwait does not appear to
|
|
||||||
// release the lock for other threads to operate if the deadline time
|
|
||||||
// is already passed. (TimedWait calls are currently a bad abstraction
|
|
||||||
// because the deadline parameter is usually computed from Env time,
|
|
||||||
// but is interpreted in real clock time.)
|
|
||||||
SyncPoint::GetInstance()->SetCallBack(
|
|
||||||
"InstrumentedCondVar::TimedWaitInternal", [&](void* arg) {
|
|
||||||
uint64_t time_us = *reinterpret_cast<uint64_t*>(arg);
|
|
||||||
if (time_us < this->RealNowMicros()) {
|
|
||||||
*reinterpret_cast<uint64_t*>(arg) = this->RealNowMicros() + 1000;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
#endif // OS_MACOSX && !NDEBUG
|
|
||||||
SyncPoint::GetInstance()->EnableProcessing();
|
|
||||||
}
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
std::atomic<uint64_t> current_time_us_{0};
|
std::atomic<uint64_t> current_time_us_{0};
|
||||||
|
static constexpr uint64_t kMicrosInSecond = 1000U * 1000U;
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace ROCKSDB_NAMESPACE
|
} // namespace ROCKSDB_NAMESPACE
|
||||||
|
|
Loading…
Reference in New Issue