@nxtedition/rocksdb 7.1.3 → 7.1.6

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 (185) hide show
  1. package/binding.cc +32 -14
  2. package/deps/rocksdb/iostats.patch +19 -0
  3. package/deps/rocksdb/rocksdb/CMakeLists.txt +15 -1
  4. package/deps/rocksdb/rocksdb/cache/cache.cc +4 -0
  5. package/deps/rocksdb/rocksdb/cache/cache_bench_tool.cc +6 -8
  6. package/deps/rocksdb/rocksdb/cache/cache_key.cc +184 -164
  7. package/deps/rocksdb/rocksdb/cache/cache_key.h +38 -29
  8. package/deps/rocksdb/rocksdb/cache/cache_reservation_manager_test.cc +4 -4
  9. package/deps/rocksdb/rocksdb/cache/cache_test.cc +93 -58
  10. package/deps/rocksdb/rocksdb/cache/clock_cache.cc +92 -42
  11. package/deps/rocksdb/rocksdb/cache/clock_cache.h +57 -32
  12. package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache.cc +114 -37
  13. package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache.h +34 -2
  14. package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache_test.cc +187 -38
  15. package/deps/rocksdb/rocksdb/cache/fast_lru_cache.cc +3 -1
  16. package/deps/rocksdb/rocksdb/cache/lru_cache.cc +88 -19
  17. package/deps/rocksdb/rocksdb/cache/lru_cache.h +48 -8
  18. package/deps/rocksdb/rocksdb/cache/lru_cache_test.cc +481 -224
  19. package/deps/rocksdb/rocksdb/crash_test.mk +15 -1
  20. package/deps/rocksdb/rocksdb/db/arena_wrapped_db_iter.cc +2 -2
  21. package/deps/rocksdb/rocksdb/db/blob/blob_file_builder.cc +3 -7
  22. package/deps/rocksdb/rocksdb/db/blob/blob_index.h +1 -1
  23. package/deps/rocksdb/rocksdb/db/blob/blob_log_format.cc +3 -5
  24. package/deps/rocksdb/rocksdb/db/blob/blob_log_writer.cc +25 -19
  25. package/deps/rocksdb/rocksdb/db/blob/blob_source.cc +4 -5
  26. package/deps/rocksdb/rocksdb/db/blob/blob_source.h +2 -3
  27. package/deps/rocksdb/rocksdb/db/blob/blob_source_test.cc +12 -4
  28. package/deps/rocksdb/rocksdb/db/blob/db_blob_basic_test.cc +149 -0
  29. package/deps/rocksdb/rocksdb/db/blob/db_blob_compaction_test.cc +105 -0
  30. package/deps/rocksdb/rocksdb/db/column_family.cc +2 -15
  31. package/deps/rocksdb/rocksdb/db/column_family_test.cc +17 -4
  32. package/deps/rocksdb/rocksdb/db/compact_files_test.cc +8 -8
  33. package/deps/rocksdb/rocksdb/db/compaction/compaction.cc +0 -7
  34. package/deps/rocksdb/rocksdb/db/compaction/compaction.h +5 -0
  35. package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator.cc +56 -53
  36. package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator.h +33 -11
  37. package/deps/rocksdb/rocksdb/db/compaction/compaction_job.cc +45 -11
  38. package/deps/rocksdb/rocksdb/db/compaction/compaction_job_test.cc +1 -2
  39. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_test.cc +143 -2
  40. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_universal.cc +43 -18
  41. package/deps/rocksdb/rocksdb/db/compaction/tiered_compaction_test.cc +48 -65
  42. package/deps/rocksdb/rocksdb/db/corruption_test.cc +1 -0
  43. package/deps/rocksdb/rocksdb/db/db_basic_test.cc +73 -4
  44. package/deps/rocksdb/rocksdb/db/db_block_cache_test.cc +239 -190
  45. package/deps/rocksdb/rocksdb/db/db_compaction_test.cc +71 -2
  46. package/deps/rocksdb/rocksdb/db/db_impl/db_impl.cc +144 -33
  47. package/deps/rocksdb/rocksdb/db/db_impl/db_impl.h +18 -35
  48. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_compaction_flush.cc +11 -5
  49. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_experimental.cc +7 -7
  50. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_open.cc +15 -8
  51. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_readonly.cc +2 -1
  52. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_secondary.cc +3 -1
  53. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_write.cc +11 -0
  54. package/deps/rocksdb/rocksdb/db/db_iter.cc +69 -11
  55. package/deps/rocksdb/rocksdb/db/db_iter.h +16 -0
  56. package/deps/rocksdb/rocksdb/db/db_kv_checksum_test.cc +239 -23
  57. package/deps/rocksdb/rocksdb/db/db_memtable_test.cc +2 -1
  58. package/deps/rocksdb/rocksdb/db/db_merge_operand_test.cc +42 -0
  59. package/deps/rocksdb/rocksdb/db/db_test.cc +61 -28
  60. package/deps/rocksdb/rocksdb/db/db_test2.cc +24 -9
  61. package/deps/rocksdb/rocksdb/db/db_wal_test.cc +17 -0
  62. package/deps/rocksdb/rocksdb/db/db_with_timestamp_compaction_test.cc +61 -0
  63. package/deps/rocksdb/rocksdb/db/db_write_test.cc +130 -0
  64. package/deps/rocksdb/rocksdb/db/event_helpers.cc +2 -1
  65. package/deps/rocksdb/rocksdb/db/experimental.cc +7 -8
  66. package/deps/rocksdb/rocksdb/db/external_sst_file_ingestion_job.cc +1 -2
  67. package/deps/rocksdb/rocksdb/db/flush_job.cc +11 -7
  68. package/deps/rocksdb/rocksdb/db/flush_job_test.cc +7 -1
  69. package/deps/rocksdb/rocksdb/db/forward_iterator.cc +4 -2
  70. package/deps/rocksdb/rocksdb/db/import_column_family_job.cc +7 -1
  71. package/deps/rocksdb/rocksdb/db/import_column_family_job.h +6 -0
  72. package/deps/rocksdb/rocksdb/db/import_column_family_test.cc +6 -0
  73. package/deps/rocksdb/rocksdb/db/kv_checksum.h +8 -4
  74. package/deps/rocksdb/rocksdb/db/log_reader.cc +48 -11
  75. package/deps/rocksdb/rocksdb/db/log_reader.h +8 -2
  76. package/deps/rocksdb/rocksdb/db/log_test.cc +10 -1
  77. package/deps/rocksdb/rocksdb/db/log_writer.cc +7 -1
  78. package/deps/rocksdb/rocksdb/db/manual_compaction_test.cc +4 -4
  79. package/deps/rocksdb/rocksdb/db/memtable.cc +222 -47
  80. package/deps/rocksdb/rocksdb/db/memtable.h +70 -14
  81. package/deps/rocksdb/rocksdb/db/memtable_list.cc +14 -8
  82. package/deps/rocksdb/rocksdb/db/memtable_list_test.cc +30 -10
  83. package/deps/rocksdb/rocksdb/db/perf_context_test.cc +5 -5
  84. package/deps/rocksdb/rocksdb/db/pinned_iterators_manager.h +5 -0
  85. package/deps/rocksdb/rocksdb/db/repair.cc +2 -3
  86. package/deps/rocksdb/rocksdb/db/seqno_time_test.cc +3 -7
  87. package/deps/rocksdb/rocksdb/db/table_cache.cc +72 -0
  88. package/deps/rocksdb/rocksdb/db/table_cache.h +19 -1
  89. package/deps/rocksdb/rocksdb/db/table_cache_sync_and_async.h +10 -15
  90. package/deps/rocksdb/rocksdb/db/table_properties_collector_test.cc +2 -2
  91. package/deps/rocksdb/rocksdb/db/version_builder_test.cc +35 -64
  92. package/deps/rocksdb/rocksdb/db/version_edit.cc +3 -32
  93. package/deps/rocksdb/rocksdb/db/version_edit.h +2 -12
  94. package/deps/rocksdb/rocksdb/db/version_edit_test.cc +10 -23
  95. package/deps/rocksdb/rocksdb/db/version_set.cc +71 -28
  96. package/deps/rocksdb/rocksdb/db/version_set.h +3 -3
  97. package/deps/rocksdb/rocksdb/db/version_set_sync_and_async.h +7 -7
  98. package/deps/rocksdb/rocksdb/db/version_set_test.cc +17 -15
  99. package/deps/rocksdb/rocksdb/db/wal_manager.cc +0 -4
  100. package/deps/rocksdb/rocksdb/db/wal_manager_test.cc +2 -1
  101. package/deps/rocksdb/rocksdb/db/wide/db_wide_basic_test.cc +137 -42
  102. package/deps/rocksdb/rocksdb/db/wide/wide_column_serialization.cc +21 -0
  103. package/deps/rocksdb/rocksdb/db/wide/wide_column_serialization.h +1 -0
  104. package/deps/rocksdb/rocksdb/db/write_batch_test.cc +2 -1
  105. package/deps/rocksdb/rocksdb/db/write_callback_test.cc +4 -4
  106. package/deps/rocksdb/rocksdb/db/write_thread.cc +51 -46
  107. package/deps/rocksdb/rocksdb/db/write_thread.h +0 -4
  108. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_common.h +5 -0
  109. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_gflags.cc +12 -0
  110. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.cc +8 -0
  111. package/deps/rocksdb/rocksdb/env/env_posix.cc +1 -1
  112. package/deps/rocksdb/rocksdb/env/env_test.cc +38 -8
  113. package/deps/rocksdb/rocksdb/env/file_system.cc +20 -0
  114. package/deps/rocksdb/rocksdb/env/fs_posix.cc +2 -46
  115. package/deps/rocksdb/rocksdb/env/io_posix.cc +1 -0
  116. package/deps/rocksdb/rocksdb/file/writable_file_writer.cc +110 -5
  117. package/deps/rocksdb/rocksdb/file/writable_file_writer.h +7 -0
  118. package/deps/rocksdb/rocksdb/include/rocksdb/advanced_options.h +29 -1
  119. package/deps/rocksdb/rocksdb/include/rocksdb/cache.h +31 -6
  120. package/deps/rocksdb/rocksdb/include/rocksdb/db.h +4 -0
  121. package/deps/rocksdb/rocksdb/include/rocksdb/file_system.h +1 -1
  122. package/deps/rocksdb/rocksdb/include/rocksdb/iostats_context.h +7 -0
  123. package/deps/rocksdb/rocksdb/include/rocksdb/options.h +10 -3
  124. package/deps/rocksdb/rocksdb/include/rocksdb/slice.h +3 -1
  125. package/deps/rocksdb/rocksdb/include/rocksdb/status.h +1 -1
  126. package/deps/rocksdb/rocksdb/include/rocksdb/wide_columns.h +2 -0
  127. package/deps/rocksdb/rocksdb/logging/auto_roll_logger.cc +12 -0
  128. package/deps/rocksdb/rocksdb/logging/auto_roll_logger_test.cc +9 -13
  129. package/deps/rocksdb/rocksdb/logging/env_logger.h +39 -13
  130. package/deps/rocksdb/rocksdb/memory/memory_allocator_test.cc +1 -1
  131. package/deps/rocksdb/rocksdb/memtable/inlineskiplist.h +1 -1
  132. package/deps/rocksdb/rocksdb/memtable/write_buffer_manager_test.cc +1 -1
  133. package/deps/rocksdb/rocksdb/microbench/db_basic_bench.cc +6 -0
  134. package/deps/rocksdb/rocksdb/monitoring/iostats_context_imp.h +4 -1
  135. package/deps/rocksdb/rocksdb/options/cf_options.cc +10 -3
  136. package/deps/rocksdb/rocksdb/options/cf_options.h +10 -5
  137. package/deps/rocksdb/rocksdb/options/options_helper.cc +4 -1
  138. package/deps/rocksdb/rocksdb/options/options_settable_test.cc +3 -1
  139. package/deps/rocksdb/rocksdb/options/options_test.cc +4 -2
  140. package/deps/rocksdb/rocksdb/port/util_logger.h +1 -3
  141. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_builder.cc +2 -6
  142. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_factory.cc +1 -0
  143. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.cc +52 -12
  144. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.h +5 -7
  145. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_sync_and_async.h +9 -1
  146. package/deps/rocksdb/rocksdb/table/block_based/block_like_traits.h +28 -10
  147. package/deps/rocksdb/rocksdb/table/block_based/data_block_hash_index_test.cc +1 -1
  148. package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block.cc +5 -2
  149. package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block.h +1 -0
  150. package/deps/rocksdb/rocksdb/table/get_context.cc +16 -6
  151. package/deps/rocksdb/rocksdb/table/table_reader.h +9 -0
  152. package/deps/rocksdb/rocksdb/table/table_test.cc +2 -1
  153. package/deps/rocksdb/rocksdb/table/unique_id.cc +22 -24
  154. package/deps/rocksdb/rocksdb/table/unique_id_impl.h +2 -1
  155. package/deps/rocksdb/rocksdb/tools/block_cache_analyzer/block_cache_trace_analyzer_plot.py +7 -0
  156. package/deps/rocksdb/rocksdb/tools/db_bench_tool.cc +41 -4
  157. package/deps/rocksdb/rocksdb/tools/db_sanity_test.cc +5 -2
  158. package/deps/rocksdb/rocksdb/tools/ldb_cmd.cc +7 -8
  159. package/deps/rocksdb/rocksdb/tools/ldb_cmd_test.cc +6 -6
  160. package/deps/rocksdb/rocksdb/tools/reduce_levels_test.cc +1 -1
  161. package/deps/rocksdb/rocksdb/util/async_file_reader.cc +2 -1
  162. package/deps/rocksdb/rocksdb/util/async_file_reader.h +3 -3
  163. package/deps/rocksdb/rocksdb/util/coro_utils.h +2 -1
  164. package/deps/rocksdb/rocksdb/util/file_reader_writer_test.cc +2 -0
  165. package/deps/rocksdb/rocksdb/util/hash_test.cc +67 -0
  166. package/deps/rocksdb/rocksdb/util/math.h +41 -0
  167. package/deps/rocksdb/rocksdb/util/math128.h +6 -0
  168. package/deps/rocksdb/rocksdb/util/single_thread_executor.h +2 -1
  169. package/deps/rocksdb/rocksdb/util/stderr_logger.h +13 -0
  170. package/deps/rocksdb/rocksdb/utilities/backup/backup_engine_test.cc +55 -46
  171. package/deps/rocksdb/rocksdb/utilities/cache_dump_load_impl.cc +3 -6
  172. package/deps/rocksdb/rocksdb/utilities/cassandra/cassandra_functional_test.cc +2 -1
  173. package/deps/rocksdb/rocksdb/utilities/counted_fs.cc +10 -0
  174. package/deps/rocksdb/rocksdb/utilities/transactions/lock/point/point_lock_manager_test.h +5 -0
  175. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_lock_manager.h +6 -0
  176. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_locking_test.cc +2 -2
  177. package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction_test.cc +2 -2
  178. package/deps/rocksdb/rocksdb/utilities/ttl/ttl_test.cc +2 -2
  179. package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_test.cc +2 -2
  180. package/index.js +17 -8
  181. package/package.json +1 -1
  182. package/prebuilds/darwin-arm64/node.napi.node +0 -0
  183. package/prebuilds/darwin-x64/node.napi.node +0 -0
  184. package/prebuilds/linux-x64/node.napi.node +0 -0
  185. package/deps/rocksdb/rocksdb/logging/posix_logger.h +0 -179
