@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.
Files changed (150) hide show
  1. package/deps/rocksdb/rocksdb/cache/clock_cache.cc +402 -345
  2. package/deps/rocksdb/rocksdb/cache/clock_cache.h +121 -64
  3. package/deps/rocksdb/rocksdb/cache/lru_cache_test.cc +28 -18
  4. package/deps/rocksdb/rocksdb/db/arena_wrapped_db_iter.cc +1 -0
  5. package/deps/rocksdb/rocksdb/db/arena_wrapped_db_iter.h +2 -0
  6. package/deps/rocksdb/rocksdb/db/builder.cc +2 -1
  7. package/deps/rocksdb/rocksdb/db/c.cc +563 -673
  8. package/deps/rocksdb/rocksdb/db/c_test.c +168 -169
  9. package/deps/rocksdb/rocksdb/db/column_family.cc +16 -15
  10. package/deps/rocksdb/rocksdb/db/column_family.h +7 -7
  11. package/deps/rocksdb/rocksdb/db/column_family_test.cc +17 -28
  12. package/deps/rocksdb/rocksdb/db/compact_files_test.cc +4 -9
  13. package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator.cc +8 -3
  14. package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator_test.cc +114 -0
  15. package/deps/rocksdb/rocksdb/db/comparator_db_test.cc +2 -3
  16. package/deps/rocksdb/rocksdb/db/convenience.cc +3 -5
  17. package/deps/rocksdb/rocksdb/db/corruption_test.cc +10 -14
  18. package/deps/rocksdb/rocksdb/db/cuckoo_table_db_test.cc +9 -13
  19. package/deps/rocksdb/rocksdb/db/db_basic_test.cc +2 -2
  20. package/deps/rocksdb/rocksdb/db/db_block_cache_test.cc +2 -2
  21. package/deps/rocksdb/rocksdb/db/db_bloom_filter_test.cc +14 -16
  22. package/deps/rocksdb/rocksdb/db/db_compaction_test.cc +52 -72
  23. package/deps/rocksdb/rocksdb/db/db_dynamic_level_test.cc +2 -2
  24. package/deps/rocksdb/rocksdb/db/db_encryption_test.cc +12 -12
  25. package/deps/rocksdb/rocksdb/db/db_filesnapshot.cc +1 -2
  26. package/deps/rocksdb/rocksdb/db/db_flush_test.cc +3 -3
  27. package/deps/rocksdb/rocksdb/db/db_impl/db_impl.cc +1 -12
  28. package/deps/rocksdb/rocksdb/db/db_impl/db_impl.h +3 -0
  29. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_write.cc +26 -0
  30. package/deps/rocksdb/rocksdb/db/db_info_dumper.cc +1 -0
  31. package/deps/rocksdb/rocksdb/db/db_iter.cc +12 -6
  32. package/deps/rocksdb/rocksdb/db/db_iter.h +1 -0
  33. package/deps/rocksdb/rocksdb/db/db_iter_stress_test.cc +6 -7
  34. package/deps/rocksdb/rocksdb/db/db_iter_test.cc +10 -8
  35. package/deps/rocksdb/rocksdb/db/db_iterator_test.cc +15 -13
  36. package/deps/rocksdb/rocksdb/db/db_log_iter_test.cc +7 -9
  37. package/deps/rocksdb/rocksdb/db/db_logical_block_size_cache_test.cc +4 -4
  38. package/deps/rocksdb/rocksdb/db/db_merge_operand_test.cc +1 -1
  39. package/deps/rocksdb/rocksdb/db/db_merge_operator_test.cc +2 -4
  40. package/deps/rocksdb/rocksdb/db/db_options_test.cc +4 -4
  41. package/deps/rocksdb/rocksdb/db/db_properties_test.cc +7 -4
  42. package/deps/rocksdb/rocksdb/db/db_range_del_test.cc +7 -5
  43. package/deps/rocksdb/rocksdb/db/db_secondary_test.cc +1 -1
  44. package/deps/rocksdb/rocksdb/db/db_statistics_test.cc +8 -6
  45. package/deps/rocksdb/rocksdb/db/db_table_properties_test.cc +18 -23
  46. package/deps/rocksdb/rocksdb/db/db_tailing_iter_test.cc +3 -5
  47. package/deps/rocksdb/rocksdb/db/db_test.cc +10 -5
  48. package/deps/rocksdb/rocksdb/db/db_test2.cc +172 -169
  49. package/deps/rocksdb/rocksdb/db/db_test_util.cc +68 -66
  50. package/deps/rocksdb/rocksdb/db/db_test_util.h +1 -3
  51. package/deps/rocksdb/rocksdb/db/db_universal_compaction_test.cc +31 -39
  52. package/deps/rocksdb/rocksdb/db/db_with_timestamp_basic_test.cc +182 -2
  53. package/deps/rocksdb/rocksdb/db/db_write_test.cc +43 -40
  54. package/deps/rocksdb/rocksdb/db/dbformat.h +15 -0
  55. package/deps/rocksdb/rocksdb/db/dbformat_test.cc +35 -34
  56. package/deps/rocksdb/rocksdb/db/deletefile_test.cc +10 -11
  57. package/deps/rocksdb/rocksdb/db/error_handler.cc +6 -6
  58. package/deps/rocksdb/rocksdb/db/error_handler.h +93 -94
  59. package/deps/rocksdb/rocksdb/db/event_helpers.cc +1 -1
  60. package/deps/rocksdb/rocksdb/db/event_helpers.h +3 -3
  61. package/deps/rocksdb/rocksdb/db/external_sst_file_ingestion_job.cc +16 -17
  62. package/deps/rocksdb/rocksdb/db/external_sst_file_test.cc +2 -2
  63. package/deps/rocksdb/rocksdb/db/fault_injection_test.cc +1 -2
  64. package/deps/rocksdb/rocksdb/db/file_indexer.cc +2 -0
  65. package/deps/rocksdb/rocksdb/db/file_indexer.h +2 -1
  66. package/deps/rocksdb/rocksdb/db/file_indexer_test.cc +4 -2
  67. package/deps/rocksdb/rocksdb/db/filename_test.cc +27 -29
  68. package/deps/rocksdb/rocksdb/db/flush_job.cc +7 -13
  69. package/deps/rocksdb/rocksdb/db/flush_job_test.cc +2 -2
  70. package/deps/rocksdb/rocksdb/db/forward_iterator.cc +15 -21
  71. package/deps/rocksdb/rocksdb/db/forward_iterator.h +7 -6
  72. package/deps/rocksdb/rocksdb/db/forward_iterator_bench.cc +4 -2
  73. package/deps/rocksdb/rocksdb/db/import_column_family_job.cc +2 -2
  74. package/deps/rocksdb/rocksdb/db/internal_stats.cc +59 -14
  75. package/deps/rocksdb/rocksdb/db/internal_stats.h +27 -11
  76. package/deps/rocksdb/rocksdb/db/job_context.h +5 -6
  77. package/deps/rocksdb/rocksdb/db/listener_test.cc +21 -23
  78. package/deps/rocksdb/rocksdb/db/log_reader.cc +7 -11
  79. package/deps/rocksdb/rocksdb/db/log_reader.h +4 -6
  80. package/deps/rocksdb/rocksdb/db/log_test.cc +6 -12
  81. package/deps/rocksdb/rocksdb/db/log_writer.h +1 -1
  82. package/deps/rocksdb/rocksdb/db/logs_with_prep_tracker.h +0 -1
  83. package/deps/rocksdb/rocksdb/db/lookup_key.h +4 -1
  84. package/deps/rocksdb/rocksdb/db/malloc_stats.cc +2 -1
  85. package/deps/rocksdb/rocksdb/db/manual_compaction_test.cc +3 -5
  86. package/deps/rocksdb/rocksdb/db/memtable.cc +34 -22
  87. package/deps/rocksdb/rocksdb/db/memtable.h +4 -6
  88. package/deps/rocksdb/rocksdb/db/memtable_list.cc +7 -0
  89. package/deps/rocksdb/rocksdb/db/memtable_list_test.cc +37 -13
  90. package/deps/rocksdb/rocksdb/db/merge_context.h +1 -0
  91. package/deps/rocksdb/rocksdb/db/merge_helper.cc +128 -14
  92. package/deps/rocksdb/rocksdb/db/merge_helper.h +15 -7
  93. package/deps/rocksdb/rocksdb/db/merge_helper_test.cc +2 -1
  94. package/deps/rocksdb/rocksdb/db/merge_operator.cc +5 -6
  95. package/deps/rocksdb/rocksdb/db/obsolete_files_test.cc +4 -3
  96. package/deps/rocksdb/rocksdb/db/options_file_test.cc +1 -1
  97. package/deps/rocksdb/rocksdb/db/perf_context_test.cc +55 -43
  98. package/deps/rocksdb/rocksdb/db/plain_table_db_test.cc +288 -299
  99. package/deps/rocksdb/rocksdb/db/prefix_test.cc +22 -27
  100. package/deps/rocksdb/rocksdb/db/range_del_aggregator.cc +1 -1
  101. package/deps/rocksdb/rocksdb/db/range_del_aggregator_test.cc +1 -1
  102. package/deps/rocksdb/rocksdb/db/repair.cc +7 -8
  103. package/deps/rocksdb/rocksdb/db/repair_test.cc +3 -4
  104. package/deps/rocksdb/rocksdb/db/snapshot_impl.cc +4 -5
  105. package/deps/rocksdb/rocksdb/db/snapshot_impl.h +10 -4
  106. package/deps/rocksdb/rocksdb/db/table_cache.cc +3 -4
  107. package/deps/rocksdb/rocksdb/db/table_properties_collector.cc +6 -7
  108. package/deps/rocksdb/rocksdb/db/table_properties_collector_test.cc +22 -22
  109. package/deps/rocksdb/rocksdb/db/transaction_log_impl.cc +12 -12
  110. package/deps/rocksdb/rocksdb/db/transaction_log_impl.h +6 -8
  111. package/deps/rocksdb/rocksdb/db/trim_history_scheduler.h +2 -0
  112. package/deps/rocksdb/rocksdb/db/version_builder_test.cc +3 -3
  113. package/deps/rocksdb/rocksdb/db/version_edit.cc +2 -5
  114. package/deps/rocksdb/rocksdb/db/version_edit.h +8 -12
  115. package/deps/rocksdb/rocksdb/db/version_set.cc +74 -102
  116. package/deps/rocksdb/rocksdb/db/version_set.h +8 -10
  117. package/deps/rocksdb/rocksdb/db/version_set_sync_and_async.h +0 -5
  118. package/deps/rocksdb/rocksdb/db/version_set_test.cc +47 -45
  119. package/deps/rocksdb/rocksdb/db/wal_manager.cc +6 -5
  120. package/deps/rocksdb/rocksdb/db/wal_manager.h +2 -2
  121. package/deps/rocksdb/rocksdb/db/wal_manager_test.cc +4 -3
  122. package/deps/rocksdb/rocksdb/db/wide/db_wide_basic_test.cc +144 -61
  123. package/deps/rocksdb/rocksdb/db/write_batch.cc +41 -24
  124. package/deps/rocksdb/rocksdb/db/write_batch_internal.h +2 -7
  125. package/deps/rocksdb/rocksdb/db/write_batch_test.cc +105 -104
  126. package/deps/rocksdb/rocksdb/db/write_callback_test.cc +5 -4
  127. package/deps/rocksdb/rocksdb/db/write_controller.h +1 -0
  128. package/deps/rocksdb/rocksdb/db/write_controller_test.cc +1 -1
  129. package/deps/rocksdb/rocksdb/db/write_thread.cc +8 -6
  130. package/deps/rocksdb/rocksdb/env/io_posix.h +6 -0
  131. package/deps/rocksdb/rocksdb/file/file_prefetch_buffer.cc +134 -65
  132. package/deps/rocksdb/rocksdb/file/file_prefetch_buffer.h +29 -0
  133. package/deps/rocksdb/rocksdb/include/rocksdb/compaction_filter.h +1 -0
  134. package/deps/rocksdb/rocksdb/include/rocksdb/db.h +1 -4
  135. package/deps/rocksdb/rocksdb/include/rocksdb/merge_operator.h +1 -0
  136. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/stackable_db.h +4 -0
  137. package/deps/rocksdb/rocksdb/include/rocksdb/write_batch.h +14 -4
  138. package/deps/rocksdb/rocksdb/table/get_context.cc +52 -7
  139. package/deps/rocksdb/rocksdb/table/get_context.h +1 -2
  140. package/deps/rocksdb/rocksdb/tools/db_bench_tool.cc +13 -0
  141. package/deps/rocksdb/rocksdb/util/crc32c_arm64.cc +36 -4
  142. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_test.cc +6 -6
  143. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_test.h +23 -28
  144. package/deps/rocksdb/rocksdb/utilities/transactions/write_committed_transaction_ts_test.cc +11 -1
  145. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_transaction_test.cc +19 -17
  146. package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_internal.cc +10 -7
  147. package/index.js +7 -7
  148. package/package.json +1 -1
  149. package/prebuilds/darwin-arm64/node.napi.node +0 -0
  150. 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
