Block cache tracer: StartTrace return busy if trace is already started. (#5519)
Summary: This PR is needed for integration into MyRocks. A second call on StartTrace returns Busy so that MyRocks may return an error to the user. Pull Request resolved: https://github.com/facebook/rocksdb/pull/5519 Test Plan: make clean && USE_CLANG=1 make check -j32 Differential Revision: D16055476 Pulled By: HaoyuHuang fbshipit-source-id: a51772fb0965c873922757eb470a332b1e02a91d
This commit is contained in:
parent
10bae8ceb3
commit
68b46a2e36
@ -233,7 +233,7 @@ Status BlockCacheTracer::StartTrace(
|
|||||||
std::unique_ptr<TraceWriter>&& trace_writer) {
|
std::unique_ptr<TraceWriter>&& trace_writer) {
|
||||||
InstrumentedMutexLock lock_guard(&trace_writer_mutex_);
|
InstrumentedMutexLock lock_guard(&trace_writer_mutex_);
|
||||||
if (writer_.load()) {
|
if (writer_.load()) {
|
||||||
return Status::OK();
|
return Status::Busy();
|
||||||
}
|
}
|
||||||
trace_options_ = trace_options;
|
trace_options_ = trace_options;
|
||||||
writer_.store(
|
writer_.store(
|
||||||
|
@ -195,6 +195,17 @@ TEST_F(BlockCacheTracerTest, AtomicWrite) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TEST_F(BlockCacheTracerTest, ConsecutiveStartTrace) {
|
||||||
|
TraceOptions trace_opt;
|
||||||
|
std::unique_ptr<TraceWriter> trace_writer;
|
||||||
|
ASSERT_OK(
|
||||||
|
NewFileTraceWriter(env_, env_options_, trace_file_path_, &trace_writer));
|
||||||
|
BlockCacheTracer writer;
|
||||||
|
ASSERT_OK(writer.StartTrace(env_, trace_opt, std::move(trace_writer)));
|
||||||
|
ASSERT_NOK(writer.StartTrace(env_, trace_opt, std::move(trace_writer)));
|
||||||
|
ASSERT_OK(env_->FileExists(trace_file_path_));
|
||||||
|
}
|
||||||
|
|
||||||
TEST_F(BlockCacheTracerTest, AtomicNoWriteAfterEndTrace) {
|
TEST_F(BlockCacheTracerTest, AtomicNoWriteAfterEndTrace) {
|
||||||
BlockCacheTraceRecord record = GenerateAccessRecord();
|
BlockCacheTraceRecord record = GenerateAccessRecord();
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user