mirror of
https://github.com/facebook/rocksdb.git
synced 2024-11-30 13:41:46 +00:00
f2b623bcc1
Summary: `GetEntity` API support for ReadOnly DB and Secondary DB. - Introduced `GetImpl()` with `GetImplOptions` in `db_impl_readonly` and refactored current `Get()` logic into `GetImpl()` so that look up logic can be reused for `GetEntity()` (Following the same pattern as `DBImpl::Get()` and `DBImpl::GetEntity()`) - Introduced `GetImpl()` with `GetImplOptions` in `db_impl_secondary` and refactored current `GetImpl()` logic. This is to make `DBImplSecondary::Get/GetEntity` consistent with `DBImpl::Get/GetEntity` and `DBImplReadOnly::Get/GetEntity` - `GetImpl()` in `db_impl` is now virtual. both `db_impl_readonly` and `db_impl_secondary`'s `Get()` override are no longer needed since all three dbs now have the same `Get()` which calls `GetImpl()` internally. - `GetImpl()` in `DBImplReadOnly` and `DBImplSecondary` now pass in `columns` instead of `nullptr` in lookup functions like `memtable->get()` - Introduced `GetEntity()` API in `DBImplReadOnly` and `DBImplSecondary` which simply calls `GetImpl()` with `columns` set in `GetImplOptions`. - Introduced `Env::IOActivity::kGetEntity` and set read_options.io_activity to `Env::IOActivity::kGetEntity` for `GetEntity()` operations (in db_impl) Pull Request resolved: https://github.com/facebook/rocksdb/pull/11799 Test Plan: **Unit Tests** - Added verification in `DBWideBasicTest::PutEntity` by Reopening DB as ReadOnly with the same setup. - Added verification in `DBSecondaryTest::ReopenAsSecondary` by calling `PutEntity()` and `GetEntity()` on top of existing `Put()` and `Get()` - `make -j64 check` **Crash Tests** - `python3 tools/db_crashtest.py blackbox --max_key=25000000 --write_buffer_size=4194304 --max_bytes_for_level_base=2097152 --target_file_size_base=2097152 --periodic_compaction_seconds=0 --use_put_entity_one_in=10 --use_get_entity=1 --duration=60 --inter val=10` - `python3 tools/db_crashtest.py blackbox --simple --max_key=25000000 --write_buffer_size=4194304 --max_bytes_for_level_base=2097152 --target_file_size_base=2097152 --periodic_compaction_seconds=0 --use_put_entity_one_in=10 --use_get_entity=1 ` - `python3 tools/db_crashtest.py blackbox --cf_consistency --max_key=25000000 --write_buffer_size=4194304 --max_bytes_for_level_base=2097152 --target_file_size_base=2097152 --periodic_compaction_seconds=0 --use_put_entity_one_in=10 --use_get_entity=1 --duration=60 --inter val=10` Reviewed By: ltamasi Differential Revision: D49037040 Pulled By: jaykorean fbshipit-source-id: a0648253ded6e91af7953de364ed3c6bf163626b
61 lines
2.1 KiB
C++
61 lines
2.1 KiB
C++
// 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 <atomic>
|
|
|
|
#include "monitoring/thread_status_updater.h"
|
|
#include "monitoring/thread_status_util.h"
|
|
#include "rocksdb/system_clock.h"
|
|
|
|
namespace ROCKSDB_NAMESPACE {
|
|
|
|
#ifndef NDEBUG
|
|
// the delay for debugging purpose.
|
|
static std::atomic<int> states_delay[ThreadStatus::NUM_STATE_TYPES];
|
|
|
|
void ThreadStatusUtil::TEST_SetStateDelay(const ThreadStatus::StateType state,
|
|
int micro) {
|
|
states_delay[state].store(micro, std::memory_order_relaxed);
|
|
}
|
|
|
|
void ThreadStatusUtil::TEST_StateDelay(const ThreadStatus::StateType state) {
|
|
auto delay = states_delay[state].load(std::memory_order_relaxed);
|
|
if (delay > 0) {
|
|
SystemClock::Default()->SleepForMicroseconds(delay);
|
|
}
|
|
}
|
|
|
|
Env::IOActivity ThreadStatusUtil::TEST_GetExpectedIOActivity(
|
|
ThreadStatus::OperationType thread_op) {
|
|
switch (thread_op) {
|
|
case ThreadStatus::OperationType::OP_FLUSH:
|
|
return Env::IOActivity::kFlush;
|
|
case ThreadStatus::OperationType::OP_COMPACTION:
|
|
return Env::IOActivity::kCompaction;
|
|
case ThreadStatus::OperationType::OP_DBOPEN:
|
|
return Env::IOActivity::kDBOpen;
|
|
case ThreadStatus::OperationType::OP_GET:
|
|
return Env::IOActivity::kGet;
|
|
case ThreadStatus::OperationType::OP_MULTIGET:
|
|
return Env::IOActivity::kMultiGet;
|
|
case ThreadStatus::OperationType::OP_DBITERATOR:
|
|
return Env::IOActivity::kDBIterator;
|
|
case ThreadStatus::OperationType::OP_VERIFY_DB_CHECKSUM:
|
|
return Env::IOActivity::kVerifyDBChecksum;
|
|
case ThreadStatus::OperationType::OP_VERIFY_FILE_CHECKSUMS:
|
|
return Env::IOActivity::kVerifyFileChecksums;
|
|
case ThreadStatus::OperationType::OP_GETENTITY:
|
|
return Env::IOActivity::kGetEntity;
|
|
case ThreadStatus::OperationType::OP_MULTIGETENTITY:
|
|
return Env::IOActivity::kMultiGetEntity;
|
|
default:
|
|
return Env::IOActivity::kUnknown;
|
|
}
|
|
}
|
|
|
|
#endif // !NDEBUG
|
|
|
|
} // namespace ROCKSDB_NAMESPACE
|