- for (int bloom = -1; bloom <= 117; bloom += 117) {
452
- const int bloom_bits = std::max(bloom, 0);
453
- const bool full_scan_mode = bloom < 0;
454
- for (int total_order = 0; total_order <= 1; total_order++) {
455
- for (int store_index_in_file = 0; store_index_in_file <= 1;
456
- ++store_index_in_file) {
457
- Options options = CurrentOptions();
458
- options.create_if_missing = true;
459
- // Set only one bucket to force bucket conflict.
460
- // Test index interval for the same prefix to be 1, 2 and 4
461
- if (total_order) {
462
- options.prefix_extractor.reset();
463
-
464
- PlainTableOptions plain_table_options;
465
- plain_table_options.user_key_len = 0;
466
- plain_table_options.bloom_bits_per_key = bloom_bits;
467
- plain_table_options.hash_table_ratio = 0;
468
- plain_table_options.index_sparseness = 2;
469
- plain_table_options.huge_page_tlb_size = huge_page_tlb_size;
470
- plain_table_options.encoding_type = encoding_type;
471
- plain_table_options.full_scan_mode = full_scan_mode;
472
- plain_table_options.store_index_in_file = store_index_in_file;
473
-
474
- options.table_factory.reset(
475
- NewPlainTableFactory(plain_table_options));
476
- } else {
477
- PlainTableOptions plain_table_options;
478
- plain_table_options.user_key_len = 0;
479
- plain_table_options.bloom_bits_per_key = bloom_bits;
480
- plain_table_options.hash_table_ratio = 0.75;
481
- plain_table_options.index_sparseness = 16;
482
- plain_table_options.huge_page_tlb_size = huge_page_tlb_size;
483
- plain_table_options.encoding_type = encoding_type;
484
- plain_table_options.full_scan_mode = full_scan_mode;
485
- plain_table_options.store_index_in_file = store_index_in_file;
486
-
487
- options.table_factory.reset(
488
- NewPlainTableFactory(plain_table_options));
489
- }
490
- DestroyAndReopen(&options);
491
- uint64_t int_num;
492
- ASSERT_TRUE(dbfull()->GetIntProperty(
493
- "rocksdb.estimate-table-readers-mem", &int_num));
494
- ASSERT_EQ(int_num, 0U);
495
-
496
- ASSERT_OK(Put("1000000000000foo", "v1"));
497
- ASSERT_OK(Put("0000000000000bar", "v2"));
498
- ASSERT_OK(Put("1000000000000foo", "v3"));
499
- ASSERT_OK(dbfull()->TEST_FlushMemTable());
500
-
501
- ASSERT_TRUE(dbfull()->GetIntProperty(
502
- "rocksdb.estimate-table-readers-mem", &int_num));
503
- ASSERT_GT(int_num, 0U);
504
-
505
- TablePropertiesCollection ptc;
506
- ASSERT_OK(
507
- reinterpret_cast<DB*>(dbfull())->GetPropertiesOfAllTables(&ptc));
508
- ASSERT_EQ(1U, ptc.size());
509
- auto row = ptc.begin();
510
- auto tp = row->second;
511
-
512
- if (full_scan_mode) {
513
- // Does not support Get/Seek
514
- std::unique_ptr<Iterator> iter(dbfull()->NewIterator(ReadOptions()));
515
- iter->SeekToFirst();
516
- ASSERT_TRUE(iter->Valid());
517
- ASSERT_EQ("0000000000000bar", iter->key().ToString());
518
- ASSERT_EQ("v2", iter->value().ToString());
519
- iter->Next();
520
- ASSERT_TRUE(iter->Valid());
521
- ASSERT_EQ("1000000000000foo", iter->key().ToString());
522
- ASSERT_EQ("v3", iter->value().ToString());
523
- iter->Next();
524
- ASSERT_TRUE(!iter->Valid());
525
- ASSERT_TRUE(iter->status().ok());
526
- } else {
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
- ASSERT_EQ("0", (tp->user_collected_properties)
535
- .at("plain_table_hash_table_size"));
536
- ASSERT_EQ("0", (tp->user_collected_properties)
537
- .at("plain_table_sub_index_size"));
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
- for (int bloom_bits = 0; bloom_bits <= 117; bloom_bits += 117) {
554
- for (int total_order = 0; total_order <= 1; total_order++) {
555
- for (int store_index_in_file = 0; store_index_in_file <= 1;
556
- ++store_index_in_file) {
557
- if (encoding_type == kPrefix && total_order) {
558
- continue;
559
- }
560
- if (!bloom_bits && store_index_in_file) {
561
- continue;
562
- }
563
- if (total_order && store_index_in_file) {
564
- continue;
565
- }
566
- bool expect_bloom_not_match = false;
567
- Options options = CurrentOptions();
568
- options.create_if_missing = true;
569
- // Set only one bucket to force bucket conflict.
570
- // Test index interval for the same prefix to be 1, 2 and 4
571
- PlainTableOptions plain_table_options;
572
- if (total_order) {
573
- options.prefix_extractor = nullptr;
574
- plain_table_options.hash_table_ratio = 0;
575
- plain_table_options.index_sparseness = 2;
576
- } else {
577
- plain_table_options.hash_table_ratio = 0.75;
578
- plain_table_options.index_sparseness = 16;
579
- }
580
- plain_table_options.user_key_len = kPlainTableVariableLength;
581
- plain_table_options.bloom_bits_per_key = bloom_bits;
582
- plain_table_options.huge_page_tlb_size = huge_page_tlb_size;
583
- plain_table_options.encoding_type = encoding_type;
584
- plain_table_options.store_index_in_file = store_index_in_file;
585
- options.table_factory.reset(new TestPlainTableFactory(
586
- &expect_bloom_not_match, plain_table_options,
587
- 0 /* column_family_id */, kDefaultColumnFamilyName));
588
-
589
- DestroyAndReopen(&options);
590
- ASSERT_OK(Put("0000000000000bar", "b"));
591
- ASSERT_OK(Put("1000000000000foo", "v1"));
592
- ASSERT_OK(dbfull()->TEST_FlushMemTable());
593
-
594
- ASSERT_OK(Put("1000000000000foo", "v2"));
595
- ASSERT_OK(dbfull()->TEST_FlushMemTable());
596
- ASSERT_EQ("v2", Get("1000000000000foo"));
597
-
598
- ASSERT_OK(Put("0000000000000eee", "v3"));
599
- ASSERT_OK(dbfull()->TEST_FlushMemTable());
600
- ASSERT_EQ("v3", Get("0000000000000eee"));
601
-
602
- ASSERT_OK(Delete("0000000000000bar"));
603
- ASSERT_OK(dbfull()->TEST_FlushMemTable());
604
- ASSERT_EQ("NOT_FOUND", Get("0000000000000bar"));
605
-
606
- ASSERT_OK(Put("0000000000000eee", "v5"));
607
- ASSERT_OK(Put("9000000000000eee", "v5"));
608
- ASSERT_OK(dbfull()->TEST_FlushMemTable());
609
- ASSERT_EQ("v5", Get("0000000000000eee"));
610
-
611
- // Test Bloom Filter
612
- if (bloom_bits > 0) {
613
- // Neither key nor value should exist.
614
- expect_bloom_not_match = true;
615
- ASSERT_EQ("NOT_FOUND", Get("5_not00000000bar"));
616
- // Key doesn't exist any more but prefix exists.
617
- if (total_order) {
618
- ASSERT_EQ("NOT_FOUND", Get("1000000000000not"));
619
- ASSERT_EQ("NOT_FOUND", Get("0000000000000not"));
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
- for (int bloom_bits = 0; bloom_bits <= 117; bloom_bits += 117) {
679
- for (int total_order = 0; total_order <= 1; total_order++) {
680
- if (encoding_type == kPrefix && total_order == 1) {
681
- continue;
682
- }
683
- bool expect_bloom_not_match = false;
684
- Options options = CurrentOptions();
685
- options.create_if_missing = true;
686
- // Set only one bucket to force bucket conflict.
687
- // Test index interval for the same prefix to be 1, 2 and 4
688
- if (total_order) {
689
- options.prefix_extractor = nullptr;
690
-
691
- PlainTableOptions plain_table_options;
692
- plain_table_options.user_key_len = 16;
693
- plain_table_options.bloom_bits_per_key = bloom_bits;
694
- plain_table_options.hash_table_ratio = 0;
695
- plain_table_options.index_sparseness = 2;
696
- plain_table_options.huge_page_tlb_size = huge_page_tlb_size;
697
- plain_table_options.encoding_type = encoding_type;
698
-
699
- options.table_factory.reset(new TestPlainTableFactory(
700
- &expect_bloom_not_match, plain_table_options,
701
- 0 /* column_family_id */, kDefaultColumnFamilyName));
702
- } else {
703
- PlainTableOptions plain_table_options;
704
- plain_table_options.user_key_len = 16;
705
- plain_table_options.bloom_bits_per_key = bloom_bits;
706
- plain_table_options.hash_table_ratio = 0.75;
707
- plain_table_options.index_sparseness = 16;
708
- plain_table_options.huge_page_tlb_size = huge_page_tlb_size;
709
- plain_table_options.encoding_type = encoding_type;
710
-
711
- options.table_factory.reset(new TestPlainTableFactory(
712
- &expect_bloom_not_match, plain_table_options,
713
- 0 /* column_family_id */, kDefaultColumnFamilyName));
714
- }
715
- DestroyAndReopen(&options);
716
-
717
- ASSERT_OK(Put("1000000000foo002", "v_2"));
718
- ASSERT_OK(Put("0000000000000bar", "random"));
719
- ASSERT_OK(Put("1000000000foo001", "v1"));
720
- ASSERT_OK(Put("3000000000000bar", "bar_v"));
721
- ASSERT_OK(Put("1000000000foo003", "v__3"));
722
- ASSERT_OK(Put("1000000000foo004", "v__4"));
723
- ASSERT_OK(Put("1000000000foo005", "v__5"));
724
- ASSERT_OK(Put("1000000000foo007", "v__7"));
725
- ASSERT_OK(Put("1000000000foo008", "v__8"));
726
- ASSERT_OK(dbfull()->TEST_FlushMemTable());
727
- ASSERT_EQ("v1", Get("1000000000foo001"));
728
- ASSERT_EQ("v__3", Get("1000000000foo003"));
729
- Iterator* iter = dbfull()->NewIterator(ReadOptions());
730
- iter->Seek("1000000000foo000");
731
- ASSERT_TRUE(iter->Valid());
732
- ASSERT_EQ("1000000000foo001", iter->key().ToString());
733
- ASSERT_EQ("v1", iter->value().ToString());
734
-
735
- iter->Next();
736
- ASSERT_TRUE(iter->Valid());
737
- ASSERT_EQ("1000000000foo002", iter->key().ToString());
738
- ASSERT_EQ("v_2", iter->value().ToString());
739
-
740
- iter->Next();
741
- ASSERT_TRUE(iter->Valid());
742
- ASSERT_EQ("1000000000foo003", iter->key().ToString());
743
- ASSERT_EQ("v__3", iter->value().ToString());
744
-
745
- iter->Next();
746
- ASSERT_TRUE(iter->Valid());
747
- ASSERT_EQ("1000000000foo004", iter->key().ToString());
748
- ASSERT_EQ("v__4", iter->value().ToString());
749
-
750
- iter->Seek("3000000000000bar");
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
- // Test Bloom Filter
782
- if (bloom_bits > 0) {
783
- if (!total_order) {
784
- // Neither key nor value should exist.
785
- expect_bloom_not_match = true;
786
- iter->Seek("2not000000000bar");
787
- ASSERT_TRUE(!iter->Valid());
788
- ASSERT_EQ("NOT_FOUND", Get("2not000000000bar"));
789
- expect_bloom_not_match = false;
790
- } else {
791
- expect_bloom_not_match = true;
792
- ASSERT_EQ("NOT_FOUND", Get("2not000000000bar"));
793
- expect_bloom_not_match = false;
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
- MakeLongKey(30, '0'),
883
- MakeLongKey(16, '1'),
884
- MakeLongKey(32, '2'),
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
- num++) {
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));