mirror of https://github.com/facebook/rocksdb.git
Replace ScopedArenaIterator with ScopedArenaPtr<InternalIterator> (#12470)
Summary: ScopedArenaIterator is not an iterator. It is a pointer wrapper. And we don't need a custom implemented pointer wrapper when std::unique_ptr can be instantiated with what we want. So this adds ScopedArenaPtr<T> to replace those uses. Pull Request resolved: https://github.com/facebook/rocksdb/pull/12470 Test Plan: CI (including ASAN/UBSAN) Reviewed By: jowlyzhang Differential Revision: D55254362 Pulled By: pdillinger fbshipit-source-id: cc96a0b9840df99aa807f417725e120802c0ae18
This commit is contained in:
parent
3b736c4aa3
commit
b515a5db3f
|
@ -23,7 +23,6 @@
|
||||||
#include "rocksdb/status.h"
|
#include "rocksdb/status.h"
|
||||||
#include "rocksdb/table_properties.h"
|
#include "rocksdb/table_properties.h"
|
||||||
#include "rocksdb/types.h"
|
#include "rocksdb/types.h"
|
||||||
#include "table/scoped_arena_iterator.h"
|
|
||||||
|
|
||||||
namespace ROCKSDB_NAMESPACE {
|
namespace ROCKSDB_NAMESPACE {
|
||||||
|
|
||||||
|
|
|
@ -1204,7 +1204,7 @@ Status ColumnFamilyData::RangesOverlapWithMemtables(
|
||||||
super_version->imm->AddIterators(read_opts, /*seqno_to_time_mapping=*/nullptr,
|
super_version->imm->AddIterators(read_opts, /*seqno_to_time_mapping=*/nullptr,
|
||||||
&merge_iter_builder,
|
&merge_iter_builder,
|
||||||
false /* add_range_tombstone_iter */);
|
false /* add_range_tombstone_iter */);
|
||||||
ScopedArenaIterator memtable_iter(merge_iter_builder.Finish());
|
ScopedArenaPtr<InternalIterator> memtable_iter(merge_iter_builder.Finish());
|
||||||
|
|
||||||
auto read_seq = super_version->current->version_set()->LastSequence();
|
auto read_seq = super_version->current->version_set()->LastSequence();
|
||||||
ReadRangeDelAggregator range_del_agg(&internal_comparator_, read_seq);
|
ReadRangeDelAggregator range_del_agg(&internal_comparator_, read_seq);
|
||||||
|
|
|
@ -41,7 +41,6 @@
|
||||||
#include "rocksdb/env.h"
|
#include "rocksdb/env.h"
|
||||||
#include "rocksdb/memtablerep.h"
|
#include "rocksdb/memtablerep.h"
|
||||||
#include "rocksdb/transaction_log.h"
|
#include "rocksdb/transaction_log.h"
|
||||||
#include "table/scoped_arena_iterator.h"
|
|
||||||
#include "util/autovector.h"
|
#include "util/autovector.h"
|
||||||
#include "util/stop_watch.h"
|
#include "util/stop_watch.h"
|
||||||
#include "util/thread_local.h"
|
#include "util/thread_local.h"
|
||||||
|
|
|
@ -46,7 +46,6 @@
|
||||||
#include "table/block_based/block_based_table_factory.h"
|
#include "table/block_based/block_based_table_factory.h"
|
||||||
#include "table/mock_table.h"
|
#include "table/mock_table.h"
|
||||||
#include "table/plain/plain_table_factory.h"
|
#include "table/plain/plain_table_factory.h"
|
||||||
#include "table/scoped_arena_iterator.h"
|
|
||||||
#include "test_util/sync_point.h"
|
#include "test_util/sync_point.h"
|
||||||
#include "test_util/testharness.h"
|
#include "test_util/testharness.h"
|
||||||
#include "test_util/testutil.h"
|
#include "test_util/testutil.h"
|
||||||
|
|
|
@ -342,7 +342,7 @@ TEST_F(DBTestCompactionFilter, CompactionFilter) {
|
||||||
{
|
{
|
||||||
InternalKeyComparator icmp(options.comparator);
|
InternalKeyComparator icmp(options.comparator);
|
||||||
ReadOptions read_options;
|
ReadOptions read_options;
|
||||||
ScopedArenaIterator iter(dbfull()->NewInternalIterator(
|
ScopedArenaPtr<InternalIterator> iter(dbfull()->NewInternalIterator(
|
||||||
read_options, &arena, kMaxSequenceNumber, handles_[1]));
|
read_options, &arena, kMaxSequenceNumber, handles_[1]));
|
||||||
iter->SeekToFirst();
|
iter->SeekToFirst();
|
||||||
ASSERT_OK(iter->status());
|
ASSERT_OK(iter->status());
|
||||||
|
@ -434,7 +434,7 @@ TEST_F(DBTestCompactionFilter, CompactionFilter) {
|
||||||
{
|
{
|
||||||
InternalKeyComparator icmp(options.comparator);
|
InternalKeyComparator icmp(options.comparator);
|
||||||
ReadOptions read_options;
|
ReadOptions read_options;
|
||||||
ScopedArenaIterator iter(dbfull()->NewInternalIterator(
|
ScopedArenaPtr<InternalIterator> iter(dbfull()->NewInternalIterator(
|
||||||
read_options, &arena, kMaxSequenceNumber, handles_[1]));
|
read_options, &arena, kMaxSequenceNumber, handles_[1]));
|
||||||
iter->SeekToFirst();
|
iter->SeekToFirst();
|
||||||
ASSERT_OK(iter->status());
|
ASSERT_OK(iter->status());
|
||||||
|
@ -717,8 +717,8 @@ TEST_F(DBTestCompactionFilter, CompactionFilterContextManual) {
|
||||||
Arena arena;
|
Arena arena;
|
||||||
InternalKeyComparator icmp(options.comparator);
|
InternalKeyComparator icmp(options.comparator);
|
||||||
ReadOptions read_options;
|
ReadOptions read_options;
|
||||||
ScopedArenaIterator iter(dbfull()->NewInternalIterator(read_options, &arena,
|
ScopedArenaPtr<InternalIterator> iter(dbfull()->NewInternalIterator(
|
||||||
kMaxSequenceNumber));
|
read_options, &arena, kMaxSequenceNumber));
|
||||||
iter->SeekToFirst();
|
iter->SeekToFirst();
|
||||||
ASSERT_OK(iter->status());
|
ASSERT_OK(iter->status());
|
||||||
while (iter->Valid()) {
|
while (iter->Valid()) {
|
||||||
|
|
|
@ -59,7 +59,6 @@
|
||||||
#include "rocksdb/utilities/replayer.h"
|
#include "rocksdb/utilities/replayer.h"
|
||||||
#include "rocksdb/write_buffer_manager.h"
|
#include "rocksdb/write_buffer_manager.h"
|
||||||
#include "table/merging_iterator.h"
|
#include "table/merging_iterator.h"
|
||||||
#include "table/scoped_arena_iterator.h"
|
|
||||||
#include "util/autovector.h"
|
#include "util/autovector.h"
|
||||||
#include "util/hash.h"
|
#include "util/hash.h"
|
||||||
#include "util/repeatable_thread.h"
|
#include "util/repeatable_thread.h"
|
||||||
|
|
|
@ -1641,7 +1641,7 @@ Status DBImpl::WriteLevel0TableForRecovery(int job_id, ColumnFamilyData* cfd,
|
||||||
Status s;
|
Status s;
|
||||||
TableProperties table_properties;
|
TableProperties table_properties;
|
||||||
{
|
{
|
||||||
ScopedArenaIterator iter(
|
ScopedArenaPtr<InternalIterator> iter(
|
||||||
mem->NewIterator(ro, /*seqno_to_time_mapping=*/nullptr, &arena));
|
mem->NewIterator(ro, /*seqno_to_time_mapping=*/nullptr, &arena));
|
||||||
ROCKS_LOG_DEBUG(immutable_db_options_.info_log,
|
ROCKS_LOG_DEBUG(immutable_db_options_.info_log,
|
||||||
"[%s] [WriteLevel0TableForRecovery]"
|
"[%s] [WriteLevel0TableForRecovery]"
|
||||||
|
|
|
@ -2833,8 +2833,8 @@ TEST_F(DBRangeDelTest, LeftSentinelKeyTestWithNewerKey) {
|
||||||
Arena arena;
|
Arena arena;
|
||||||
InternalKeyComparator icmp(options.comparator);
|
InternalKeyComparator icmp(options.comparator);
|
||||||
ReadOptions read_options;
|
ReadOptions read_options;
|
||||||
ScopedArenaIterator iter;
|
ScopedArenaPtr<InternalIterator> iter;
|
||||||
iter.set(
|
iter.reset(
|
||||||
dbfull()->NewInternalIterator(read_options, &arena, kMaxSequenceNumber));
|
dbfull()->NewInternalIterator(read_options, &arena, kMaxSequenceNumber));
|
||||||
|
|
||||||
auto k = Key(4);
|
auto k = Key(4);
|
||||||
|
|
|
@ -59,7 +59,6 @@
|
||||||
#include "rocksdb/utilities/optimistic_transaction_db.h"
|
#include "rocksdb/utilities/optimistic_transaction_db.h"
|
||||||
#include "rocksdb/utilities/write_batch_with_index.h"
|
#include "rocksdb/utilities/write_batch_with_index.h"
|
||||||
#include "table/mock_table.h"
|
#include "table/mock_table.h"
|
||||||
#include "table/scoped_arena_iterator.h"
|
|
||||||
#include "test_util/sync_point.h"
|
#include "test_util/sync_point.h"
|
||||||
#include "test_util/testharness.h"
|
#include "test_util/testharness.h"
|
||||||
#include "test_util/testutil.h"
|
#include "test_util/testutil.h"
|
||||||
|
|
|
@ -992,13 +992,13 @@ std::string DBTestBase::AllEntriesFor(const Slice& user_key, int cf) {
|
||||||
auto options = CurrentOptions();
|
auto options = CurrentOptions();
|
||||||
InternalKeyComparator icmp(options.comparator);
|
InternalKeyComparator icmp(options.comparator);
|
||||||
ReadOptions read_options;
|
ReadOptions read_options;
|
||||||
ScopedArenaIterator iter;
|
ScopedArenaPtr<InternalIterator> iter;
|
||||||
if (cf == 0) {
|
if (cf == 0) {
|
||||||
iter.set(dbfull()->NewInternalIterator(read_options, &arena,
|
iter.reset(dbfull()->NewInternalIterator(read_options, &arena,
|
||||||
kMaxSequenceNumber));
|
kMaxSequenceNumber));
|
||||||
} else {
|
} else {
|
||||||
iter.set(dbfull()->NewInternalIterator(read_options, &arena,
|
iter.reset(dbfull()->NewInternalIterator(read_options, &arena,
|
||||||
kMaxSequenceNumber, handles_[cf]));
|
kMaxSequenceNumber, handles_[cf]));
|
||||||
}
|
}
|
||||||
InternalKey target(user_key, kMaxSequenceNumber, kTypeValue);
|
InternalKey target(user_key, kMaxSequenceNumber, kTypeValue);
|
||||||
iter->Seek(target.Encode());
|
iter->Seek(target.Encode());
|
||||||
|
@ -1471,13 +1471,13 @@ void DBTestBase::validateNumberOfEntries(int numValues, int cf) {
|
||||||
auto options = CurrentOptions();
|
auto options = CurrentOptions();
|
||||||
InternalKeyComparator icmp(options.comparator);
|
InternalKeyComparator icmp(options.comparator);
|
||||||
ReadOptions read_options;
|
ReadOptions read_options;
|
||||||
ScopedArenaIterator iter;
|
ScopedArenaPtr<InternalIterator> iter;
|
||||||
if (cf != 0) {
|
if (cf != 0) {
|
||||||
iter.set(dbfull()->NewInternalIterator(read_options, &arena,
|
iter.reset(dbfull()->NewInternalIterator(read_options, &arena,
|
||||||
kMaxSequenceNumber, handles_[cf]));
|
kMaxSequenceNumber, handles_[cf]));
|
||||||
} else {
|
} else {
|
||||||
iter.set(dbfull()->NewInternalIterator(read_options, &arena,
|
iter.reset(dbfull()->NewInternalIterator(read_options, &arena,
|
||||||
kMaxSequenceNumber));
|
kMaxSequenceNumber));
|
||||||
}
|
}
|
||||||
iter->SeekToFirst();
|
iter->SeekToFirst();
|
||||||
ASSERT_OK(iter->status());
|
ASSERT_OK(iter->status());
|
||||||
|
|
|
@ -41,7 +41,6 @@
|
||||||
#include "rocksdb/table.h"
|
#include "rocksdb/table.h"
|
||||||
#include "rocksdb/utilities/checkpoint.h"
|
#include "rocksdb/utilities/checkpoint.h"
|
||||||
#include "table/mock_table.h"
|
#include "table/mock_table.h"
|
||||||
#include "table/scoped_arena_iterator.h"
|
|
||||||
#include "test_util/sync_point.h"
|
#include "test_util/sync_point.h"
|
||||||
#include "test_util/testharness.h"
|
#include "test_util/testharness.h"
|
||||||
#include "util/cast_util.h"
|
#include "util/cast_util.h"
|
||||||
|
|
|
@ -17,7 +17,6 @@
|
||||||
#include "file/random_access_file_reader.h"
|
#include "file/random_access_file_reader.h"
|
||||||
#include "logging/logging.h"
|
#include "logging/logging.h"
|
||||||
#include "table/merging_iterator.h"
|
#include "table/merging_iterator.h"
|
||||||
#include "table/scoped_arena_iterator.h"
|
|
||||||
#include "table/sst_file_writer_collectors.h"
|
#include "table/sst_file_writer_collectors.h"
|
||||||
#include "table/table_builder.h"
|
#include "table/table_builder.h"
|
||||||
#include "table/unique_id_impl.h"
|
#include "table/unique_id_impl.h"
|
||||||
|
|
|
@ -440,7 +440,7 @@ Status FlushJob::MemPurge() {
|
||||||
: earliest_seqno;
|
: earliest_seqno;
|
||||||
}
|
}
|
||||||
|
|
||||||
ScopedArenaIterator iter(
|
ScopedArenaPtr<InternalIterator> iter(
|
||||||
NewMergingIterator(&(cfd_->internal_comparator()), memtables.data(),
|
NewMergingIterator(&(cfd_->internal_comparator()), memtables.data(),
|
||||||
static_cast<int>(memtables.size()), &arena));
|
static_cast<int>(memtables.size()), &arena));
|
||||||
|
|
||||||
|
@ -917,7 +917,7 @@ Status FlushJob::WriteLevel0Table() {
|
||||||
<< GetFlushReasonString(flush_reason_);
|
<< GetFlushReasonString(flush_reason_);
|
||||||
|
|
||||||
{
|
{
|
||||||
ScopedArenaIterator iter(
|
ScopedArenaPtr<InternalIterator> iter(
|
||||||
NewMergingIterator(&cfd_->internal_comparator(), memtables.data(),
|
NewMergingIterator(&cfd_->internal_comparator(), memtables.data(),
|
||||||
static_cast<int>(memtables.size()), &arena));
|
static_cast<int>(memtables.size()), &arena));
|
||||||
ROCKS_LOG_INFO(db_options_.info_log,
|
ROCKS_LOG_INFO(db_options_.info_log,
|
||||||
|
|
|
@ -39,7 +39,6 @@
|
||||||
#include "rocksdb/listener.h"
|
#include "rocksdb/listener.h"
|
||||||
#include "rocksdb/memtablerep.h"
|
#include "rocksdb/memtablerep.h"
|
||||||
#include "rocksdb/transaction_log.h"
|
#include "rocksdb/transaction_log.h"
|
||||||
#include "table/scoped_arena_iterator.h"
|
|
||||||
#include "util/autovector.h"
|
#include "util/autovector.h"
|
||||||
#include "util/stop_watch.h"
|
#include "util/stop_watch.h"
|
||||||
#include "util/thread_local.h"
|
#include "util/thread_local.h"
|
||||||
|
|
|
@ -18,7 +18,6 @@
|
||||||
#include "file/random_access_file_reader.h"
|
#include "file/random_access_file_reader.h"
|
||||||
#include "logging/logging.h"
|
#include "logging/logging.h"
|
||||||
#include "table/merging_iterator.h"
|
#include "table/merging_iterator.h"
|
||||||
#include "table/scoped_arena_iterator.h"
|
|
||||||
#include "table/sst_file_writer_collectors.h"
|
#include "table/sst_file_writer_collectors.h"
|
||||||
#include "table/table_builder.h"
|
#include "table/table_builder.h"
|
||||||
#include "table/unique_id_impl.h"
|
#include "table/unique_id_impl.h"
|
||||||
|
|
|
@ -13,7 +13,6 @@
|
||||||
#include "rocksdb/comparator.h"
|
#include "rocksdb/comparator.h"
|
||||||
#include "rocksdb/types.h"
|
#include "rocksdb/types.h"
|
||||||
#include "table/internal_iterator.h"
|
#include "table/internal_iterator.h"
|
||||||
#include "table/scoped_arena_iterator.h"
|
|
||||||
#include "table/table_builder.h"
|
#include "table/table_builder.h"
|
||||||
#include "util/heap.h"
|
#include "util/heap.h"
|
||||||
#include "util/kv_map.h"
|
#include "util/kv_map.h"
|
||||||
|
|
|
@ -22,7 +22,6 @@
|
||||||
#include "rocksdb/comparator.h"
|
#include "rocksdb/comparator.h"
|
||||||
#include "rocksdb/types.h"
|
#include "rocksdb/types.h"
|
||||||
#include "table/internal_iterator.h"
|
#include "table/internal_iterator.h"
|
||||||
#include "table/scoped_arena_iterator.h"
|
|
||||||
#include "table/table_builder.h"
|
#include "table/table_builder.h"
|
||||||
#include "util/heap.h"
|
#include "util/heap.h"
|
||||||
#include "util/kv_map.h"
|
#include "util/kv_map.h"
|
||||||
|
|
|
@ -81,7 +81,6 @@
|
||||||
#include "rocksdb/env.h"
|
#include "rocksdb/env.h"
|
||||||
#include "rocksdb/options.h"
|
#include "rocksdb/options.h"
|
||||||
#include "rocksdb/write_buffer_manager.h"
|
#include "rocksdb/write_buffer_manager.h"
|
||||||
#include "table/scoped_arena_iterator.h"
|
|
||||||
#include "table/unique_id_impl.h"
|
#include "table/unique_id_impl.h"
|
||||||
#include "util/string_util.h"
|
#include "util/string_util.h"
|
||||||
|
|
||||||
|
@ -443,7 +442,7 @@ class Repairer {
|
||||||
ReadOptions ro;
|
ReadOptions ro;
|
||||||
ro.total_order_seek = true;
|
ro.total_order_seek = true;
|
||||||
Arena arena;
|
Arena arena;
|
||||||
ScopedArenaIterator iter(
|
ScopedArenaPtr<InternalIterator> iter(
|
||||||
mem->NewIterator(ro, /*seqno_to_time_mapping=*/nullptr, &arena));
|
mem->NewIterator(ro, /*seqno_to_time_mapping=*/nullptr, &arena));
|
||||||
int64_t _current_time = 0;
|
int64_t _current_time = 0;
|
||||||
immutable_db_options_.clock->GetCurrentTime(&_current_time)
|
immutable_db_options_.clock->GetCurrentTime(&_current_time)
|
||||||
|
|
|
@ -2104,7 +2104,7 @@ Status Version::OverlapWithLevelIterator(const ReadOptions& read_options,
|
||||||
BeforeFile(ucmp, &largest_user_key, file)) {
|
BeforeFile(ucmp, &largest_user_key, file)) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
ScopedArenaIterator iter(cfd_->table_cache()->NewIterator(
|
ScopedArenaPtr<InternalIterator> iter(cfd_->table_cache()->NewIterator(
|
||||||
read_options, file_options, cfd_->internal_comparator(),
|
read_options, file_options, cfd_->internal_comparator(),
|
||||||
*file->file_metadata, &range_del_agg,
|
*file->file_metadata, &range_del_agg,
|
||||||
mutable_cf_options_.prefix_extractor, nullptr,
|
mutable_cf_options_.prefix_extractor, nullptr,
|
||||||
|
@ -2123,7 +2123,7 @@ Status Version::OverlapWithLevelIterator(const ReadOptions& read_options,
|
||||||
}
|
}
|
||||||
} else if (storage_info_.LevelFilesBrief(level).num_files > 0) {
|
} else if (storage_info_.LevelFilesBrief(level).num_files > 0) {
|
||||||
auto mem = arena.AllocateAligned(sizeof(LevelIterator));
|
auto mem = arena.AllocateAligned(sizeof(LevelIterator));
|
||||||
ScopedArenaIterator iter(new (mem) LevelIterator(
|
ScopedArenaPtr<InternalIterator> iter(new (mem) LevelIterator(
|
||||||
cfd_->table_cache(), read_options, file_options,
|
cfd_->table_cache(), read_options, file_options,
|
||||||
cfd_->internal_comparator(), &storage_info_.LevelFilesBrief(level),
|
cfd_->internal_comparator(), &storage_info_.LevelFilesBrief(level),
|
||||||
mutable_cf_options_.prefix_extractor, should_sample_file_read(),
|
mutable_cf_options_.prefix_extractor, should_sample_file_read(),
|
||||||
|
|
|
@ -21,7 +21,6 @@
|
||||||
#include "rocksdb/memtablerep.h"
|
#include "rocksdb/memtablerep.h"
|
||||||
#include "rocksdb/utilities/write_batch_with_index.h"
|
#include "rocksdb/utilities/write_batch_with_index.h"
|
||||||
#include "rocksdb/write_buffer_manager.h"
|
#include "rocksdb/write_buffer_manager.h"
|
||||||
#include "table/scoped_arena_iterator.h"
|
|
||||||
#include "test_util/testharness.h"
|
#include "test_util/testharness.h"
|
||||||
#include "test_util/testutil.h"
|
#include "test_util/testutil.h"
|
||||||
#include "util/string_util.h"
|
#include "util/string_util.h"
|
||||||
|
@ -55,13 +54,13 @@ static std::string PrintContents(WriteBatch* b,
|
||||||
int merge_count = 0;
|
int merge_count = 0;
|
||||||
for (int i = 0; i < 2; ++i) {
|
for (int i = 0; i < 2; ++i) {
|
||||||
Arena arena;
|
Arena arena;
|
||||||
ScopedArenaIterator arena_iter_guard;
|
ScopedArenaPtr<InternalIterator> arena_iter_guard;
|
||||||
std::unique_ptr<InternalIterator> iter_guard;
|
std::unique_ptr<InternalIterator> iter_guard;
|
||||||
InternalIterator* iter;
|
InternalIterator* iter;
|
||||||
if (i == 0) {
|
if (i == 0) {
|
||||||
iter = mem->NewIterator(ReadOptions(), /*seqno_to_time_mapping=*/nullptr,
|
iter = mem->NewIterator(ReadOptions(), /*seqno_to_time_mapping=*/nullptr,
|
||||||
&arena);
|
&arena);
|
||||||
arena_iter_guard.set(iter);
|
arena_iter_guard.reset(iter);
|
||||||
} else {
|
} else {
|
||||||
iter = mem->NewRangeTombstoneIterator(ReadOptions(),
|
iter = mem->NewRangeTombstoneIterator(ReadOptions(),
|
||||||
kMaxSequenceNumber /* read_seq */,
|
kMaxSequenceNumber /* read_seq */,
|
||||||
|
|
|
@ -22,7 +22,6 @@
|
||||||
#include "rocksjni/cplusplus_to_java_convert.h"
|
#include "rocksjni/cplusplus_to_java_convert.h"
|
||||||
#include "rocksjni/portal.h"
|
#include "rocksjni/portal.h"
|
||||||
#include "rocksjni/writebatchhandlerjnicallback.h"
|
#include "rocksjni/writebatchhandlerjnicallback.h"
|
||||||
#include "table/scoped_arena_iterator.h"
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Class: org_rocksdb_WriteBatch
|
* Class: org_rocksdb_WriteBatch
|
||||||
|
|
|
@ -22,7 +22,6 @@
|
||||||
#include "rocksdb/status.h"
|
#include "rocksdb/status.h"
|
||||||
#include "rocksdb/write_buffer_manager.h"
|
#include "rocksdb/write_buffer_manager.h"
|
||||||
#include "rocksjni/portal.h"
|
#include "rocksjni/portal.h"
|
||||||
#include "table/scoped_arena_iterator.h"
|
|
||||||
#include "test_util/testharness.h"
|
#include "test_util/testharness.h"
|
||||||
#include "util/string_util.h"
|
#include "util/string_util.h"
|
||||||
|
|
||||||
|
@ -59,7 +58,7 @@ jbyteArray Java_org_rocksdb_WriteBatchTest_getContents(JNIEnv* env,
|
||||||
nullptr, nullptr);
|
nullptr, nullptr);
|
||||||
unsigned int count = 0;
|
unsigned int count = 0;
|
||||||
ROCKSDB_NAMESPACE::Arena arena;
|
ROCKSDB_NAMESPACE::Arena arena;
|
||||||
ROCKSDB_NAMESPACE::ScopedArenaIterator iter(
|
ROCKSDB_NAMESPACE::ScopedArenaPtr<ROCKSDB_NAMESPACE::InternalIterator> iter(
|
||||||
mem->NewIterator(ROCKSDB_NAMESPACE::ReadOptions(),
|
mem->NewIterator(ROCKSDB_NAMESPACE::ReadOptions(),
|
||||||
/*seqno_to_time_mapping=*/nullptr, &arena));
|
/*seqno_to_time_mapping=*/nullptr, &arena));
|
||||||
for (iter->SeekToFirst(); iter->Valid(); iter->Next()) {
|
for (iter->SeekToFirst(); iter->Valid(); iter->Next()) {
|
||||||
|
|
|
@ -132,4 +132,15 @@ inline char* Arena::Allocate(size_t bytes) {
|
||||||
return AllocateFallback(bytes, false /* unaligned */);
|
return AllocateFallback(bytes, false /* unaligned */);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Like std::destroy_at but a callable type
|
||||||
|
template <typename T>
|
||||||
|
struct Destroyer {
|
||||||
|
void operator()(T* ptr) { ptr->~T(); }
|
||||||
|
};
|
||||||
|
|
||||||
|
// Like std::unique_ptr but only placement-deletes the object (for
|
||||||
|
// objects allocated on an arena).
|
||||||
|
template <typename T>
|
||||||
|
using ScopedArenaPtr = std::unique_ptr<T, Destroyer<T>>;
|
||||||
|
|
||||||
} // namespace ROCKSDB_NAMESPACE
|
} // namespace ROCKSDB_NAMESPACE
|
||||||
|
|
|
@ -1,57 +0,0 @@
|
||||||
// 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).
|
|
||||||
// Copyright (c) 2011 The LevelDB Authors. All rights reserved.
|
|
||||||
// Use of this source code is governed by a BSD-style license that can be
|
|
||||||
// found in the LICENSE file. See the AUTHORS file for names of contributors.
|
|
||||||
#pragma once
|
|
||||||
|
|
||||||
#include "port/port.h"
|
|
||||||
#include "table/internal_iterator.h"
|
|
||||||
|
|
||||||
namespace ROCKSDB_NAMESPACE {
|
|
||||||
class ScopedArenaIterator {
|
|
||||||
void reset(InternalIterator* iter) noexcept {
|
|
||||||
if (iter_ != nullptr) {
|
|
||||||
iter_->~InternalIterator();
|
|
||||||
}
|
|
||||||
iter_ = iter;
|
|
||||||
}
|
|
||||||
|
|
||||||
public:
|
|
||||||
explicit ScopedArenaIterator(InternalIterator* iter = nullptr)
|
|
||||||
: iter_(iter) {}
|
|
||||||
|
|
||||||
ScopedArenaIterator(const ScopedArenaIterator&) = delete;
|
|
||||||
ScopedArenaIterator& operator=(const ScopedArenaIterator&) = delete;
|
|
||||||
|
|
||||||
ScopedArenaIterator(ScopedArenaIterator&& o) noexcept {
|
|
||||||
iter_ = o.iter_;
|
|
||||||
o.iter_ = nullptr;
|
|
||||||
}
|
|
||||||
|
|
||||||
ScopedArenaIterator& operator=(ScopedArenaIterator&& o) noexcept {
|
|
||||||
reset(o.iter_);
|
|
||||||
o.iter_ = nullptr;
|
|
||||||
return *this;
|
|
||||||
}
|
|
||||||
|
|
||||||
InternalIterator* operator->() { return iter_; }
|
|
||||||
InternalIterator* get() { return iter_; }
|
|
||||||
|
|
||||||
void set(InternalIterator* iter) { reset(iter); }
|
|
||||||
|
|
||||||
InternalIterator* release() {
|
|
||||||
assert(iter_ != nullptr);
|
|
||||||
auto* res = iter_;
|
|
||||||
iter_ = nullptr;
|
|
||||||
return res;
|
|
||||||
}
|
|
||||||
|
|
||||||
~ScopedArenaIterator() { reset(nullptr); }
|
|
||||||
|
|
||||||
private:
|
|
||||||
InternalIterator* iter_;
|
|
||||||
};
|
|
||||||
} // namespace ROCKSDB_NAMESPACE
|
|
|
@ -63,7 +63,6 @@
|
||||||
#include "table/internal_iterator.h"
|
#include "table/internal_iterator.h"
|
||||||
#include "table/meta_blocks.h"
|
#include "table/meta_blocks.h"
|
||||||
#include "table/plain/plain_table_factory.h"
|
#include "table/plain/plain_table_factory.h"
|
||||||
#include "table/scoped_arena_iterator.h"
|
|
||||||
#include "table/sst_file_writer_collectors.h"
|
#include "table/sst_file_writer_collectors.h"
|
||||||
#include "table/unique_id_impl.h"
|
#include "table/unique_id_impl.h"
|
||||||
#include "test_util/sync_point.h"
|
#include "test_util/sync_point.h"
|
||||||
|
@ -4895,13 +4894,13 @@ TEST_F(MemTableTest, Simple) {
|
||||||
|
|
||||||
for (int i = 0; i < 2; ++i) {
|
for (int i = 0; i < 2; ++i) {
|
||||||
Arena arena;
|
Arena arena;
|
||||||
ScopedArenaIterator arena_iter_guard;
|
ScopedArenaPtr<InternalIterator> arena_iter_guard;
|
||||||
std::unique_ptr<InternalIterator> iter_guard;
|
std::unique_ptr<InternalIterator> iter_guard;
|
||||||
InternalIterator* iter;
|
InternalIterator* iter;
|
||||||
if (i == 0) {
|
if (i == 0) {
|
||||||
iter = GetMemTable()->NewIterator(
|
iter = GetMemTable()->NewIterator(
|
||||||
ReadOptions(), /*seqno_to_time_mapping=*/nullptr, &arena);
|
ReadOptions(), /*seqno_to_time_mapping=*/nullptr, &arena);
|
||||||
arena_iter_guard.set(iter);
|
arena_iter_guard.reset(iter);
|
||||||
} else {
|
} else {
|
||||||
iter = GetMemTable()->NewRangeTombstoneIterator(
|
iter = GetMemTable()->NewRangeTombstoneIterator(
|
||||||
ReadOptions(), kMaxSequenceNumber /* read_seq */,
|
ReadOptions(), kMaxSequenceNumber /* read_seq */,
|
||||||
|
|
|
@ -38,7 +38,6 @@
|
||||||
#include "rocksdb/utilities/options_util.h"
|
#include "rocksdb/utilities/options_util.h"
|
||||||
#include "rocksdb/write_batch.h"
|
#include "rocksdb/write_batch.h"
|
||||||
#include "rocksdb/write_buffer_manager.h"
|
#include "rocksdb/write_buffer_manager.h"
|
||||||
#include "table/scoped_arena_iterator.h"
|
|
||||||
#include "table/sst_file_dumper.h"
|
#include "table/sst_file_dumper.h"
|
||||||
#include "tools/ldb_cmd_impl.h"
|
#include "tools/ldb_cmd_impl.h"
|
||||||
#include "util/cast_util.h"
|
#include "util/cast_util.h"
|
||||||
|
|
|
@ -82,7 +82,7 @@ Status GetAllKeyVersions(DB* db, ColumnFamilyHandle* cfh, Slice begin_key,
|
||||||
auto icmp = InternalKeyComparator(idb->GetOptions(cfh).comparator);
|
auto icmp = InternalKeyComparator(idb->GetOptions(cfh).comparator);
|
||||||
ReadOptions read_options;
|
ReadOptions read_options;
|
||||||
Arena arena;
|
Arena arena;
|
||||||
ScopedArenaIterator iter(
|
ScopedArenaPtr<InternalIterator> iter(
|
||||||
idb->NewInternalIterator(read_options, &arena, kMaxSequenceNumber, cfh));
|
idb->NewInternalIterator(read_options, &arena, kMaxSequenceNumber, cfh));
|
||||||
|
|
||||||
if (!begin_key.empty()) {
|
if (!begin_key.empty()) {
|
||||||
|
|
Loading…
Reference in New Issue