@@ -117,7 +117,8 @@ void DumpWalFile(Options options, std::string wal_file, bool print_header,
117
117
  LDBCommandExecuteResult* exec_state);
118
118
 
119
119
  void DumpSstFile(Options options, std::string filename, bool output_hex,
120
- bool show_properties, bool decode_blob_index);
120
+ bool show_properties, bool decode_blob_index,
121
+ std::string from_key = "", std::string to_key = "");
121
122
 
122
123
  void DumpBlobFile(const std::string& filename, bool is_key_hex,
123
124
  bool is_value_hex, bool dump_uncompressed_blobs);
@@ -2045,7 +2046,7 @@ void DBDumperCommand::DoCommand() {
2045
2046
  break;
2046
2047
  case kTableFile:
2047
2048
  DumpSstFile(options_, path_, is_key_hex_, /* show_properties */ true,
2048
- decode_blob_index_);
2049
+ decode_blob_index_, from_, to_);
2049
2050
  break;
2050
2051
  case kDescriptorFile:
2051
2052
  DumpManifestFile(options_, path_, /* verbose_ */ false, is_key_hex_,
@@ -3602,9 +3603,8 @@ void RestoreCommand::DoCommand() {
3602
3603
  namespace {
3603
3604
 
3604
3605
  void DumpSstFile(Options options, std::string filename, bool output_hex,
3605
- bool show_properties, bool decode_blob_index) {
3606
- std::string from_key;
3607
- std::string to_key;
3606
+ bool show_properties, bool decode_blob_index,
3607
+ std::string from_key, std::string to_key) {
3608
3608
  if (filename.length() <= 4 ||
3609
3609
  filename.rfind(".sst") != filename.length() - 4) {
3610
3610
  std::cout << "Invalid sst file name." << std::endl;
@@ -3616,9 +3616,8 @@ void DumpSstFile(Options options, std::string filename, bool output_hex,
3616
3616
  2 * 1024 * 1024 /* readahead_size */,
3617
3617
  /* verify_checksum */ false, output_hex, decode_blob_index);
3618
3618
  Status st = dumper.ReadSequential(true, std::numeric_limits<uint64_t>::max(),
3619
- false, // has_from
3620
- from_key, false, // has_to
3621
- to_key);
3619
+ !from_key.empty(), from_key,
3620
+ !to_key.empty(), to_key);
3622
3621
  if (!st.ok()) {
3623
3622
  std::cerr << "Error in reading SST file " << filename << st.ToString()
3624
3623
  << std::endl;
@@ -889,7 +889,7 @@ TEST_F(LdbCmdTest, LoadCFOptionsAndOverride) {
889
889
 
890
890
  DB* db = nullptr;
891
891
  std::string dbname = test::PerThreadDBPath(env.get(), "ldb_cmd_test");
892
- DestroyDB(dbname, opts);
892
+ ASSERT_OK(DestroyDB(dbname, opts));
893
893
  ASSERT_OK(DB::Open(opts, dbname, &db));
894
894
 
895
895
  ColumnFamilyHandle* cf_handle;
@@ -932,7 +932,7 @@ TEST_F(LdbCmdTest, UnsafeRemoveSstFile) {
932
932
 
933
933
  DB* db = nullptr;
934
934
  std::string dbname = test::PerThreadDBPath(Env::Default(), "ldb_cmd_test");
935
- DestroyDB(dbname, opts);
935
+ ASSERT_OK(DestroyDB(dbname, opts));
936
936
  ASSERT_OK(DB::Open(opts, dbname, &db));
937
937
 
938
938
  // Create three SST files
@@ -1041,7 +1041,7 @@ TEST_F(LdbCmdTest, FileTemperatureUpdateManifest) {
1041
1041
 
1042
1042
  DB* db = nullptr;
1043
1043
  std::string dbname = test::PerThreadDBPath(env.get(), "ldb_cmd_test");
1044
- DestroyDB(dbname, opts);
1044
+ ASSERT_OK(DestroyDB(dbname, opts));
1045
1045
  ASSERT_OK(DB::Open(opts, dbname, &db));
1046
1046
 
1047
1047
  std::array<Temperature, 5> kTestTemps = {
@@ -1123,8 +1123,8 @@ TEST_F(LdbCmdTest, RenameDbAndLoadOptions) {
1123
1123
 
1124
1124
  std::string old_dbname = test::PerThreadDBPath(env, "ldb_cmd_test");
1125
1125
  std::string new_dbname = old_dbname + "_2";
1126
- DestroyDB(old_dbname, opts);
1127
- DestroyDB(new_dbname, opts);
1126
+ ASSERT_OK(DestroyDB(old_dbname, opts));
1127
+ ASSERT_OK(DestroyDB(new_dbname, opts));
1128
1128
 
1129
1129
  char old_arg[1024];
1130
1130
  snprintf(old_arg, sizeof(old_arg), "--db=%s", old_dbname.c_str());
@@ -1168,7 +1168,7 @@ TEST_F(LdbCmdTest, RenameDbAndLoadOptions) {
1168
1168
  0, LDBCommandRunner::RunCommand(5, argv4, opts, LDBOptions(), nullptr));
1169
1169
  ASSERT_EQ(
1170
1170
  0, LDBCommandRunner::RunCommand(5, argv5, opts, LDBOptions(), nullptr));
1171
- DestroyDB(new_dbname, opts);
1171
+ ASSERT_OK(DestroyDB(new_dbname, opts));
1172
1172
  }
1173
1173
 
1174
1174
  } // namespace ROCKSDB_NAMESPACE
@@ -22,7 +22,7 @@ class ReduceLevelTest : public testing::Test {
22
22
  public:
23
23
  ReduceLevelTest() {
24
24
  dbname_ = test::PerThreadDBPath("db_reduce_levels_test");
25
- DestroyDB(dbname_, Options());
25
+ EXPECT_OK(DestroyDB(dbname_, Options()));
26
26
  db_ = nullptr;
27
27
  }
28
28
 
@@ -1,4 +1,5 @@
1
- // Copyright (c) Meta Platforms, Inc. and its affiliates. All Rights Reserved.
1
+ // Copyright (c) Meta Platforms, Inc. and affiliates.
2
+ //
2
3
  // This source code is licensed under both the GPLv2 (found in the
3
4
  // COPYING file in the root directory) and Apache 2.0 License
4
5
  // (found in the LICENSE.Apache file in the root directory).
@@ -1,8 +1,8 @@
1
- // Copyright (c) Meta Platforms, Inc. and its affiliates. All Rights Reserved.
1
+ // Copyright (c) Meta Platforms, Inc. and affiliates.
2
+ //
2
3
  // This source code is licensed under both the GPLv2 (found in the
3
4
  // COPYING file in the root directory) and Apache 2.0 License
4
- // (found in the LICENSE.Apache file in the root directory).
5
- //
5
+ // (found in the LICENSE.Apache file in the root directory).#pragma once
6
6
  #pragma once
7
7
 
8
8
  #if USE_COROUTINES
@@ -1,4 +1,5 @@
1
- // Copyright (c) Meta Platforms, Inc. and its affiliates. All Rights Reserved.
1
+ // Copyright (c) Meta Platforms, Inc. and affiliates.
2
+ //
2
3
  // This source code is licensed under both the GPLv2 (found in the
3
4
  // COPYING file in the root directory) and Apache 2.0 License
4
5
  // (found in the LICENSE.Apache file in the root directory).
@@ -895,12 +895,14 @@ TEST_F(DBWritableFileWriterTest, IOErrorNotification) {
895
895
  fwf->CheckCounters(1, 0);
896
896
  ASSERT_EQ(listener->NotifyErrorCount(), 1);
897
897
 
898
+ file_writer->reset_seen_error();
898
899
  fwf->SetIOError(true);
899
900
  ASSERT_NOK(file_writer->Flush());
900
901
  fwf->CheckCounters(1, 1);
901
902
  ASSERT_EQ(listener->NotifyErrorCount(), 2);
902
903
 
903
904
  /* No error generation */
905
+ file_writer->reset_seen_error();
904
906
  fwf->SetIOError(false);
905
907
  ASSERT_OK(file_writer->Append(std::string(2 * kMb, 'b')));
906
908
  ASSERT_EQ(listener->NotifyErrorCount(), 2);
@@ -569,6 +569,7 @@ using ROCKSDB_NAMESPACE::ConstexprFloorLog2;
569
569
  using ROCKSDB_NAMESPACE::CountTrailingZeroBits;
570
570
  using ROCKSDB_NAMESPACE::DecodeFixed128;
571
571
  using ROCKSDB_NAMESPACE::DecodeFixedGeneric;
572
+ using ROCKSDB_NAMESPACE::DownwardInvolution;
572
573
  using ROCKSDB_NAMESPACE::EncodeFixed128;
573
574
  using ROCKSDB_NAMESPACE::EncodeFixedGeneric;
574
575
  using ROCKSDB_NAMESPACE::FloorLog2;
@@ -577,6 +578,8 @@ using ROCKSDB_NAMESPACE::Multiply64to128;
577
578
  using ROCKSDB_NAMESPACE::Unsigned128;
578
579
  using ROCKSDB_NAMESPACE::Upper64of128;
579
580
 
581
+ int blah(int x) { return DownwardInvolution(x); }
582
+
580
583
  template <typename T>
581
584
  static void test_BitOps() {
582
585
  // This complex code is to generalize to 128-bit values. Otherwise
@@ -640,6 +643,70 @@ static void test_BitOps() {
640
643
  EXPECT_EQ(ReverseBits(vm1), static_cast<T>(rv * ~T{1}));
641
644
  }
642
645
  #endif
646
+
647
+ // DownwardInvolution
648
+ {
649
+ T misc = static_cast<T>(/*random*/ 0xc682cd153d0e3279U +
650
+ i * /*random*/ 0x9b3972f3bea0baa3U);
651
+ if constexpr (sizeof(T) > 8) {
652
+ misc = (misc << 64) | (/*random*/ 0x52af031a38ced62dU +
653
+ i * /*random*/ 0x936f803d9752ddc3U);
654
+ }
655
+ T misc_masked = misc & vm1;
656
+ EXPECT_LE(misc_masked, vm1);
657
+ T di_misc_masked = DownwardInvolution(misc_masked);
658
+ EXPECT_LE(di_misc_masked, vm1);
659
+ if (misc_masked > 0) {
660
+ // Highest-order 1 in same position
661
+ EXPECT_EQ(FloorLog2(misc_masked), FloorLog2(di_misc_masked));
662
+ }
663
+ // Validate involution property on short value
664
+ EXPECT_EQ(DownwardInvolution(di_misc_masked), misc_masked);
665
+
666
+ // Validate involution property on large value
667
+ T di_misc = DownwardInvolution(misc);
668
+ EXPECT_EQ(DownwardInvolution(di_misc), misc);
669
+ // Highest-order 1 in same position
670
+ if (misc > 0) {
671
+ EXPECT_EQ(FloorLog2(misc), FloorLog2(di_misc));
672
+ }
673
+
674
+ // Validate distributes over xor.
675
+ // static_casts to avoid numerical promotion effects.
676
+ EXPECT_EQ(DownwardInvolution(static_cast<T>(misc_masked ^ vm1)),
677
+ static_cast<T>(di_misc_masked ^ DownwardInvolution(vm1)));
678
+ T misc2 = static_cast<T>(misc >> 1);
679
+ EXPECT_EQ(DownwardInvolution(static_cast<T>(misc ^ misc2)),
680
+ static_cast<T>(di_misc ^ DownwardInvolution(misc2)));
681
+
682
+ // Choose some small number of bits to pull off to test combined
683
+ // uniqueness guarantee
684
+ int in_bits = i % 7;
685
+ unsigned in_mask = (unsigned{1} << in_bits) - 1U;
686
+ // IMPLICIT: int out_bits = 8 - in_bits;
687
+ std::vector<bool> seen(256, false);
688
+ for (int j = 0; j < 255; ++j) {
689
+ T t_in = misc ^ static_cast<T>(j);
690
+ unsigned in = static_cast<unsigned>(t_in);
691
+ unsigned out = static_cast<unsigned>(DownwardInvolution(t_in));
692
+ unsigned val = ((out << in_bits) | (in & in_mask)) & 255U;
693
+ EXPECT_FALSE(seen[val]);
694
+ seen[val] = true;
695
+ }
696
+
697
+ if (i + 8 < int{8 * sizeof(T)}) {
698
+ // Also test manipulating bits in the middle of input is
699
+ // bijective in bottom of output
700
+ seen = std::vector<bool>(256, false);
701
+ for (int j = 0; j < 255; ++j) {
702
+ T in = misc ^ (static_cast<T>(j) << i);
703
+ unsigned val = static_cast<unsigned>(DownwardInvolution(in)) & 255U;
704
+ EXPECT_FALSE(seen[val]);
705
+ seen[val] = true;
706
+ }
707
+ }
708
+ }
709
+
643
710
  vm1 = (vm1 << 1) | 1;
644
711
  }
645
712
 
@@ -250,4 +250,45 @@ inline T ReverseBits(T v) {
250
250
  return r;
251
251
  }
252
252
 
253
+ // Every output bit depends on many input bits in the same and higher
254
+ // positions, but not lower positions. Specifically, this function
255
+ // * Output highest bit set to 1 is same as input (same FloorLog2, or
256
+ // equivalently, same number of leading zeros)
257
+ // * Is its own inverse (an involution)
258
+ // * Guarantees that b bottom bits of v and c bottom bits of
259
+ // DownwardInvolution(v) uniquely identify b + c bottom bits of v
260
+ // (which is all of v if v < 2**(b + c)).
261
+ // ** A notable special case is that modifying c adjacent bits at
262
+ // some chosen position in the input is bijective with the bottom c
263
+ // output bits.
264
+ // * Distributes over xor, as in DI(a ^ b) == DI(a) ^ DI(b)
265
+ //
266
+ // This transformation is equivalent to a matrix*vector multiplication in
267
+ // GF(2) where the matrix is recursively defined by the pattern matrix
268
+ // P = | 1 1 |
269
+ // | 0 1 |
270
+ // and replacing 1's with P and 0's with 2x2 zero matices to some depth,
271
+ // e.g. depth of 6 for 64-bit T. An essential feature of this matrix
272
+ // is that all square sub-matrices that include the top row are invertible.
273
+ template <typename T>
274
+ inline T DownwardInvolution(T v) {
275
+ static_assert(std::is_integral<T>::value, "non-integral type");
276
+ static_assert(sizeof(T) <= 8, "only supported up to 64 bits");
277
+
278
+ uint64_t r = static_cast<uint64_t>(v);
279
+ if constexpr (sizeof(T) > 4) {
280
+ r ^= r >> 32;
281
+ }
282
+ if constexpr (sizeof(T) > 2) {
283
+ r ^= (r & 0xffff0000ffff0000U) >> 16;
284
+ }
285
+ if constexpr (sizeof(T) > 1) {
286
+ r ^= (r & 0xff00ff00ff00ff00U) >> 8;
287
+ }
288
+ r ^= (r & 0xf0f0f0f0f0f0f0f0U) >> 4;
289
+ r ^= (r & 0xccccccccccccccccU) >> 2;
290
+ r ^= (r & 0xaaaaaaaaaaaaaaaaU) >> 1;
291
+ return static_cast<T>(r);
292
+ }
293
+
253
294
  } // namespace ROCKSDB_NAMESPACE
@@ -230,6 +230,12 @@ inline Unsigned128 ReverseBits(Unsigned128 v) {
230
230
  ReverseBits(Upper64of128(v));
231
231
  }
232
232
 
233
+ template <>
234
+ inline Unsigned128 DownwardInvolution(Unsigned128 v) {
235
+ return (Unsigned128{DownwardInvolution(Upper64of128(v))} << 64) |
236
+ DownwardInvolution(Upper64of128(v) ^ Lower64of128(v));
237
+ }
238
+
233
239
  template <typename T>
234
240
  struct IsUnsignedUpTo128
235
241
  : std::integral_constant<bool, std::is_unsigned<T>::value ||
@@ -1,4 +1,5 @@
1
- // Copyright (c) Meta Platforms, Inc. and its affiliates. All Rights Reserved.
1
+ // Copyright (c) Meta Platforms, Inc. and affiliates.
2
+ //
2
3
  // This source code is licensed under both the GPLv2 (found in the
3
4
  // COPYING file in the root directory) and Apache 2.0 License
4
5
  // (found in the LICENSE.Apache file in the root directory).
@@ -8,6 +8,7 @@
8
8
  #include <stdarg.h>
9
9
  #include <stdio.h>
10
10
 
11
+ #include "port/sys_time.h"
11
12
  #include "rocksdb/env.h"
12
13
 
13
14
  namespace ROCKSDB_NAMESPACE {
@@ -23,6 +24,18 @@ class StderrLogger : public Logger {
23
24
  using Logger::Logv;
24
25
 
25
26
  virtual void Logv(const char* format, va_list ap) override {
27
+ const uint64_t thread_id = Env::Default()->GetThreadID();
28
+
29
+ port::TimeVal now_tv;
30
+ port::GetTimeOfDay(&now_tv, nullptr);
31
+ const time_t seconds = now_tv.tv_sec;
32
+ struct tm t;
33
+ port::LocalTimeR(&seconds, &t);
34
+ fprintf(stderr, "%04d/%02d/%02d-%02d:%02d:%02d.%06d %llx ",
35
+ t.tm_year + 1900, t.tm_mon + 1, t.tm_mday, t.tm_hour, t.tm_min,
36
+ t.tm_sec, static_cast<int>(now_tv.tv_usec),
37
+ static_cast<long long unsigned int>(thread_id));
38
+
26
39
  vfprintf(stderr, format, ap);
27
40
  fprintf(stderr, "\n");
28
41
  }