@nxtedition/rocksdb 7.1.33 → 7.1.34
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/deps/rocksdb/rocksdb/cache/clock_cache.cc +402 -345
- package/deps/rocksdb/rocksdb/cache/clock_cache.h +121 -64
- package/deps/rocksdb/rocksdb/cache/lru_cache_test.cc +28 -18
- package/deps/rocksdb/rocksdb/db/arena_wrapped_db_iter.cc +1 -0
- package/deps/rocksdb/rocksdb/db/arena_wrapped_db_iter.h +2 -0
- package/deps/rocksdb/rocksdb/db/builder.cc +2 -1
- package/deps/rocksdb/rocksdb/db/c.cc +563 -673
- package/deps/rocksdb/rocksdb/db/c_test.c +168 -169
- package/deps/rocksdb/rocksdb/db/column_family.cc +16 -15
- package/deps/rocksdb/rocksdb/db/column_family.h +7 -7
- package/deps/rocksdb/rocksdb/db/column_family_test.cc +17 -28
- package/deps/rocksdb/rocksdb/db/compact_files_test.cc +4 -9
- package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator.cc +8 -3
- package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator_test.cc +114 -0
- package/deps/rocksdb/rocksdb/db/comparator_db_test.cc +2 -3
- package/deps/rocksdb/rocksdb/db/convenience.cc +3 -5
- package/deps/rocksdb/rocksdb/db/corruption_test.cc +10 -14
- package/deps/rocksdb/rocksdb/db/cuckoo_table_db_test.cc +9 -13
- package/deps/rocksdb/rocksdb/db/db_basic_test.cc +2 -2
- package/deps/rocksdb/rocksdb/db/db_block_cache_test.cc +2 -2
- package/deps/rocksdb/rocksdb/db/db_bloom_filter_test.cc +14 -16
- package/deps/rocksdb/rocksdb/db/db_compaction_test.cc +52 -72
- package/deps/rocksdb/rocksdb/db/db_dynamic_level_test.cc +2 -2
- package/deps/rocksdb/rocksdb/db/db_encryption_test.cc +12 -12
- package/deps/rocksdb/rocksdb/db/db_filesnapshot.cc +1 -2
- package/deps/rocksdb/rocksdb/db/db_flush_test.cc +3 -3
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl.cc +1 -12
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl.h +3 -0
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_write.cc +26 -0
- package/deps/rocksdb/rocksdb/db/db_info_dumper.cc +1 -0
- package/deps/rocksdb/rocksdb/db/db_iter.cc +12 -6
- package/deps/rocksdb/rocksdb/db/db_iter.h +1 -0
- package/deps/rocksdb/rocksdb/db/db_iter_stress_test.cc +6 -7
- package/deps/rocksdb/rocksdb/db/db_iter_test.cc +10 -8
- package/deps/rocksdb/rocksdb/db/db_iterator_test.cc +15 -13
- package/deps/rocksdb/rocksdb/db/db_log_iter_test.cc +7 -9
- package/deps/rocksdb/rocksdb/db/db_logical_block_size_cache_test.cc +4 -4
- package/deps/rocksdb/rocksdb/db/db_merge_operand_test.cc +1 -1
- package/deps/rocksdb/rocksdb/db/db_merge_operator_test.cc +2 -4
- package/deps/rocksdb/rocksdb/db/db_options_test.cc +4 -4
- package/deps/rocksdb/rocksdb/db/db_properties_test.cc +7 -4
- package/deps/rocksdb/rocksdb/db/db_range_del_test.cc +7 -5
- package/deps/rocksdb/rocksdb/db/db_secondary_test.cc +1 -1
- package/deps/rocksdb/rocksdb/db/db_statistics_test.cc +8 -6
- package/deps/rocksdb/rocksdb/db/db_table_properties_test.cc +18 -23
- package/deps/rocksdb/rocksdb/db/db_tailing_iter_test.cc +3 -5
- package/deps/rocksdb/rocksdb/db/db_test.cc +10 -5
- package/deps/rocksdb/rocksdb/db/db_test2.cc +172 -169
- package/deps/rocksdb/rocksdb/db/db_test_util.cc +68 -66
- package/deps/rocksdb/rocksdb/db/db_test_util.h +1 -3
- package/deps/rocksdb/rocksdb/db/db_universal_compaction_test.cc +31 -39
- package/deps/rocksdb/rocksdb/db/db_with_timestamp_basic_test.cc +182 -2
- package/deps/rocksdb/rocksdb/db/db_write_test.cc +43 -40
- package/deps/rocksdb/rocksdb/db/dbformat.h +15 -0
- package/deps/rocksdb/rocksdb/db/dbformat_test.cc +35 -34
- package/deps/rocksdb/rocksdb/db/deletefile_test.cc +10 -11
- package/deps/rocksdb/rocksdb/db/error_handler.cc +6 -6
- package/deps/rocksdb/rocksdb/db/error_handler.h +93 -94
- package/deps/rocksdb/rocksdb/db/event_helpers.cc +1 -1
- package/deps/rocksdb/rocksdb/db/event_helpers.h +3 -3
- package/deps/rocksdb/rocksdb/db/external_sst_file_ingestion_job.cc +16 -17
- package/deps/rocksdb/rocksdb/db/external_sst_file_test.cc +2 -2
- package/deps/rocksdb/rocksdb/db/fault_injection_test.cc +1 -2
- package/deps/rocksdb/rocksdb/db/file_indexer.cc +2 -0
- package/deps/rocksdb/rocksdb/db/file_indexer.h +2 -1
- package/deps/rocksdb/rocksdb/db/file_indexer_test.cc +4 -2
- package/deps/rocksdb/rocksdb/db/filename_test.cc +27 -29
- package/deps/rocksdb/rocksdb/db/flush_job.cc +7 -13
- package/deps/rocksdb/rocksdb/db/flush_job_test.cc +2 -2
- package/deps/rocksdb/rocksdb/db/forward_iterator.cc +15 -21
- package/deps/rocksdb/rocksdb/db/forward_iterator.h +7 -6
- package/deps/rocksdb/rocksdb/db/forward_iterator_bench.cc +4 -2
- package/deps/rocksdb/rocksdb/db/import_column_family_job.cc +2 -2
- package/deps/rocksdb/rocksdb/db/internal_stats.cc +59 -14
- package/deps/rocksdb/rocksdb/db/internal_stats.h +27 -11
- package/deps/rocksdb/rocksdb/db/job_context.h +5 -6
- package/deps/rocksdb/rocksdb/db/listener_test.cc +21 -23
- package/deps/rocksdb/rocksdb/db/log_reader.cc +7 -11
- package/deps/rocksdb/rocksdb/db/log_reader.h +4 -6
- package/deps/rocksdb/rocksdb/db/log_test.cc +6 -12
- package/deps/rocksdb/rocksdb/db/log_writer.h +1 -1
- package/deps/rocksdb/rocksdb/db/logs_with_prep_tracker.h +0 -1
- package/deps/rocksdb/rocksdb/db/lookup_key.h +4 -1
- package/deps/rocksdb/rocksdb/db/malloc_stats.cc +2 -1
- package/deps/rocksdb/rocksdb/db/manual_compaction_test.cc +3 -5
- package/deps/rocksdb/rocksdb/db/memtable.cc +34 -22
- package/deps/rocksdb/rocksdb/db/memtable.h +4 -6
- package/deps/rocksdb/rocksdb/db/memtable_list.cc +7 -0
- package/deps/rocksdb/rocksdb/db/memtable_list_test.cc +37 -13
- package/deps/rocksdb/rocksdb/db/merge_context.h +1 -0
- package/deps/rocksdb/rocksdb/db/merge_helper.cc +128 -14
- package/deps/rocksdb/rocksdb/db/merge_helper.h +15 -7
- package/deps/rocksdb/rocksdb/db/merge_helper_test.cc +2 -1
- package/deps/rocksdb/rocksdb/db/merge_operator.cc +5 -6
- package/deps/rocksdb/rocksdb/db/obsolete_files_test.cc +4 -3
- package/deps/rocksdb/rocksdb/db/options_file_test.cc +1 -1
- package/deps/rocksdb/rocksdb/db/perf_context_test.cc +55 -43
- package/deps/rocksdb/rocksdb/db/plain_table_db_test.cc +288 -299
- package/deps/rocksdb/rocksdb/db/prefix_test.cc +22 -27
- package/deps/rocksdb/rocksdb/db/range_del_aggregator.cc +1 -1
- package/deps/rocksdb/rocksdb/db/range_del_aggregator_test.cc +1 -1
- package/deps/rocksdb/rocksdb/db/repair.cc +7 -8
- package/deps/rocksdb/rocksdb/db/repair_test.cc +3 -4
- package/deps/rocksdb/rocksdb/db/snapshot_impl.cc +4 -5
- package/deps/rocksdb/rocksdb/db/snapshot_impl.h +10 -4
- package/deps/rocksdb/rocksdb/db/table_cache.cc +3 -4
- package/deps/rocksdb/rocksdb/db/table_properties_collector.cc +6 -7
- package/deps/rocksdb/rocksdb/db/table_properties_collector_test.cc +22 -22
- package/deps/rocksdb/rocksdb/db/transaction_log_impl.cc +12 -12
- package/deps/rocksdb/rocksdb/db/transaction_log_impl.h +6 -8
- package/deps/rocksdb/rocksdb/db/trim_history_scheduler.h +2 -0
- package/deps/rocksdb/rocksdb/db/version_builder_test.cc +3 -3
- package/deps/rocksdb/rocksdb/db/version_edit.cc +2 -5
- package/deps/rocksdb/rocksdb/db/version_edit.h +8 -12
- package/deps/rocksdb/rocksdb/db/version_set.cc +74 -102
- package/deps/rocksdb/rocksdb/db/version_set.h +8 -10
- package/deps/rocksdb/rocksdb/db/version_set_sync_and_async.h +0 -5
- package/deps/rocksdb/rocksdb/db/version_set_test.cc +47 -45
- package/deps/rocksdb/rocksdb/db/wal_manager.cc +6 -5
- package/deps/rocksdb/rocksdb/db/wal_manager.h +2 -2
- package/deps/rocksdb/rocksdb/db/wal_manager_test.cc +4 -3
- package/deps/rocksdb/rocksdb/db/wide/db_wide_basic_test.cc +144 -61
- package/deps/rocksdb/rocksdb/db/write_batch.cc +41 -24
- package/deps/rocksdb/rocksdb/db/write_batch_internal.h +2 -7
- package/deps/rocksdb/rocksdb/db/write_batch_test.cc +105 -104
- package/deps/rocksdb/rocksdb/db/write_callback_test.cc +5 -4
- package/deps/rocksdb/rocksdb/db/write_controller.h +1 -0
- package/deps/rocksdb/rocksdb/db/write_controller_test.cc +1 -1
- package/deps/rocksdb/rocksdb/db/write_thread.cc +8 -6
- package/deps/rocksdb/rocksdb/env/io_posix.h +6 -0
- package/deps/rocksdb/rocksdb/file/file_prefetch_buffer.cc +134 -65
- package/deps/rocksdb/rocksdb/file/file_prefetch_buffer.h +29 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/compaction_filter.h +1 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/db.h +1 -4
- package/deps/rocksdb/rocksdb/include/rocksdb/merge_operator.h +1 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/stackable_db.h +4 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/write_batch.h +14 -4
- package/deps/rocksdb/rocksdb/table/get_context.cc +52 -7
- package/deps/rocksdb/rocksdb/table/get_context.h +1 -2
- package/deps/rocksdb/rocksdb/tools/db_bench_tool.cc +13 -0
- package/deps/rocksdb/rocksdb/util/crc32c_arm64.cc +36 -4
- package/deps/rocksdb/rocksdb/utilities/transactions/transaction_test.cc +6 -6
- package/deps/rocksdb/rocksdb/utilities/transactions/transaction_test.h +23 -28
- package/deps/rocksdb/rocksdb/utilities/transactions/write_committed_transaction_ts_test.cc +11 -1
- package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_transaction_test.cc +19 -17
- package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_internal.cc +10 -7
- package/index.js +7 -7
- package/package.json +1 -1
- package/prebuilds/darwin-arm64/node.napi.node +0 -0
- package/prebuilds/linux-x64/node.napi.node +0 -0
|
@@ -38,7 +38,6 @@
|
|
|
38
38
|
#include "util/string_util.h"
|
|
39
39
|
#include "utilities/merge_operators.h"
|
|
40
40
|
|
|
41
|
-
|
|
42
41
|
namespace ROCKSDB_NAMESPACE {
|
|
43
42
|
class PlainTableKeyDecoderTest : public testing::Test {};
|
|
44
43
|
|
|
@@ -148,9 +147,7 @@ class PlainTableDBTest : public testing::Test,
|
|
|
148
147
|
|
|
149
148
|
DBImpl* dbfull() { return static_cast_with_check<DBImpl>(db_); }
|
|
150
149
|
|
|
151
|
-
void Reopen(Options* options = nullptr) {
|
|
152
|
-
ASSERT_OK(TryReopen(options));
|
|
153
|
-
}
|
|
150
|
+
void Reopen(Options* options = nullptr) { ASSERT_OK(TryReopen(options)); }
|
|
154
151
|
|
|
155
152
|
void Close() {
|
|
156
153
|
delete db_;
|
|
@@ -160,7 +157,7 @@ class PlainTableDBTest : public testing::Test,
|
|
|
160
157
|
bool mmap_mode() const { return mmap_mode_; }
|
|
161
158
|
|
|
162
159
|
void DestroyAndReopen(Options* options = nullptr) {
|
|
163
|
-
//Destroy using last options
|
|
160
|
+
// Destroy using last options
|
|
164
161
|
Destroy(&last_options_);
|
|
165
162
|
ASSERT_OK(TryReopen(options));
|
|
166
163
|
}
|
|
@@ -200,9 +197,7 @@ class PlainTableDBTest : public testing::Test,
|
|
|
200
197
|
return db_->Put(WriteOptions(), k, v);
|
|
201
198
|
}
|
|
202
199
|
|
|
203
|
-
Status Delete(const std::string& k) {
|
|
204
|
-
return db_->Delete(WriteOptions(), k);
|
|
205
|
-
}
|
|
200
|
+
Status Delete(const std::string& k) { return db_->Delete(WriteOptions(), k); }
|
|
206
201
|
|
|
207
202
|
std::string Get(const std::string& k, const Snapshot* snapshot = nullptr) {
|
|
208
203
|
ReadOptions options;
|
|
@@ -217,7 +212,6 @@ class PlainTableDBTest : public testing::Test,
|
|
|
217
212
|
return result;
|
|
218
213
|
}
|
|
219
214
|
|
|
220
|
-
|
|
221
215
|
int NumTableFilesAtLevel(int level) {
|
|
222
216
|
std::string property;
|
|
223
217
|
EXPECT_TRUE(db_->GetProperty(
|
|
@@ -448,99 +442,100 @@ TEST_P(PlainTableDBTest, Flush) {
|
|
|
448
442
|
for (size_t huge_page_tlb_size = 0; huge_page_tlb_size <= 2 * 1024 * 1024;
|
|
449
443
|
huge_page_tlb_size += 2 * 1024 * 1024) {
|
|
450
444
|
for (EncodingType encoding_type : {kPlain, kPrefix}) {
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
if (!store_index_in_file) {
|
|
528
|
-
ASSERT_EQ(total_order ? "4" : "12",
|
|
529
|
-
(tp->user_collected_properties)
|
|
530
|
-
.at("plain_table_hash_table_size"));
|
|
531
|
-
ASSERT_EQ("0", (tp->user_collected_properties)
|
|
532
|
-
.at("plain_table_sub_index_size"));
|
|
445
|
+
for (int bloom = -1; bloom <= 117; bloom += 117) {
|
|
446
|
+
const int bloom_bits = std::max(bloom, 0);
|
|
447
|
+
const bool full_scan_mode = bloom < 0;
|
|
448
|
+
for (int total_order = 0; total_order <= 1; total_order++) {
|
|
449
|
+
for (int store_index_in_file = 0; store_index_in_file <= 1;
|
|
450
|
+
++store_index_in_file) {
|
|
451
|
+
Options options = CurrentOptions();
|
|
452
|
+
options.create_if_missing = true;
|
|
453
|
+
// Set only one bucket to force bucket conflict.
|
|
454
|
+
// Test index interval for the same prefix to be 1, 2 and 4
|
|
455
|
+
if (total_order) {
|
|
456
|
+
options.prefix_extractor.reset();
|
|
457
|
+
|
|
458
|
+
PlainTableOptions plain_table_options;
|
|
459
|
+
plain_table_options.user_key_len = 0;
|
|
460
|
+
plain_table_options.bloom_bits_per_key = bloom_bits;
|
|
461
|
+
plain_table_options.hash_table_ratio = 0;
|
|
462
|
+
plain_table_options.index_sparseness = 2;
|
|
463
|
+
plain_table_options.huge_page_tlb_size = huge_page_tlb_size;
|
|
464
|
+
plain_table_options.encoding_type = encoding_type;
|
|
465
|
+
plain_table_options.full_scan_mode = full_scan_mode;
|
|
466
|
+
plain_table_options.store_index_in_file = store_index_in_file;
|
|
467
|
+
|
|
468
|
+
options.table_factory.reset(
|
|
469
|
+
NewPlainTableFactory(plain_table_options));
|
|
470
|
+
} else {
|
|
471
|
+
PlainTableOptions plain_table_options;
|
|
472
|
+
plain_table_options.user_key_len = 0;
|
|
473
|
+
plain_table_options.bloom_bits_per_key = bloom_bits;
|
|
474
|
+
plain_table_options.hash_table_ratio = 0.75;
|
|
475
|
+
plain_table_options.index_sparseness = 16;
|
|
476
|
+
plain_table_options.huge_page_tlb_size = huge_page_tlb_size;
|
|
477
|
+
plain_table_options.encoding_type = encoding_type;
|
|
478
|
+
plain_table_options.full_scan_mode = full_scan_mode;
|
|
479
|
+
plain_table_options.store_index_in_file = store_index_in_file;
|
|
480
|
+
|
|
481
|
+
options.table_factory.reset(
|
|
482
|
+
NewPlainTableFactory(plain_table_options));
|
|
483
|
+
}
|
|
484
|
+
DestroyAndReopen(&options);
|
|
485
|
+
uint64_t int_num;
|
|
486
|
+
ASSERT_TRUE(dbfull()->GetIntProperty(
|
|
487
|
+
"rocksdb.estimate-table-readers-mem", &int_num));
|
|
488
|
+
ASSERT_EQ(int_num, 0U);
|
|
489
|
+
|
|
490
|
+
ASSERT_OK(Put("1000000000000foo", "v1"));
|
|
491
|
+
ASSERT_OK(Put("0000000000000bar", "v2"));
|
|
492
|
+
ASSERT_OK(Put("1000000000000foo", "v3"));
|
|
493
|
+
ASSERT_OK(dbfull()->TEST_FlushMemTable());
|
|
494
|
+
|
|
495
|
+
ASSERT_TRUE(dbfull()->GetIntProperty(
|
|
496
|
+
"rocksdb.estimate-table-readers-mem", &int_num));
|
|
497
|
+
ASSERT_GT(int_num, 0U);
|
|
498
|
+
|
|
499
|
+
TablePropertiesCollection ptc;
|
|
500
|
+
ASSERT_OK(reinterpret_cast<DB*>(dbfull())->GetPropertiesOfAllTables(
|
|
501
|
+
&ptc));
|
|
502
|
+
ASSERT_EQ(1U, ptc.size());
|
|
503
|
+
auto row = ptc.begin();
|
|
504
|
+
auto tp = row->second;
|
|
505
|
+
|
|
506
|
+
if (full_scan_mode) {
|
|
507
|
+
// Does not support Get/Seek
|
|
508
|
+
std::unique_ptr<Iterator> iter(
|
|
509
|
+
dbfull()->NewIterator(ReadOptions()));
|
|
510
|
+
iter->SeekToFirst();
|
|
511
|
+
ASSERT_TRUE(iter->Valid());
|
|
512
|
+
ASSERT_EQ("0000000000000bar", iter->key().ToString());
|
|
513
|
+
ASSERT_EQ("v2", iter->value().ToString());
|
|
514
|
+
iter->Next();
|
|
515
|
+
ASSERT_TRUE(iter->Valid());
|
|
516
|
+
ASSERT_EQ("1000000000000foo", iter->key().ToString());
|
|
517
|
+
ASSERT_EQ("v3", iter->value().ToString());
|
|
518
|
+
iter->Next();
|
|
519
|
+
ASSERT_TRUE(!iter->Valid());
|
|
520
|
+
ASSERT_TRUE(iter->status().ok());
|
|
533
521
|
} else {
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
|
|
522
|
+
if (!store_index_in_file) {
|
|
523
|
+
ASSERT_EQ(total_order ? "4" : "12",
|
|
524
|
+
(tp->user_collected_properties)
|
|
525
|
+
.at("plain_table_hash_table_size"));
|
|
526
|
+
ASSERT_EQ("0", (tp->user_collected_properties)
|
|
527
|
+
.at("plain_table_sub_index_size"));
|
|
528
|
+
} else {
|
|
529
|
+
ASSERT_EQ("0", (tp->user_collected_properties)
|
|
530
|
+
.at("plain_table_hash_table_size"));
|
|
531
|
+
ASSERT_EQ("0", (tp->user_collected_properties)
|
|
532
|
+
.at("plain_table_sub_index_size"));
|
|
533
|
+
}
|
|
534
|
+
ASSERT_EQ("v3", Get("1000000000000foo"));
|
|
535
|
+
ASSERT_EQ("v2", Get("0000000000000bar"));
|
|
538
536
|
}
|
|
539
|
-
ASSERT_EQ("v3", Get("1000000000000foo"));
|
|
540
|
-
ASSERT_EQ("v2", Get("0000000000000bar"));
|
|
541
537
|
}
|
|
542
538
|
}
|
|
543
|
-
}
|
|
544
539
|
}
|
|
545
540
|
}
|
|
546
541
|
}
|
|
@@ -550,79 +545,79 @@ TEST_P(PlainTableDBTest, Flush2) {
|
|
|
550
545
|
for (size_t huge_page_tlb_size = 0; huge_page_tlb_size <= 2 * 1024 * 1024;
|
|
551
546
|
huge_page_tlb_size += 2 * 1024 * 1024) {
|
|
552
547
|
for (EncodingType encoding_type : {kPlain, kPrefix}) {
|
|
553
|
-
|
|
554
|
-
|
|
555
|
-
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
|
|
568
|
-
|
|
569
|
-
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
|
|
576
|
-
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
|
|
587
|
-
|
|
588
|
-
|
|
589
|
-
|
|
590
|
-
|
|
591
|
-
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
|
|
595
|
-
|
|
596
|
-
|
|
597
|
-
|
|
598
|
-
|
|
599
|
-
|
|
600
|
-
|
|
601
|
-
|
|
602
|
-
|
|
603
|
-
|
|
604
|
-
|
|
605
|
-
|
|
606
|
-
|
|
607
|
-
|
|
608
|
-
|
|
609
|
-
|
|
610
|
-
|
|
611
|
-
|
|
612
|
-
|
|
613
|
-
|
|
614
|
-
|
|
615
|
-
|
|
616
|
-
|
|
617
|
-
|
|
618
|
-
|
|
619
|
-
|
|
548
|
+
for (int bloom_bits = 0; bloom_bits <= 117; bloom_bits += 117) {
|
|
549
|
+
for (int total_order = 0; total_order <= 1; total_order++) {
|
|
550
|
+
for (int store_index_in_file = 0; store_index_in_file <= 1;
|
|
551
|
+
++store_index_in_file) {
|
|
552
|
+
if (encoding_type == kPrefix && total_order) {
|
|
553
|
+
continue;
|
|
554
|
+
}
|
|
555
|
+
if (!bloom_bits && store_index_in_file) {
|
|
556
|
+
continue;
|
|
557
|
+
}
|
|
558
|
+
if (total_order && store_index_in_file) {
|
|
559
|
+
continue;
|
|
560
|
+
}
|
|
561
|
+
bool expect_bloom_not_match = false;
|
|
562
|
+
Options options = CurrentOptions();
|
|
563
|
+
options.create_if_missing = true;
|
|
564
|
+
// Set only one bucket to force bucket conflict.
|
|
565
|
+
// Test index interval for the same prefix to be 1, 2 and 4
|
|
566
|
+
PlainTableOptions plain_table_options;
|
|
567
|
+
if (total_order) {
|
|
568
|
+
options.prefix_extractor = nullptr;
|
|
569
|
+
plain_table_options.hash_table_ratio = 0;
|
|
570
|
+
plain_table_options.index_sparseness = 2;
|
|
571
|
+
} else {
|
|
572
|
+
plain_table_options.hash_table_ratio = 0.75;
|
|
573
|
+
plain_table_options.index_sparseness = 16;
|
|
574
|
+
}
|
|
575
|
+
plain_table_options.user_key_len = kPlainTableVariableLength;
|
|
576
|
+
plain_table_options.bloom_bits_per_key = bloom_bits;
|
|
577
|
+
plain_table_options.huge_page_tlb_size = huge_page_tlb_size;
|
|
578
|
+
plain_table_options.encoding_type = encoding_type;
|
|
579
|
+
plain_table_options.store_index_in_file = store_index_in_file;
|
|
580
|
+
options.table_factory.reset(new TestPlainTableFactory(
|
|
581
|
+
&expect_bloom_not_match, plain_table_options,
|
|
582
|
+
0 /* column_family_id */, kDefaultColumnFamilyName));
|
|
583
|
+
|
|
584
|
+
DestroyAndReopen(&options);
|
|
585
|
+
ASSERT_OK(Put("0000000000000bar", "b"));
|
|
586
|
+
ASSERT_OK(Put("1000000000000foo", "v1"));
|
|
587
|
+
ASSERT_OK(dbfull()->TEST_FlushMemTable());
|
|
588
|
+
|
|
589
|
+
ASSERT_OK(Put("1000000000000foo", "v2"));
|
|
590
|
+
ASSERT_OK(dbfull()->TEST_FlushMemTable());
|
|
591
|
+
ASSERT_EQ("v2", Get("1000000000000foo"));
|
|
592
|
+
|
|
593
|
+
ASSERT_OK(Put("0000000000000eee", "v3"));
|
|
594
|
+
ASSERT_OK(dbfull()->TEST_FlushMemTable());
|
|
595
|
+
ASSERT_EQ("v3", Get("0000000000000eee"));
|
|
596
|
+
|
|
597
|
+
ASSERT_OK(Delete("0000000000000bar"));
|
|
598
|
+
ASSERT_OK(dbfull()->TEST_FlushMemTable());
|
|
599
|
+
ASSERT_EQ("NOT_FOUND", Get("0000000000000bar"));
|
|
600
|
+
|
|
601
|
+
ASSERT_OK(Put("0000000000000eee", "v5"));
|
|
602
|
+
ASSERT_OK(Put("9000000000000eee", "v5"));
|
|
603
|
+
ASSERT_OK(dbfull()->TEST_FlushMemTable());
|
|
604
|
+
ASSERT_EQ("v5", Get("0000000000000eee"));
|
|
605
|
+
|
|
606
|
+
// Test Bloom Filter
|
|
607
|
+
if (bloom_bits > 0) {
|
|
608
|
+
// Neither key nor value should exist.
|
|
609
|
+
expect_bloom_not_match = true;
|
|
610
|
+
ASSERT_EQ("NOT_FOUND", Get("5_not00000000bar"));
|
|
611
|
+
// Key doesn't exist any more but prefix exists.
|
|
612
|
+
if (total_order) {
|
|
613
|
+
ASSERT_EQ("NOT_FOUND", Get("1000000000000not"));
|
|
614
|
+
ASSERT_EQ("NOT_FOUND", Get("0000000000000not"));
|
|
615
|
+
}
|
|
616
|
+
expect_bloom_not_match = false;
|
|
617
|
+
}
|
|
620
618
|
}
|
|
621
|
-
expect_bloom_not_match = false;
|
|
622
619
|
}
|
|
623
620
|
}
|
|
624
|
-
}
|
|
625
|
-
}
|
|
626
621
|
}
|
|
627
622
|
}
|
|
628
623
|
}
|
|
@@ -675,129 +670,129 @@ TEST_P(PlainTableDBTest, Iterator) {
|
|
|
675
670
|
for (size_t huge_page_tlb_size = 0; huge_page_tlb_size <= 2 * 1024 * 1024;
|
|
676
671
|
huge_page_tlb_size += 2 * 1024 * 1024) {
|
|
677
672
|
for (EncodingType encoding_type : {kPlain, kPrefix}) {
|
|
678
|
-
|
|
679
|
-
|
|
680
|
-
|
|
681
|
-
|
|
682
|
-
|
|
683
|
-
|
|
684
|
-
|
|
685
|
-
|
|
686
|
-
|
|
687
|
-
|
|
688
|
-
|
|
689
|
-
|
|
690
|
-
|
|
691
|
-
|
|
692
|
-
|
|
693
|
-
|
|
694
|
-
|
|
695
|
-
|
|
696
|
-
|
|
697
|
-
|
|
698
|
-
|
|
699
|
-
|
|
700
|
-
|
|
701
|
-
|
|
702
|
-
|
|
703
|
-
|
|
704
|
-
|
|
705
|
-
|
|
706
|
-
|
|
707
|
-
|
|
708
|
-
|
|
709
|
-
|
|
710
|
-
|
|
711
|
-
|
|
712
|
-
|
|
713
|
-
|
|
714
|
-
|
|
715
|
-
|
|
716
|
-
|
|
717
|
-
|
|
718
|
-
|
|
719
|
-
|
|
720
|
-
|
|
721
|
-
|
|
722
|
-
|
|
723
|
-
|
|
724
|
-
|
|
725
|
-
|
|
726
|
-
|
|
727
|
-
|
|
728
|
-
|
|
729
|
-
|
|
730
|
-
|
|
731
|
-
|
|
732
|
-
|
|
733
|
-
|
|
734
|
-
|
|
735
|
-
|
|
736
|
-
|
|
737
|
-
|
|
738
|
-
|
|
739
|
-
|
|
740
|
-
|
|
741
|
-
|
|
742
|
-
|
|
743
|
-
|
|
744
|
-
|
|
745
|
-
|
|
746
|
-
|
|
747
|
-
|
|
748
|
-
|
|
749
|
-
|
|
750
|
-
|
|
751
|
-
ASSERT_TRUE(iter->Valid());
|
|
752
|
-
ASSERT_EQ("3000000000000bar", iter->key().ToString());
|
|
753
|
-
ASSERT_EQ("bar_v", iter->value().ToString());
|
|
754
|
-
|
|
755
|
-
iter->Seek("1000000000foo000");
|
|
756
|
-
ASSERT_TRUE(iter->Valid());
|
|
757
|
-
ASSERT_EQ("1000000000foo001", iter->key().ToString());
|
|
758
|
-
ASSERT_EQ("v1", iter->value().ToString());
|
|
759
|
-
|
|
760
|
-
iter->Seek("1000000000foo005");
|
|
761
|
-
ASSERT_TRUE(iter->Valid());
|
|
762
|
-
ASSERT_EQ("1000000000foo005", iter->key().ToString());
|
|
763
|
-
ASSERT_EQ("v__5", iter->value().ToString());
|
|
764
|
-
|
|
765
|
-
iter->Seek("1000000000foo006");
|
|
766
|
-
ASSERT_TRUE(iter->Valid());
|
|
767
|
-
ASSERT_EQ("1000000000foo007", iter->key().ToString());
|
|
768
|
-
ASSERT_EQ("v__7", iter->value().ToString());
|
|
769
|
-
|
|
770
|
-
iter->Seek("1000000000foo008");
|
|
771
|
-
ASSERT_TRUE(iter->Valid());
|
|
772
|
-
ASSERT_EQ("1000000000foo008", iter->key().ToString());
|
|
773
|
-
ASSERT_EQ("v__8", iter->value().ToString());
|
|
774
|
-
|
|
775
|
-
if (total_order == 0) {
|
|
776
|
-
iter->Seek("1000000000foo009");
|
|
673
|
+
for (int bloom_bits = 0; bloom_bits <= 117; bloom_bits += 117) {
|
|
674
|
+
for (int total_order = 0; total_order <= 1; total_order++) {
|
|
675
|
+
if (encoding_type == kPrefix && total_order == 1) {
|
|
676
|
+
continue;
|
|
677
|
+
}
|
|
678
|
+
bool expect_bloom_not_match = false;
|
|
679
|
+
Options options = CurrentOptions();
|
|
680
|
+
options.create_if_missing = true;
|
|
681
|
+
// Set only one bucket to force bucket conflict.
|
|
682
|
+
// Test index interval for the same prefix to be 1, 2 and 4
|
|
683
|
+
if (total_order) {
|
|
684
|
+
options.prefix_extractor = nullptr;
|
|
685
|
+
|
|
686
|
+
PlainTableOptions plain_table_options;
|
|
687
|
+
plain_table_options.user_key_len = 16;
|
|
688
|
+
plain_table_options.bloom_bits_per_key = bloom_bits;
|
|
689
|
+
plain_table_options.hash_table_ratio = 0;
|
|
690
|
+
plain_table_options.index_sparseness = 2;
|
|
691
|
+
plain_table_options.huge_page_tlb_size = huge_page_tlb_size;
|
|
692
|
+
plain_table_options.encoding_type = encoding_type;
|
|
693
|
+
|
|
694
|
+
options.table_factory.reset(new TestPlainTableFactory(
|
|
695
|
+
&expect_bloom_not_match, plain_table_options,
|
|
696
|
+
0 /* column_family_id */, kDefaultColumnFamilyName));
|
|
697
|
+
} else {
|
|
698
|
+
PlainTableOptions plain_table_options;
|
|
699
|
+
plain_table_options.user_key_len = 16;
|
|
700
|
+
plain_table_options.bloom_bits_per_key = bloom_bits;
|
|
701
|
+
plain_table_options.hash_table_ratio = 0.75;
|
|
702
|
+
plain_table_options.index_sparseness = 16;
|
|
703
|
+
plain_table_options.huge_page_tlb_size = huge_page_tlb_size;
|
|
704
|
+
plain_table_options.encoding_type = encoding_type;
|
|
705
|
+
|
|
706
|
+
options.table_factory.reset(new TestPlainTableFactory(
|
|
707
|
+
&expect_bloom_not_match, plain_table_options,
|
|
708
|
+
0 /* column_family_id */, kDefaultColumnFamilyName));
|
|
709
|
+
}
|
|
710
|
+
DestroyAndReopen(&options);
|
|
711
|
+
|
|
712
|
+
ASSERT_OK(Put("1000000000foo002", "v_2"));
|
|
713
|
+
ASSERT_OK(Put("0000000000000bar", "random"));
|
|
714
|
+
ASSERT_OK(Put("1000000000foo001", "v1"));
|
|
715
|
+
ASSERT_OK(Put("3000000000000bar", "bar_v"));
|
|
716
|
+
ASSERT_OK(Put("1000000000foo003", "v__3"));
|
|
717
|
+
ASSERT_OK(Put("1000000000foo004", "v__4"));
|
|
718
|
+
ASSERT_OK(Put("1000000000foo005", "v__5"));
|
|
719
|
+
ASSERT_OK(Put("1000000000foo007", "v__7"));
|
|
720
|
+
ASSERT_OK(Put("1000000000foo008", "v__8"));
|
|
721
|
+
ASSERT_OK(dbfull()->TEST_FlushMemTable());
|
|
722
|
+
ASSERT_EQ("v1", Get("1000000000foo001"));
|
|
723
|
+
ASSERT_EQ("v__3", Get("1000000000foo003"));
|
|
724
|
+
Iterator* iter = dbfull()->NewIterator(ReadOptions());
|
|
725
|
+
iter->Seek("1000000000foo000");
|
|
726
|
+
ASSERT_TRUE(iter->Valid());
|
|
727
|
+
ASSERT_EQ("1000000000foo001", iter->key().ToString());
|
|
728
|
+
ASSERT_EQ("v1", iter->value().ToString());
|
|
729
|
+
|
|
730
|
+
iter->Next();
|
|
731
|
+
ASSERT_TRUE(iter->Valid());
|
|
732
|
+
ASSERT_EQ("1000000000foo002", iter->key().ToString());
|
|
733
|
+
ASSERT_EQ("v_2", iter->value().ToString());
|
|
734
|
+
|
|
735
|
+
iter->Next();
|
|
736
|
+
ASSERT_TRUE(iter->Valid());
|
|
737
|
+
ASSERT_EQ("1000000000foo003", iter->key().ToString());
|
|
738
|
+
ASSERT_EQ("v__3", iter->value().ToString());
|
|
739
|
+
|
|
740
|
+
iter->Next();
|
|
741
|
+
ASSERT_TRUE(iter->Valid());
|
|
742
|
+
ASSERT_EQ("1000000000foo004", iter->key().ToString());
|
|
743
|
+
ASSERT_EQ("v__4", iter->value().ToString());
|
|
744
|
+
|
|
745
|
+
iter->Seek("3000000000000bar");
|
|
777
746
|
ASSERT_TRUE(iter->Valid());
|
|
778
747
|
ASSERT_EQ("3000000000000bar", iter->key().ToString());
|
|
779
|
-
|
|
748
|
+
ASSERT_EQ("bar_v", iter->value().ToString());
|
|
780
749
|
|
|
781
|
-
|
|
782
|
-
|
|
783
|
-
|
|
784
|
-
|
|
785
|
-
|
|
786
|
-
|
|
787
|
-
|
|
788
|
-
|
|
789
|
-
|
|
790
|
-
|
|
791
|
-
|
|
792
|
-
|
|
793
|
-
|
|
750
|
+
iter->Seek("1000000000foo000");
|
|
751
|
+
ASSERT_TRUE(iter->Valid());
|
|
752
|
+
ASSERT_EQ("1000000000foo001", iter->key().ToString());
|
|
753
|
+
ASSERT_EQ("v1", iter->value().ToString());
|
|
754
|
+
|
|
755
|
+
iter->Seek("1000000000foo005");
|
|
756
|
+
ASSERT_TRUE(iter->Valid());
|
|
757
|
+
ASSERT_EQ("1000000000foo005", iter->key().ToString());
|
|
758
|
+
ASSERT_EQ("v__5", iter->value().ToString());
|
|
759
|
+
|
|
760
|
+
iter->Seek("1000000000foo006");
|
|
761
|
+
ASSERT_TRUE(iter->Valid());
|
|
762
|
+
ASSERT_EQ("1000000000foo007", iter->key().ToString());
|
|
763
|
+
ASSERT_EQ("v__7", iter->value().ToString());
|
|
764
|
+
|
|
765
|
+
iter->Seek("1000000000foo008");
|
|
766
|
+
ASSERT_TRUE(iter->Valid());
|
|
767
|
+
ASSERT_EQ("1000000000foo008", iter->key().ToString());
|
|
768
|
+
ASSERT_EQ("v__8", iter->value().ToString());
|
|
769
|
+
|
|
770
|
+
if (total_order == 0) {
|
|
771
|
+
iter->Seek("1000000000foo009");
|
|
772
|
+
ASSERT_TRUE(iter->Valid());
|
|
773
|
+
ASSERT_EQ("3000000000000bar", iter->key().ToString());
|
|
774
|
+
}
|
|
775
|
+
|
|
776
|
+
// Test Bloom Filter
|
|
777
|
+
if (bloom_bits > 0) {
|
|
778
|
+
if (!total_order) {
|
|
779
|
+
// Neither key nor value should exist.
|
|
780
|
+
expect_bloom_not_match = true;
|
|
781
|
+
iter->Seek("2not000000000bar");
|
|
782
|
+
ASSERT_TRUE(!iter->Valid());
|
|
783
|
+
ASSERT_EQ("NOT_FOUND", Get("2not000000000bar"));
|
|
784
|
+
expect_bloom_not_match = false;
|
|
785
|
+
} else {
|
|
786
|
+
expect_bloom_not_match = true;
|
|
787
|
+
ASSERT_EQ("NOT_FOUND", Get("2not000000000bar"));
|
|
788
|
+
expect_bloom_not_match = false;
|
|
789
|
+
}
|
|
794
790
|
}
|
|
791
|
+
ASSERT_OK(iter->status());
|
|
792
|
+
delete iter;
|
|
795
793
|
}
|
|
796
|
-
ASSERT_OK(iter->status());
|
|
797
|
-
delete iter;
|
|
798
794
|
}
|
|
799
795
|
}
|
|
800
|
-
}
|
|
801
796
|
}
|
|
802
797
|
}
|
|
803
798
|
|
|
@@ -863,7 +858,7 @@ namespace {
|
|
|
863
858
|
std::string MakeLongKey(size_t length, char c) {
|
|
864
859
|
return std::string(length, c);
|
|
865
860
|
}
|
|
866
|
-
} // namespace
|
|
861
|
+
} // anonymous namespace
|
|
867
862
|
|
|
868
863
|
TEST_P(PlainTableDBTest, IteratorLargeKeys) {
|
|
869
864
|
Options options = CurrentOptions();
|
|
@@ -878,15 +873,10 @@ TEST_P(PlainTableDBTest, IteratorLargeKeys) {
|
|
|
878
873
|
options.prefix_extractor.reset();
|
|
879
874
|
DestroyAndReopen(&options);
|
|
880
875
|
|
|
881
|
-
std::string key_list[] = {
|
|
882
|
-
|
|
883
|
-
|
|
884
|
-
|
|
885
|
-
MakeLongKey(60, '3'),
|
|
886
|
-
MakeLongKey(90, '4'),
|
|
887
|
-
MakeLongKey(50, '5'),
|
|
888
|
-
MakeLongKey(26, '6')
|
|
889
|
-
};
|
|
876
|
+
std::string key_list[] = {MakeLongKey(30, '0'), MakeLongKey(16, '1'),
|
|
877
|
+
MakeLongKey(32, '2'), MakeLongKey(60, '3'),
|
|
878
|
+
MakeLongKey(90, '4'), MakeLongKey(50, '5'),
|
|
879
|
+
MakeLongKey(26, '6')};
|
|
890
880
|
|
|
891
881
|
for (size_t i = 0; i < 7; i++) {
|
|
892
882
|
ASSERT_OK(Put(key_list[i], std::to_string(i)));
|
|
@@ -913,7 +903,7 @@ namespace {
|
|
|
913
903
|
std::string MakeLongKeyWithPrefix(size_t length, char c) {
|
|
914
904
|
return "00000000" + std::string(length - 8, c);
|
|
915
905
|
}
|
|
916
|
-
} // namespace
|
|
906
|
+
} // anonymous namespace
|
|
917
907
|
|
|
918
908
|
TEST_P(PlainTableDBTest, IteratorLargeKeysWithPrefix) {
|
|
919
909
|
Options options = CurrentOptions();
|
|
@@ -1275,7 +1265,7 @@ TEST_P(PlainTableDBTest, CompactionTrigger) {
|
|
|
1275
1265
|
Random rnd(301);
|
|
1276
1266
|
|
|
1277
1267
|
for (int num = 0; num < options.level0_file_num_compaction_trigger - 1;
|
|
1278
|
-
|
|
1268
|
+
num++) {
|
|
1279
1269
|
std::vector<std::string> values;
|
|
1280
1270
|
// Write 120KB (10 values, each 12K)
|
|
1281
1271
|
for (int i = 0; i < 10; i++) {
|
|
@@ -1287,7 +1277,7 @@ TEST_P(PlainTableDBTest, CompactionTrigger) {
|
|
|
1287
1277
|
ASSERT_EQ(NumTableFilesAtLevel(0), num + 1);
|
|
1288
1278
|
}
|
|
1289
1279
|
|
|
1290
|
-
//generate one more file in level-0, and should trigger level-0 compaction
|
|
1280
|
+
// generate one more file in level-0, and should trigger level-0 compaction
|
|
1291
1281
|
std::vector<std::string> values;
|
|
1292
1282
|
for (int i = 0; i < 12; i++) {
|
|
1293
1283
|
values.push_back(rnd.RandomString(10000));
|
|
@@ -1315,8 +1305,7 @@ TEST_P(PlainTableDBTest, AdaptiveTable) {
|
|
|
1315
1305
|
options.create_if_missing = false;
|
|
1316
1306
|
std::shared_ptr<TableFactory> block_based_factory(
|
|
1317
1307
|
NewBlockBasedTableFactory());
|
|
1318
|
-
std::shared_ptr<TableFactory> plain_table_factory(
|
|
1319
|
-
NewPlainTableFactory());
|
|
1308
|
+
std::shared_ptr<TableFactory> plain_table_factory(NewPlainTableFactory());
|
|
1320
1309
|
std::shared_ptr<TableFactory> dummy_factory;
|
|
1321
1310
|
options.table_factory.reset(NewAdaptiveTableFactory(
|
|
1322
1311
|
block_based_factory, block_based_factory, plain_table_factory));
|