@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.
- package/binding.cc +32 -14
- package/deps/rocksdb/iostats.patch +19 -0
- package/deps/rocksdb/rocksdb/CMakeLists.txt +15 -1
- package/deps/rocksdb/rocksdb/cache/cache.cc +4 -0
- package/deps/rocksdb/rocksdb/cache/cache_bench_tool.cc +6 -8
- package/deps/rocksdb/rocksdb/cache/cache_key.cc +184 -164
- package/deps/rocksdb/rocksdb/cache/cache_key.h +38 -29
- package/deps/rocksdb/rocksdb/cache/cache_reservation_manager_test.cc +4 -4
- package/deps/rocksdb/rocksdb/cache/cache_test.cc +93 -58
- package/deps/rocksdb/rocksdb/cache/clock_cache.cc +92 -42
- package/deps/rocksdb/rocksdb/cache/clock_cache.h +57 -32
- package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache.cc +114 -37
- package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache.h +34 -2
- package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache_test.cc +187 -38
- package/deps/rocksdb/rocksdb/cache/fast_lru_cache.cc +3 -1
- package/deps/rocksdb/rocksdb/cache/lru_cache.cc +88 -19
- package/deps/rocksdb/rocksdb/cache/lru_cache.h +48 -8
- package/deps/rocksdb/rocksdb/cache/lru_cache_test.cc +481 -224
- package/deps/rocksdb/rocksdb/crash_test.mk +15 -1
- package/deps/rocksdb/rocksdb/db/arena_wrapped_db_iter.cc +2 -2
- package/deps/rocksdb/rocksdb/db/blob/blob_file_builder.cc +3 -7
- package/deps/rocksdb/rocksdb/db/blob/blob_index.h +1 -1
- package/deps/rocksdb/rocksdb/db/blob/blob_log_format.cc +3 -5
- package/deps/rocksdb/rocksdb/db/blob/blob_log_writer.cc +25 -19
- package/deps/rocksdb/rocksdb/db/blob/blob_source.cc +4 -5
- package/deps/rocksdb/rocksdb/db/blob/blob_source.h +2 -3
- package/deps/rocksdb/rocksdb/db/blob/blob_source_test.cc +12 -4
- package/deps/rocksdb/rocksdb/db/blob/db_blob_basic_test.cc +149 -0
- package/deps/rocksdb/rocksdb/db/blob/db_blob_compaction_test.cc +105 -0
- package/deps/rocksdb/rocksdb/db/column_family.cc +2 -15
- package/deps/rocksdb/rocksdb/db/column_family_test.cc +17 -4
- package/deps/rocksdb/rocksdb/db/compact_files_test.cc +8 -8
- package/deps/rocksdb/rocksdb/db/compaction/compaction.cc +0 -7
- package/deps/rocksdb/rocksdb/db/compaction/compaction.h +5 -0
- package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator.cc +56 -53
- package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator.h +33 -11
- package/deps/rocksdb/rocksdb/db/compaction/compaction_job.cc +45 -11
- package/deps/rocksdb/rocksdb/db/compaction/compaction_job_test.cc +1 -2
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_test.cc +143 -2
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_universal.cc +43 -18
- package/deps/rocksdb/rocksdb/db/compaction/tiered_compaction_test.cc +48 -65
- package/deps/rocksdb/rocksdb/db/corruption_test.cc +1 -0
- package/deps/rocksdb/rocksdb/db/db_basic_test.cc +73 -4
- package/deps/rocksdb/rocksdb/db/db_block_cache_test.cc +239 -190
- package/deps/rocksdb/rocksdb/db/db_compaction_test.cc +71 -2
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl.cc +144 -33
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl.h +18 -35
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_compaction_flush.cc +11 -5
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_experimental.cc +7 -7
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_open.cc +15 -8
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_readonly.cc +2 -1
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_secondary.cc +3 -1
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_write.cc +11 -0
- package/deps/rocksdb/rocksdb/db/db_iter.cc +69 -11
- package/deps/rocksdb/rocksdb/db/db_iter.h +16 -0
- package/deps/rocksdb/rocksdb/db/db_kv_checksum_test.cc +239 -23
- package/deps/rocksdb/rocksdb/db/db_memtable_test.cc +2 -1
- package/deps/rocksdb/rocksdb/db/db_merge_operand_test.cc +42 -0
- package/deps/rocksdb/rocksdb/db/db_test.cc +61 -28
- package/deps/rocksdb/rocksdb/db/db_test2.cc +24 -9
- package/deps/rocksdb/rocksdb/db/db_wal_test.cc +17 -0
- package/deps/rocksdb/rocksdb/db/db_with_timestamp_compaction_test.cc +61 -0
- package/deps/rocksdb/rocksdb/db/db_write_test.cc +130 -0
- package/deps/rocksdb/rocksdb/db/event_helpers.cc +2 -1
- package/deps/rocksdb/rocksdb/db/experimental.cc +7 -8
- package/deps/rocksdb/rocksdb/db/external_sst_file_ingestion_job.cc +1 -2
- package/deps/rocksdb/rocksdb/db/flush_job.cc +11 -7
- package/deps/rocksdb/rocksdb/db/flush_job_test.cc +7 -1
- package/deps/rocksdb/rocksdb/db/forward_iterator.cc +4 -2
- package/deps/rocksdb/rocksdb/db/import_column_family_job.cc +7 -1
- package/deps/rocksdb/rocksdb/db/import_column_family_job.h +6 -0
- package/deps/rocksdb/rocksdb/db/import_column_family_test.cc +6 -0
- package/deps/rocksdb/rocksdb/db/kv_checksum.h +8 -4
- package/deps/rocksdb/rocksdb/db/log_reader.cc +48 -11
- package/deps/rocksdb/rocksdb/db/log_reader.h +8 -2
- package/deps/rocksdb/rocksdb/db/log_test.cc +10 -1
- package/deps/rocksdb/rocksdb/db/log_writer.cc +7 -1
- package/deps/rocksdb/rocksdb/db/manual_compaction_test.cc +4 -4
- package/deps/rocksdb/rocksdb/db/memtable.cc +222 -47
- package/deps/rocksdb/rocksdb/db/memtable.h +70 -14
- package/deps/rocksdb/rocksdb/db/memtable_list.cc +14 -8
- package/deps/rocksdb/rocksdb/db/memtable_list_test.cc +30 -10
- package/deps/rocksdb/rocksdb/db/perf_context_test.cc +5 -5
- package/deps/rocksdb/rocksdb/db/pinned_iterators_manager.h +5 -0
- package/deps/rocksdb/rocksdb/db/repair.cc +2 -3
- package/deps/rocksdb/rocksdb/db/seqno_time_test.cc +3 -7
- package/deps/rocksdb/rocksdb/db/table_cache.cc +72 -0
- package/deps/rocksdb/rocksdb/db/table_cache.h +19 -1
- package/deps/rocksdb/rocksdb/db/table_cache_sync_and_async.h +10 -15
- package/deps/rocksdb/rocksdb/db/table_properties_collector_test.cc +2 -2
- package/deps/rocksdb/rocksdb/db/version_builder_test.cc +35 -64
- package/deps/rocksdb/rocksdb/db/version_edit.cc +3 -32
- package/deps/rocksdb/rocksdb/db/version_edit.h +2 -12
- package/deps/rocksdb/rocksdb/db/version_edit_test.cc +10 -23
- package/deps/rocksdb/rocksdb/db/version_set.cc +71 -28
- package/deps/rocksdb/rocksdb/db/version_set.h +3 -3
- package/deps/rocksdb/rocksdb/db/version_set_sync_and_async.h +7 -7
- package/deps/rocksdb/rocksdb/db/version_set_test.cc +17 -15
- package/deps/rocksdb/rocksdb/db/wal_manager.cc +0 -4
- package/deps/rocksdb/rocksdb/db/wal_manager_test.cc +2 -1
- package/deps/rocksdb/rocksdb/db/wide/db_wide_basic_test.cc +137 -42
- package/deps/rocksdb/rocksdb/db/wide/wide_column_serialization.cc +21 -0
- package/deps/rocksdb/rocksdb/db/wide/wide_column_serialization.h +1 -0
- package/deps/rocksdb/rocksdb/db/write_batch_test.cc +2 -1
- package/deps/rocksdb/rocksdb/db/write_callback_test.cc +4 -4
- package/deps/rocksdb/rocksdb/db/write_thread.cc +51 -46
- package/deps/rocksdb/rocksdb/db/write_thread.h +0 -4
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_common.h +5 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_gflags.cc +12 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.cc +8 -0
- package/deps/rocksdb/rocksdb/env/env_posix.cc +1 -1
- package/deps/rocksdb/rocksdb/env/env_test.cc +38 -8
- package/deps/rocksdb/rocksdb/env/file_system.cc +20 -0
- package/deps/rocksdb/rocksdb/env/fs_posix.cc +2 -46
- package/deps/rocksdb/rocksdb/env/io_posix.cc +1 -0
- package/deps/rocksdb/rocksdb/file/writable_file_writer.cc +110 -5
- package/deps/rocksdb/rocksdb/file/writable_file_writer.h +7 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/advanced_options.h +29 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/cache.h +31 -6
- package/deps/rocksdb/rocksdb/include/rocksdb/db.h +4 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/file_system.h +1 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/iostats_context.h +7 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/options.h +10 -3
- package/deps/rocksdb/rocksdb/include/rocksdb/slice.h +3 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/status.h +1 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/wide_columns.h +2 -0
- package/deps/rocksdb/rocksdb/logging/auto_roll_logger.cc +12 -0
- package/deps/rocksdb/rocksdb/logging/auto_roll_logger_test.cc +9 -13
- package/deps/rocksdb/rocksdb/logging/env_logger.h +39 -13
- package/deps/rocksdb/rocksdb/memory/memory_allocator_test.cc +1 -1
- package/deps/rocksdb/rocksdb/memtable/inlineskiplist.h +1 -1
- package/deps/rocksdb/rocksdb/memtable/write_buffer_manager_test.cc +1 -1
- package/deps/rocksdb/rocksdb/microbench/db_basic_bench.cc +6 -0
- package/deps/rocksdb/rocksdb/monitoring/iostats_context_imp.h +4 -1
- package/deps/rocksdb/rocksdb/options/cf_options.cc +10 -3
- package/deps/rocksdb/rocksdb/options/cf_options.h +10 -5
- package/deps/rocksdb/rocksdb/options/options_helper.cc +4 -1
- package/deps/rocksdb/rocksdb/options/options_settable_test.cc +3 -1
- package/deps/rocksdb/rocksdb/options/options_test.cc +4 -2
- package/deps/rocksdb/rocksdb/port/util_logger.h +1 -3
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_builder.cc +2 -6
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_factory.cc +1 -0
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.cc +52 -12
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.h +5 -7
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_sync_and_async.h +9 -1
- package/deps/rocksdb/rocksdb/table/block_based/block_like_traits.h +28 -10
- package/deps/rocksdb/rocksdb/table/block_based/data_block_hash_index_test.cc +1 -1
- package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block.cc +5 -2
- package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block.h +1 -0
- package/deps/rocksdb/rocksdb/table/get_context.cc +16 -6
- package/deps/rocksdb/rocksdb/table/table_reader.h +9 -0
- package/deps/rocksdb/rocksdb/table/table_test.cc +2 -1
- package/deps/rocksdb/rocksdb/table/unique_id.cc +22 -24
- package/deps/rocksdb/rocksdb/table/unique_id_impl.h +2 -1
- package/deps/rocksdb/rocksdb/tools/block_cache_analyzer/block_cache_trace_analyzer_plot.py +7 -0
- package/deps/rocksdb/rocksdb/tools/db_bench_tool.cc +41 -4
- package/deps/rocksdb/rocksdb/tools/db_sanity_test.cc +5 -2
- package/deps/rocksdb/rocksdb/tools/ldb_cmd.cc +7 -8
- package/deps/rocksdb/rocksdb/tools/ldb_cmd_test.cc +6 -6
- package/deps/rocksdb/rocksdb/tools/reduce_levels_test.cc +1 -1
- package/deps/rocksdb/rocksdb/util/async_file_reader.cc +2 -1
- package/deps/rocksdb/rocksdb/util/async_file_reader.h +3 -3
- package/deps/rocksdb/rocksdb/util/coro_utils.h +2 -1
- package/deps/rocksdb/rocksdb/util/file_reader_writer_test.cc +2 -0
- package/deps/rocksdb/rocksdb/util/hash_test.cc +67 -0
- package/deps/rocksdb/rocksdb/util/math.h +41 -0
- package/deps/rocksdb/rocksdb/util/math128.h +6 -0
- package/deps/rocksdb/rocksdb/util/single_thread_executor.h +2 -1
- package/deps/rocksdb/rocksdb/util/stderr_logger.h +13 -0
- package/deps/rocksdb/rocksdb/utilities/backup/backup_engine_test.cc +55 -46
- package/deps/rocksdb/rocksdb/utilities/cache_dump_load_impl.cc +3 -6
- package/deps/rocksdb/rocksdb/utilities/cassandra/cassandra_functional_test.cc +2 -1
- package/deps/rocksdb/rocksdb/utilities/counted_fs.cc +10 -0
- package/deps/rocksdb/rocksdb/utilities/transactions/lock/point/point_lock_manager_test.h +5 -0
- package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_lock_manager.h +6 -0
- package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_locking_test.cc +2 -2
- package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction_test.cc +2 -2
- package/deps/rocksdb/rocksdb/utilities/ttl/ttl_test.cc +2 -2
- package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_test.cc +2 -2
- package/index.js +17 -8
- package/package.json +1 -1
- package/prebuilds/darwin-arm64/node.napi.node +0 -0
- package/prebuilds/darwin-x64/node.napi.node +0 -0
- package/prebuilds/linux-x64/node.napi.node +0 -0
- 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
|
-
|
|
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
|
-
|
|
3620
|
-
|
|
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
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
// Copyright (c) Meta Platforms, Inc. and
|
|
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
|
|
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
|
|
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
|
|
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
|
}
|