@nxtedition/rocksdb 14.0.0 → 15.1.0
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 +52 -179
- package/deps/rocksdb/rocksdb/BUCK +7 -0
- package/deps/rocksdb/rocksdb/CMakeLists.txt +29 -14
- package/deps/rocksdb/rocksdb/Directory.Build.props +9 -0
- package/deps/rocksdb/rocksdb/Makefile +6 -1
- package/deps/rocksdb/rocksdb/cache/secondary_cache_adapter.cc +4 -4
- package/deps/rocksdb/rocksdb/ccache_msvc_compiler.bat +1 -0
- package/deps/rocksdb/rocksdb/db/compaction/compaction.cc +17 -3
- package/deps/rocksdb/rocksdb/db/compaction/compaction.h +8 -3
- package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator.h +10 -0
- package/deps/rocksdb/rocksdb/db/compaction/compaction_job.cc +522 -60
- package/deps/rocksdb/rocksdb/db/compaction/compaction_job.h +69 -10
- package/deps/rocksdb/rocksdb/db/compaction/compaction_job_test.cc +443 -0
- package/deps/rocksdb/rocksdb/db/compaction/compaction_outputs.cc +4 -2
- package/deps/rocksdb/rocksdb/db/compaction/compaction_outputs.h +14 -3
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker.cc +5 -5
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_fifo.cc +3 -6
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_level.cc +1 -1
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_test.cc +28 -5
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_universal.cc +4 -4
- package/deps/rocksdb/rocksdb/db/compaction/compaction_service_job.cc +6 -3
- package/deps/rocksdb/rocksdb/db/compaction/compaction_service_test.cc +455 -98
- package/deps/rocksdb/rocksdb/db/compaction/subcompaction_state.cc +4 -2
- package/deps/rocksdb/rocksdb/db/compaction/subcompaction_state.h +13 -1
- package/deps/rocksdb/rocksdb/db/db_flush_test.cc +146 -0
- package/deps/rocksdb/rocksdb/db/db_follower_test.cc +2 -2
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl.cc +6 -0
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl.h +5 -2
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_compaction_flush.cc +18 -19
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_files.cc +5 -0
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_secondary.cc +665 -14
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_secondary.h +83 -0
- package/deps/rocksdb/rocksdb/db/db_iterator_test.cc +68 -0
- package/deps/rocksdb/rocksdb/db/db_rate_limiter_test.cc +101 -0
- package/deps/rocksdb/rocksdb/db/dbformat_test.cc +44 -0
- package/deps/rocksdb/rocksdb/db/external_sst_file_ingestion_job.cc +1 -2
- package/deps/rocksdb/rocksdb/db/external_sst_file_test.cc +22 -5
- package/deps/rocksdb/rocksdb/db/log_reader.h +4 -4
- package/deps/rocksdb/rocksdb/db/log_writer.h +1 -1
- package/deps/rocksdb/rocksdb/db/merge_helper.h +1 -1
- package/deps/rocksdb/rocksdb/db/version_edit.cc +477 -139
- package/deps/rocksdb/rocksdb/db/version_edit.h +228 -8
- package/deps/rocksdb/rocksdb/db/version_edit_test.cc +333 -0
- package/deps/rocksdb/rocksdb/db/write_thread.h +1 -1
- package/deps/rocksdb/rocksdb/db_stress_tool/CMakeLists.txt +1 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_common.cc +247 -32
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_common.h +3 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_compaction_service.cc +61 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_compaction_service.h +17 -28
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_gflags.cc +16 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_listener.h +6 -1
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_shared_state.h +46 -18
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.cc +18 -1
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.h +8 -7
- package/deps/rocksdb/rocksdb/db_stress_tool/expected_value.h +4 -4
- package/deps/rocksdb/rocksdb/env/fs_posix.cc +1 -0
- package/deps/rocksdb/rocksdb/file/filename.cc +40 -0
- package/deps/rocksdb/rocksdb/file/filename.h +14 -1
- package/deps/rocksdb/rocksdb/file/writable_file_writer.cc +4 -3
- package/deps/rocksdb/rocksdb/file/writable_file_writer.h +2 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/db.h +26 -7
- package/deps/rocksdb/rocksdb/include/rocksdb/file_system.h +5 -3
- package/deps/rocksdb/rocksdb/include/rocksdb/options.h +59 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/statistics.h +3 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/table.h +24 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/types.h +2 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/stackable_db.h +4 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/version.h +13 -8
- package/deps/rocksdb/rocksdb/monitoring/statistics.cc +1 -0
- package/deps/rocksdb/rocksdb/options/options_settable_test.cc +2 -0
- package/deps/rocksdb/rocksdb/options/options_test.cc +5 -0
- package/deps/rocksdb/rocksdb/src.mk +2 -0
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_builder.cc +73 -16
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_builder.h +10 -5
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_factory.cc +32 -0
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_iterator.cc +18 -27
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_iterator.h +0 -3
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.h +5 -1
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_test.cc +708 -217
- package/deps/rocksdb/rocksdb/table/block_based/block_builder.cc +11 -6
- package/deps/rocksdb/rocksdb/table/block_based/block_builder.h +5 -3
- package/deps/rocksdb/rocksdb/table/block_based/block_prefetcher.cc +27 -19
- package/deps/rocksdb/rocksdb/table/block_based/index_builder.cc +24 -6
- package/deps/rocksdb/rocksdb/table/block_based/index_builder.h +51 -18
- package/deps/rocksdb/rocksdb/table/block_based/index_builder_test.cc +183 -0
- package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block_test.cc +4 -2
- package/deps/rocksdb/rocksdb/table/block_based/partitioned_index_iterator.h +0 -2
- package/deps/rocksdb/rocksdb/table/block_based/user_defined_index_wrapper.h +8 -3
- package/deps/rocksdb/rocksdb/table/plain/plain_table_reader.cc +3 -1
- package/deps/rocksdb/rocksdb/table/table_test.cc +222 -36
- package/deps/rocksdb/rocksdb/tools/db_bench_tool.cc +246 -6
- package/deps/rocksdb/rocksdb/tools/ldb_cmd.cc +86 -0
- package/deps/rocksdb/rocksdb/tools/ldb_cmd_impl.h +21 -0
- package/deps/rocksdb/rocksdb/tools/ldb_tool.cc +1 -0
- package/deps/rocksdb/rocksdb/util/file_reader_writer_test.cc +1 -1
- package/deps/rocksdb/rocksdb/utilities/backup/backup_engine_test.cc +1 -0
- package/deps/rocksdb/rocksdb/utilities/transactions/lock/point/point_lock_manager.cc +0 -2
- package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn_db.cc +12 -12
- package/index.js +27 -37
- package/package.json +1 -1
- package/prebuilds/darwin-arm64/@nxtedition+rocksdb.node +0 -0
- package/prebuilds/linux-x64/@nxtedition+rocksdb.node +0 -0
package/binding.cc
CHANGED
|
@@ -1178,6 +1178,12 @@ NAPI_METHOD(db_open) {
|
|
|
1178
1178
|
|
|
1179
1179
|
NAPI_STATUS_THROWS(GetProperty(env, options, "compactionReadaheadSize", dbOptions.compaction_readahead_size));
|
|
1180
1180
|
|
|
1181
|
+
NAPI_STATUS_THROWS(GetProperty(env, options, "useAdaptiveMutex", dbOptions.use_adaptive_mutex));
|
|
1182
|
+
|
|
1183
|
+
NAPI_STATUS_THROWS(GetProperty(env, options, "writeBufferSize", dbOptions.db_write_buffer_size));
|
|
1184
|
+
|
|
1185
|
+
NAPI_STATUS_THROWS(GetProperty(env, options, "manualWALFlush", dbOptions.manual_wal_flush));
|
|
1186
|
+
|
|
1181
1187
|
// TODO (feat): dbOptions.listeners
|
|
1182
1188
|
|
|
1183
1189
|
std::string infoLogLevel;
|
|
@@ -1600,6 +1606,28 @@ NAPI_METHOD(db_get_latest_sequence) {
|
|
|
1600
1606
|
return result;
|
|
1601
1607
|
}
|
|
1602
1608
|
|
|
1609
|
+
NAPI_METHOD(db_flush_wal) {
|
|
1610
|
+
NAPI_ARGV(3);
|
|
1611
|
+
|
|
1612
|
+
Database* database;
|
|
1613
|
+
NAPI_STATUS_THROWS(napi_get_value_external(env, argv[0], reinterpret_cast<void**>(&database)));
|
|
1614
|
+
|
|
1615
|
+
bool sync;
|
|
1616
|
+
NAPI_STATUS_THROWS(GetValue(env, argv[1], sync));
|
|
1617
|
+
|
|
1618
|
+
auto callback = argv[2];
|
|
1619
|
+
|
|
1620
|
+
struct State {};
|
|
1621
|
+
runAsync<State>(
|
|
1622
|
+
"leveldown.flush_wal", env, callback,
|
|
1623
|
+
[=](auto& state) {
|
|
1624
|
+
return database->db->FlushWAL(sync);
|
|
1625
|
+
},
|
|
1626
|
+
[](auto& state, auto env, auto& argv) { return napi_ok; });
|
|
1627
|
+
|
|
1628
|
+
return 0;
|
|
1629
|
+
}
|
|
1630
|
+
|
|
1603
1631
|
NAPI_METHOD(iterator_init) {
|
|
1604
1632
|
NAPI_ARGV(2);
|
|
1605
1633
|
|
|
@@ -2034,193 +2062,30 @@ NAPI_METHOD(updates_close) {
|
|
|
2034
2062
|
}
|
|
2035
2063
|
}
|
|
2036
2064
|
|
|
2037
|
-
NAPI_METHOD(
|
|
2038
|
-
NAPI_ARGV(
|
|
2065
|
+
NAPI_METHOD(db_compact_range_sync) {
|
|
2066
|
+
NAPI_ARGV(2);
|
|
2039
2067
|
|
|
2040
2068
|
Database* database;
|
|
2041
2069
|
NAPI_STATUS_THROWS(napi_get_value_external(env, argv[0], reinterpret_cast<void**>(&database)));
|
|
2042
2070
|
|
|
2043
|
-
|
|
2044
|
-
|
|
2045
|
-
NAPI_STATUS_THROWS(napi_create_object(env, &columns));
|
|
2046
|
-
for (auto& [id, column] : database->columns) {
|
|
2047
|
-
napi_value val;
|
|
2048
|
-
NAPI_STATUS_THROWS(napi_create_external(env, column.handle, nullptr, nullptr, &val));
|
|
2049
|
-
NAPI_STATUS_THROWS(napi_set_named_property(env, columns, column.descriptor.name.c_str(), val));
|
|
2050
|
-
}
|
|
2051
|
-
return columns;
|
|
2052
|
-
} else {
|
|
2053
|
-
rocksdb::Options dbOptions;
|
|
2054
|
-
|
|
2055
|
-
const auto options = argv[1];
|
|
2056
|
-
|
|
2057
|
-
int parallelism = std::max<int>(1, std::thread::hardware_concurrency() / 2);
|
|
2058
|
-
NAPI_STATUS_THROWS(GetProperty(env, options, "parallelism", parallelism));
|
|
2059
|
-
dbOptions.IncreaseParallelism(parallelism);
|
|
2060
|
-
|
|
2061
|
-
NAPI_STATUS_THROWS(GetProperty(env, options, "walDir", dbOptions.wal_dir));
|
|
2062
|
-
|
|
2063
|
-
uint32_t walTTL = 0;
|
|
2064
|
-
NAPI_STATUS_THROWS(GetProperty(env, options, "walTTL", walTTL));
|
|
2065
|
-
dbOptions.WAL_ttl_seconds = walTTL / 1e3;
|
|
2066
|
-
|
|
2067
|
-
uint32_t walSizeLimit = 0;
|
|
2068
|
-
NAPI_STATUS_THROWS(GetProperty(env, options, "walSizeLimit", walSizeLimit));
|
|
2069
|
-
dbOptions.WAL_size_limit_MB = walSizeLimit / 1e6;
|
|
2070
|
-
|
|
2071
|
-
NAPI_STATUS_THROWS(GetProperty(env, options, "maxTotalWalSize", dbOptions.max_total_wal_size));
|
|
2072
|
-
|
|
2073
|
-
bool walCompression = true;
|
|
2074
|
-
NAPI_STATUS_THROWS(GetProperty(env, options, "walCompression", walCompression));
|
|
2075
|
-
dbOptions.wal_compression =
|
|
2076
|
-
walCompression ? rocksdb::CompressionType::kZSTD : rocksdb::CompressionType::kNoCompression;
|
|
2077
|
-
|
|
2078
|
-
dbOptions.avoid_unnecessary_blocking_io = true;
|
|
2079
|
-
NAPI_STATUS_THROWS(GetProperty(env, options, "avoidUnnecessaryBlockingIO", dbOptions.avoid_unnecessary_blocking_io));
|
|
2080
|
-
|
|
2081
|
-
dbOptions.create_missing_column_families = true;
|
|
2082
|
-
NAPI_STATUS_THROWS(GetProperty(env, options, "createMissingColumnFamilies", dbOptions.create_missing_column_families));
|
|
2083
|
-
|
|
2084
|
-
NAPI_STATUS_THROWS(GetProperty(env, options, "writeDbIdToManifest", dbOptions.write_dbid_to_manifest));
|
|
2085
|
-
|
|
2086
|
-
NAPI_STATUS_THROWS(GetProperty(env, options, "adviseRandomOnOpen", dbOptions.advise_random_on_open));
|
|
2087
|
-
|
|
2088
|
-
NAPI_STATUS_THROWS(GetProperty(env, options, "bytesPerSync", dbOptions.bytes_per_sync));
|
|
2089
|
-
|
|
2090
|
-
NAPI_STATUS_THROWS(GetProperty(env, options, "walBytesPerSync", dbOptions.wal_bytes_per_sync));
|
|
2091
|
-
|
|
2092
|
-
NAPI_STATUS_THROWS(GetProperty(env, options, "strictBytesPerSync", dbOptions.strict_bytes_per_sync));
|
|
2093
|
-
|
|
2094
|
-
NAPI_STATUS_THROWS(GetProperty(env, options, "delayedWriteRate", dbOptions.delayed_write_rate));
|
|
2095
|
-
|
|
2096
|
-
NAPI_STATUS_THROWS(GetProperty(env, options, "createIfMissing", dbOptions.create_if_missing));
|
|
2097
|
-
|
|
2098
|
-
NAPI_STATUS_THROWS(GetProperty(env, options, "errorIfExists", dbOptions.error_if_exists));
|
|
2099
|
-
|
|
2100
|
-
NAPI_STATUS_THROWS(GetProperty(env, options, "pipelinedWrite", dbOptions.enable_pipelined_write));
|
|
2101
|
-
|
|
2102
|
-
NAPI_STATUS_THROWS(GetProperty(env, options, "dailyOffpeakTime", dbOptions.daily_offpeak_time_utc));
|
|
2103
|
-
|
|
2104
|
-
NAPI_STATUS_THROWS(GetProperty(env, options, "unorderedWrite", dbOptions.unordered_write));
|
|
2105
|
-
|
|
2106
|
-
NAPI_STATUS_THROWS(GetProperty(env, options, "allowMmapReads", dbOptions.allow_mmap_reads));
|
|
2107
|
-
|
|
2108
|
-
NAPI_STATUS_THROWS(GetProperty(env, options, "allowMmapWrites", dbOptions.allow_mmap_writes));
|
|
2109
|
-
|
|
2110
|
-
NAPI_STATUS_THROWS(GetProperty(env, options, "memTableHugePageSize", dbOptions.memtable_huge_page_size));
|
|
2111
|
-
|
|
2112
|
-
NAPI_STATUS_THROWS(GetProperty(env, options, "useDirectIOReads", dbOptions.use_direct_reads));
|
|
2113
|
-
|
|
2114
|
-
NAPI_STATUS_THROWS(GetProperty(env, options, "useDirectIOForFlushAndCompaction", dbOptions.use_direct_io_for_flush_and_compaction));
|
|
2115
|
-
|
|
2116
|
-
NAPI_STATUS_THROWS(GetProperty(env, options, "compactionReadaheadSize", dbOptions.compaction_readahead_size));
|
|
2117
|
-
|
|
2118
|
-
// TODO (feat): dbOptions.listeners
|
|
2119
|
-
|
|
2120
|
-
std::string infoLogLevel;
|
|
2121
|
-
NAPI_STATUS_THROWS(GetProperty(env, options, "infoLogLevel", infoLogLevel));
|
|
2122
|
-
if (infoLogLevel.size() > 0) {
|
|
2123
|
-
rocksdb::InfoLogLevel lvl = {};
|
|
2124
|
-
|
|
2125
|
-
if (infoLogLevel == "debug")
|
|
2126
|
-
lvl = rocksdb::InfoLogLevel::DEBUG_LEVEL;
|
|
2127
|
-
else if (infoLogLevel == "info")
|
|
2128
|
-
lvl = rocksdb::InfoLogLevel::INFO_LEVEL;
|
|
2129
|
-
else if (infoLogLevel == "warn")
|
|
2130
|
-
lvl = rocksdb::InfoLogLevel::WARN_LEVEL;
|
|
2131
|
-
else if (infoLogLevel == "error")
|
|
2132
|
-
lvl = rocksdb::InfoLogLevel::ERROR_LEVEL;
|
|
2133
|
-
else if (infoLogLevel == "fatal")
|
|
2134
|
-
lvl = rocksdb::InfoLogLevel::FATAL_LEVEL;
|
|
2135
|
-
else if (infoLogLevel == "header")
|
|
2136
|
-
lvl = rocksdb::InfoLogLevel::HEADER_LEVEL;
|
|
2137
|
-
else
|
|
2138
|
-
napi_throw_error(env, nullptr, "invalid log level");
|
|
2139
|
-
|
|
2140
|
-
dbOptions.info_log_level = lvl;
|
|
2141
|
-
} else {
|
|
2142
|
-
// In some places RocksDB checks this option to see if it should prepare
|
|
2143
|
-
// debug information (ahead of logging), so set it to the highest level.
|
|
2144
|
-
dbOptions.info_log_level = rocksdb::InfoLogLevel::HEADER_LEVEL;
|
|
2145
|
-
dbOptions.info_log.reset(new NullLogger());
|
|
2146
|
-
}
|
|
2147
|
-
|
|
2148
|
-
NAPI_STATUS_THROWS(InitOptions(env, dbOptions, options));
|
|
2149
|
-
|
|
2150
|
-
std::vector<rocksdb::ColumnFamilyDescriptor> descriptors;
|
|
2151
|
-
|
|
2152
|
-
bool hasColumns;
|
|
2153
|
-
NAPI_STATUS_THROWS(napi_has_named_property(env, options, "columns", &hasColumns));
|
|
2154
|
-
|
|
2155
|
-
if (hasColumns) {
|
|
2156
|
-
napi_value columns;
|
|
2157
|
-
NAPI_STATUS_THROWS(napi_get_named_property(env, options, "columns", &columns));
|
|
2158
|
-
|
|
2159
|
-
napi_value keys;
|
|
2160
|
-
NAPI_STATUS_THROWS(napi_get_property_names(env, columns, &keys));
|
|
2161
|
-
|
|
2162
|
-
uint32_t len;
|
|
2163
|
-
NAPI_STATUS_THROWS(napi_get_array_length(env, keys, &len));
|
|
2164
|
-
|
|
2165
|
-
descriptors.resize(len);
|
|
2166
|
-
for (uint32_t n = 0; n < len; ++n) {
|
|
2167
|
-
napi_value key;
|
|
2168
|
-
NAPI_STATUS_THROWS(napi_get_element(env, keys, n, &key));
|
|
2169
|
-
|
|
2170
|
-
napi_value column;
|
|
2171
|
-
NAPI_STATUS_THROWS(napi_get_property(env, columns, key, &column));
|
|
2172
|
-
|
|
2173
|
-
NAPI_STATUS_THROWS(InitOptions(env, descriptors[n].options, column));
|
|
2174
|
-
|
|
2175
|
-
NAPI_STATUS_THROWS(GetValue(env, key, descriptors[n].name));
|
|
2176
|
-
}
|
|
2177
|
-
}
|
|
2178
|
-
|
|
2179
|
-
auto callback = argv[2];
|
|
2180
|
-
|
|
2181
|
-
runAsync<std::vector<rocksdb::ColumnFamilyHandle*>>(
|
|
2182
|
-
"leveldown.open_for_read_only", env, callback,
|
|
2183
|
-
[=](auto& handles) {
|
|
2184
|
-
assert(!database->db);
|
|
2185
|
-
|
|
2186
|
-
rocksdb::DB* db = nullptr;
|
|
2187
|
-
|
|
2188
|
-
const auto status = descriptors.empty()
|
|
2189
|
-
? rocksdb::DB::OpenForReadOnly(dbOptions, database->location, &db)
|
|
2190
|
-
: rocksdb::DB::OpenForReadOnly(dbOptions, database->location, descriptors, &handles, &db);
|
|
2191
|
-
|
|
2192
|
-
database->db.reset(db);
|
|
2193
|
-
|
|
2194
|
-
return status;
|
|
2195
|
-
},
|
|
2196
|
-
[=](auto& handles, auto env, auto& argv) {
|
|
2197
|
-
argv.resize(2);
|
|
2071
|
+
std::optional<std::string> start;
|
|
2072
|
+
std::optional<std::string> end;
|
|
2198
2073
|
|
|
2199
|
-
|
|
2074
|
+
NAPI_STATUS_THROWS(GetProperty(env, argv[1], "start", start));
|
|
2075
|
+
NAPI_STATUS_THROWS(GetProperty(env, argv[1], "end", end));
|
|
2200
2076
|
|
|
2201
|
-
|
|
2202
|
-
ColumnFamily column;
|
|
2203
|
-
column.handle = handles[n];
|
|
2204
|
-
column.descriptor = descriptors[n];
|
|
2205
|
-
database->columns[column.handle->GetID()] = column;
|
|
2206
|
-
}
|
|
2077
|
+
rocksdb::CompactRangeOptions options;
|
|
2207
2078
|
|
|
2208
|
-
|
|
2209
|
-
|
|
2210
|
-
napi_value val;
|
|
2211
|
-
NAPI_STATUS_RETURN(napi_create_external(env, column.handle, nullptr, nullptr, &val));
|
|
2212
|
-
NAPI_STATUS_RETURN(napi_set_named_property(env, columns, column.descriptor.name.c_str(), val));
|
|
2213
|
-
}
|
|
2079
|
+
auto begin = start ? std::make_unique<rocksdb::Slice>(*start) : nullptr;
|
|
2080
|
+
auto finish = end ? std::make_unique<rocksdb::Slice>(*end) : nullptr;
|
|
2214
2081
|
|
|
2215
|
-
|
|
2216
|
-
});
|
|
2217
|
-
}
|
|
2082
|
+
ROCKS_STATUS_THROWS_NAPI(database->db->CompactRange(options, begin.get(), finish.get()));
|
|
2218
2083
|
|
|
2219
2084
|
return 0;
|
|
2220
2085
|
}
|
|
2221
2086
|
|
|
2222
2087
|
NAPI_METHOD(db_compact_range) {
|
|
2223
|
-
NAPI_ARGV(
|
|
2088
|
+
NAPI_ARGV(3);
|
|
2224
2089
|
|
|
2225
2090
|
Database* database;
|
|
2226
2091
|
NAPI_STATUS_THROWS(napi_get_value_external(env, argv[0], reinterpret_cast<void**>(&database)));
|
|
@@ -2231,12 +2096,19 @@ NAPI_METHOD(db_compact_range) {
|
|
|
2231
2096
|
NAPI_STATUS_THROWS(GetProperty(env, argv[1], "start", start));
|
|
2232
2097
|
NAPI_STATUS_THROWS(GetProperty(env, argv[1], "end", end));
|
|
2233
2098
|
|
|
2234
|
-
|
|
2099
|
+
auto callback = argv[2];
|
|
2235
2100
|
|
|
2236
|
-
|
|
2237
|
-
|
|
2101
|
+
runAsync<std::nullptr_t>(
|
|
2102
|
+
"leveldown.compact_range", env, callback,
|
|
2103
|
+
[=](auto& state) {
|
|
2104
|
+
rocksdb::CompactRangeOptions options;
|
|
2238
2105
|
|
|
2239
|
-
|
|
2106
|
+
auto begin = start ? std::make_unique<rocksdb::Slice>(*start) : nullptr;
|
|
2107
|
+
auto finish = end ? std::make_unique<rocksdb::Slice>(*end) : nullptr;
|
|
2108
|
+
|
|
2109
|
+
return database->db->CompactRange(options, begin.get(), finish.get());
|
|
2110
|
+
},
|
|
2111
|
+
[](auto& state, auto env, auto& argv) { return napi_ok; });
|
|
2240
2112
|
|
|
2241
2113
|
return 0;
|
|
2242
2114
|
}
|
|
@@ -2254,8 +2126,9 @@ NAPI_INIT() {
|
|
|
2254
2126
|
NAPI_EXPORT_FUNCTION(db_get_property);
|
|
2255
2127
|
NAPI_EXPORT_FUNCTION(db_get_latest_sequence);
|
|
2256
2128
|
NAPI_EXPORT_FUNCTION(db_query);
|
|
2257
|
-
NAPI_EXPORT_FUNCTION(
|
|
2129
|
+
NAPI_EXPORT_FUNCTION(db_compact_range_sync);
|
|
2258
2130
|
NAPI_EXPORT_FUNCTION(db_compact_range);
|
|
2131
|
+
NAPI_EXPORT_FUNCTION(db_flush_wal);
|
|
2259
2132
|
|
|
2260
2133
|
NAPI_EXPORT_FUNCTION(iterator_init);
|
|
2261
2134
|
NAPI_EXPORT_FUNCTION(iterator_seek);
|
|
@@ -425,6 +425,7 @@ rocks_cpp_library_wrapper(name="rocksdb_stress_lib", srcs=[
|
|
|
425
425
|
"db_stress_tool/batched_ops_stress.cc",
|
|
426
426
|
"db_stress_tool/cf_consistency_stress.cc",
|
|
427
427
|
"db_stress_tool/db_stress_common.cc",
|
|
428
|
+
"db_stress_tool/db_stress_compaction_service.cc",
|
|
428
429
|
"db_stress_tool/db_stress_compression_manager.cc",
|
|
429
430
|
"db_stress_tool/db_stress_driver.cc",
|
|
430
431
|
"db_stress_tool/db_stress_filters.cc",
|
|
@@ -5193,6 +5194,12 @@ cpp_unittest_wrapper(name="import_column_family_test",
|
|
|
5193
5194
|
extra_compiler_flags=[])
|
|
5194
5195
|
|
|
5195
5196
|
|
|
5197
|
+
cpp_unittest_wrapper(name="index_builder_test",
|
|
5198
|
+
srcs=["table/block_based/index_builder_test.cc"],
|
|
5199
|
+
deps=[":rocksdb_test_lib"],
|
|
5200
|
+
extra_compiler_flags=[])
|
|
5201
|
+
|
|
5202
|
+
|
|
5196
5203
|
cpp_unittest_wrapper(name="inlineskiplist_test",
|
|
5197
5204
|
srcs=["memtable/inlineskiplist_test.cc"],
|
|
5198
5205
|
deps=[":rocksdb_test_lib"],
|
|
@@ -203,9 +203,16 @@ if(WIN32 AND MSVC)
|
|
|
203
203
|
endif()
|
|
204
204
|
endif()
|
|
205
205
|
|
|
206
|
+
option(WIN_CI "Accelerate build speed and reduce build artifect size for github CI with MSVC" OFF)
|
|
207
|
+
|
|
206
208
|
if(MSVC)
|
|
207
|
-
|
|
208
|
-
|
|
209
|
+
if(WIN_CI)
|
|
210
|
+
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /MP /nologo /EHsc /Gd /GR /GF /fp:precise /Zc:wchar_t /Zc:forScope /errorReport:queue")
|
|
211
|
+
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /FC /W4 /wd4127 /wd4996 /wd4100 /wd4324 /wd4702")
|
|
212
|
+
else()
|
|
213
|
+
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /Zi /nologo /EHsc /GS /Gd /GR /GF /fp:precise /Zc:wchar_t /Zc:forScope /errorReport:queue")
|
|
214
|
+
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /FC /d2Zi+ /W4 /wd4127 /wd4996 /wd4100 /wd4324")
|
|
215
|
+
endif()
|
|
209
216
|
else()
|
|
210
217
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -W -Wextra -Wall -pthread")
|
|
211
218
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wsign-compare -Wshadow -Wno-unused-parameter -Wno-unused-variable -Woverloaded-virtual -Wnon-virtual-dtor -Wno-missing-field-initializers -Wno-strict-aliasing -Wno-invalid-offsetof")
|
|
@@ -313,7 +320,7 @@ if(NOT MSVC)
|
|
|
313
320
|
endif()
|
|
314
321
|
|
|
315
322
|
# Check if -latomic is required or not
|
|
316
|
-
if (NOT MSVC)
|
|
323
|
+
if (NOT MSVC AND NOT APPLE)
|
|
317
324
|
CHECK_CXX_SOURCE_COMPILES("
|
|
318
325
|
#include <atomic>
|
|
319
326
|
std::atomic<uint64_t> x(0);
|
|
@@ -450,24 +457,33 @@ else()
|
|
|
450
457
|
endif()
|
|
451
458
|
endif()
|
|
452
459
|
|
|
453
|
-
# Used to run
|
|
460
|
+
# Used to run optimized debug build and tests so we can run faster
|
|
454
461
|
option(OPTDBG "Build optimized debug build with MSVC" OFF)
|
|
455
462
|
option(WITH_RUNTIME_DEBUG "build with debug version of runtime library" ON)
|
|
456
463
|
if(MSVC)
|
|
457
|
-
if(
|
|
464
|
+
if (WIN_CI)
|
|
458
465
|
message(STATUS "Debug optimization is enabled")
|
|
459
466
|
set(CMAKE_CXX_FLAGS_DEBUG "/Oxt")
|
|
467
|
+
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} /DEBUG:FASTLINK")
|
|
468
|
+
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /DEBUG:FASTLINK")
|
|
460
469
|
else()
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
if( MSVC_VERSION GREATER 1900 )
|
|
465
|
-
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /Gm-")
|
|
470
|
+
if(OPTDBG)
|
|
471
|
+
message(STATUS "Debug optimization is enabled")
|
|
472
|
+
set(CMAKE_CXX_FLAGS_DEBUG "/Oxt")
|
|
466
473
|
else()
|
|
467
|
-
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /
|
|
468
|
-
endif()
|
|
474
|
+
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /Od /RTC1")
|
|
469
475
|
|
|
476
|
+
# Minimal Build is deprecated after MSVC 2015
|
|
477
|
+
if( MSVC_VERSION GREATER 1900 )
|
|
478
|
+
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /Gm-")
|
|
479
|
+
else()
|
|
480
|
+
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /Gm")
|
|
481
|
+
endif()
|
|
482
|
+
endif()
|
|
483
|
+
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} /DEBUG")
|
|
484
|
+
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /DEBUG")
|
|
470
485
|
endif()
|
|
486
|
+
|
|
471
487
|
if(WITH_RUNTIME_DEBUG)
|
|
472
488
|
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /${RUNTIME_LIBRARY}d")
|
|
473
489
|
else()
|
|
@@ -475,8 +491,6 @@ if(MSVC)
|
|
|
475
491
|
endif()
|
|
476
492
|
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /Oxt /Zp8 /Gm- /Gy /${RUNTIME_LIBRARY}")
|
|
477
493
|
|
|
478
|
-
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} /DEBUG")
|
|
479
|
-
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /DEBUG")
|
|
480
494
|
endif()
|
|
481
495
|
|
|
482
496
|
if(CMAKE_COMPILER_IS_GNUCXX)
|
|
@@ -1438,6 +1452,7 @@ if(WITH_TESTS)
|
|
|
1438
1452
|
table/block_based/block_based_table_reader_test.cc
|
|
1439
1453
|
table/block_based/block_test.cc
|
|
1440
1454
|
table/block_based/data_block_hash_index_test.cc
|
|
1455
|
+
table/block_based/index_builder_test.cc
|
|
1441
1456
|
table/block_based/full_filter_block_test.cc
|
|
1442
1457
|
table/block_based/partitioned_filter_block_test.cc
|
|
1443
1458
|
table/cleanable_test.cc
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="utf-8"?>
|
|
2
|
+
<Project>
|
|
3
|
+
<PropertyGroup>
|
|
4
|
+
<CLToolExe>ccache_msvc_compiler.bat</CLToolExe>
|
|
5
|
+
<CLToolPath>$(MSBuildThisFileDirectory)</CLToolPath>
|
|
6
|
+
<UseMultiToolTask>true</UseMultiToolTask>
|
|
7
|
+
<EnforceProcessCountAcrossBuilds>true</EnforceProcessCountAcrossBuilds>
|
|
8
|
+
</PropertyGroup>
|
|
9
|
+
</Project>
|
|
@@ -1739,6 +1739,9 @@ block_test: $(OBJ_DIR)/table/block_based/block_test.o $(TEST_LIBRARY) $(LIBRARY)
|
|
|
1739
1739
|
data_block_hash_index_test: $(OBJ_DIR)/table/block_based/data_block_hash_index_test.o $(TEST_LIBRARY) $(LIBRARY)
|
|
1740
1740
|
$(AM_LINK)
|
|
1741
1741
|
|
|
1742
|
+
index_builder_test: $(OBJ_DIR)/table/block_based/index_builder_test.o $(TEST_LIBRARY) $(LIBRARY)
|
|
1743
|
+
$(AM_LINK)
|
|
1744
|
+
|
|
1742
1745
|
inlineskiplist_test: $(OBJ_DIR)/memtable/inlineskiplist_test.o $(TEST_LIBRARY) $(LIBRARY)
|
|
1743
1746
|
$(AM_LINK)
|
|
1744
1747
|
|
|
@@ -2492,6 +2495,8 @@ commit_prereq:
|
|
|
2492
2495
|
false # J=$(J) build_tools/precommit_checker.py unit clang_unit release clang_release tsan asan ubsan lite unit_non_shm
|
|
2493
2496
|
# $(MAKE) clean && $(MAKE) jclean && $(MAKE) rocksdbjava;
|
|
2494
2497
|
|
|
2498
|
+
FOLLY_COMMIT_HASH = e95383b7c8b5b1e46cf47acf2f317d54f93c8268
|
|
2499
|
+
|
|
2495
2500
|
# For public CI runs, checkout folly in a way that can build with RocksDB.
|
|
2496
2501
|
# This is mostly intended as a test-only simulation of Meta-internal folly
|
|
2497
2502
|
# integration.
|
|
@@ -2503,7 +2508,7 @@ checkout_folly:
|
|
|
2503
2508
|
fi
|
|
2504
2509
|
@# Pin to a particular version for public CI, so that PR authors don't
|
|
2505
2510
|
@# need to worry about folly breaking our integration. Update periodically
|
|
2506
|
-
cd third-party/folly && git reset --hard
|
|
2511
|
+
cd third-party/folly && git reset --hard $(FOLLY_COMMIT_HASH)
|
|
2507
2512
|
@# Apparently missing include
|
|
2508
2513
|
perl -pi -e 's/(#include <atomic>)/$$1\n#include <cstring>/' third-party/folly/folly/lang/Exception.h
|
|
2509
2514
|
@# Warning-as-error on memcpy
|
|
@@ -33,7 +33,7 @@ const char* kTieredCacheName = "TieredCache";
|
|
|
33
33
|
// proportionally across the primary/secondary caches.
|
|
34
34
|
//
|
|
35
35
|
// The primary block cache is initially sized to the sum of the primary cache
|
|
36
|
-
// budget +
|
|
36
|
+
// budget + the secondary cache budget, as follows -
|
|
37
37
|
// |--------- Primary Cache Configured Capacity -----------|
|
|
38
38
|
// |---Secondary Cache Budget----|----Primary Cache Budget-----|
|
|
39
39
|
//
|
|
@@ -51,7 +51,7 @@ const char* kTieredCacheName = "TieredCache";
|
|
|
51
51
|
// placeholder is counted against the primary cache. To compensate and count
|
|
52
52
|
// a portion of it against the secondary cache, the secondary cache Deflate()
|
|
53
53
|
// method is called to shrink it. Since the Deflate() causes the secondary
|
|
54
|
-
// actual usage to shrink, it is
|
|
54
|
+
// actual usage to shrink, it is reflected here by releasing an equal amount
|
|
55
55
|
// from the pri_cache_res_ reservation. The Deflate() in the secondary cache
|
|
56
56
|
// can be, but is not required to be, implemented using its own cache
|
|
57
57
|
// reservation manager.
|
|
@@ -72,7 +72,7 @@ const char* kTieredCacheName = "TieredCache";
|
|
|
72
72
|
// reservation is increased by an equal amount.
|
|
73
73
|
//
|
|
74
74
|
// Another way of implementing this would have been to simply split the user
|
|
75
|
-
// reservation into primary and
|
|
75
|
+
// reservation into primary and secondary components. However, this would
|
|
76
76
|
// require allocating a structure to track the associated secondary cache
|
|
77
77
|
// reservation, which adds some complexity and overhead.
|
|
78
78
|
//
|
|
@@ -621,7 +621,7 @@ Status CacheWithSecondaryAdapter::UpdateCacheReservationRatio(
|
|
|
621
621
|
} else {
|
|
622
622
|
// We're shrinking the ratio. Try to avoid unnecessary evictions -
|
|
623
623
|
// 1. Lower the secondary cache capacity
|
|
624
|
-
// 2. Decrease pri_cache_res_ reservation to
|
|
624
|
+
// 2. Decrease pri_cache_res_ reservation to reflect lower secondary
|
|
625
625
|
// cache utilization (decrease in capacity - decrease in share of cache
|
|
626
626
|
// reservations)
|
|
627
627
|
// 3. Inflate the secondary cache to give it back the reduction in its
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
ccache.exe cl.exe %*
|
|
@@ -281,8 +281,9 @@ Compaction::Compaction(
|
|
|
281
281
|
std::vector<CompactionInputFiles> _inputs, int _output_level,
|
|
282
282
|
uint64_t _target_file_size, uint64_t _max_compaction_bytes,
|
|
283
283
|
uint32_t _output_path_id, CompressionType _compression,
|
|
284
|
-
CompressionOptions _compression_opts,
|
|
285
|
-
|
|
284
|
+
CompressionOptions _compression_opts,
|
|
285
|
+
Temperature _output_temperature_override, uint32_t _max_subcompactions,
|
|
286
|
+
std::vector<FileMetaData*> _grandparents,
|
|
286
287
|
std::optional<SequenceNumber> _earliest_snapshot,
|
|
287
288
|
const SnapshotChecker* _snapshot_checker,
|
|
288
289
|
CompactionReason _compaction_reason, const std::string& _trim_ts,
|
|
@@ -303,7 +304,7 @@ Compaction::Compaction(
|
|
|
303
304
|
output_path_id_(_output_path_id),
|
|
304
305
|
output_compression_(_compression),
|
|
305
306
|
output_compression_opts_(_compression_opts),
|
|
306
|
-
|
|
307
|
+
output_temperature_override_(_output_temperature_override),
|
|
307
308
|
deletion_compaction_(_compaction_reason == CompactionReason::kFIFOTtl ||
|
|
308
309
|
_compaction_reason ==
|
|
309
310
|
CompactionReason::kFIFOMaxSize),
|
|
@@ -1128,4 +1129,17 @@ void Compaction::FilterInputsForCompactionIterator() {
|
|
|
1128
1129
|
}
|
|
1129
1130
|
}
|
|
1130
1131
|
|
|
1132
|
+
Temperature Compaction::GetOutputTemperature(bool is_proximal_level) const {
|
|
1133
|
+
if (output_temperature_override_ != Temperature::kUnknown) {
|
|
1134
|
+
return output_temperature_override_;
|
|
1135
|
+
}
|
|
1136
|
+
|
|
1137
|
+
if (is_last_level() && !is_proximal_level &&
|
|
1138
|
+
mutable_cf_options_.last_level_temperature != Temperature::kUnknown) {
|
|
1139
|
+
return mutable_cf_options_.last_level_temperature;
|
|
1140
|
+
}
|
|
1141
|
+
|
|
1142
|
+
return mutable_cf_options_.default_write_temperature;
|
|
1143
|
+
}
|
|
1144
|
+
|
|
1131
1145
|
} // namespace ROCKSDB_NAMESPACE
|
|
@@ -90,7 +90,8 @@ class Compaction {
|
|
|
90
90
|
uint64_t target_file_size, uint64_t max_compaction_bytes,
|
|
91
91
|
uint32_t output_path_id, CompressionType compression,
|
|
92
92
|
CompressionOptions compression_opts,
|
|
93
|
-
Temperature
|
|
93
|
+
Temperature output_temperature_override,
|
|
94
|
+
uint32_t max_subcompactions,
|
|
94
95
|
std::vector<FileMetaData*> grandparents,
|
|
95
96
|
std::optional<SequenceNumber> earliest_snapshot,
|
|
96
97
|
const SnapshotChecker* snapshot_checker,
|
|
@@ -409,7 +410,11 @@ class Compaction {
|
|
|
409
410
|
|
|
410
411
|
uint64_t max_compaction_bytes() const { return max_compaction_bytes_; }
|
|
411
412
|
|
|
412
|
-
|
|
413
|
+
// Order of precedence for temperature:
|
|
414
|
+
// 1. Override temp if not kUnknown
|
|
415
|
+
// 2. Temperature of the last level files if applicable
|
|
416
|
+
// 3. Default write temperature
|
|
417
|
+
Temperature GetOutputTemperature(bool is_proximal_level = false) const;
|
|
413
418
|
|
|
414
419
|
uint32_t max_subcompactions() const { return max_subcompactions_; }
|
|
415
420
|
|
|
@@ -541,7 +546,7 @@ class Compaction {
|
|
|
541
546
|
const uint32_t output_path_id_;
|
|
542
547
|
CompressionType output_compression_;
|
|
543
548
|
CompressionOptions output_compression_opts_;
|
|
544
|
-
Temperature
|
|
549
|
+
Temperature output_temperature_override_;
|
|
545
550
|
// If true, then the compaction can be done by simply deleting input files.
|
|
546
551
|
const bool deletion_compaction_;
|
|
547
552
|
// should it split the output file using the compact cursor?
|
|
@@ -270,6 +270,16 @@ class CompactionIterator {
|
|
|
270
270
|
// true, unless `must_count_input_entries=true` was specified during iterator
|
|
271
271
|
// creation (which ensures the count is always accurate).
|
|
272
272
|
uint64_t NumInputEntryScanned() const { return input_.NumItered(); }
|
|
273
|
+
|
|
274
|
+
// Returns true if the current valid key was already scanned/counted during
|
|
275
|
+
// a lookahead operation in a previous iteration.
|
|
276
|
+
//
|
|
277
|
+
// REQUIRED: Valid() must be true
|
|
278
|
+
bool IsCurrentKeyAlreadyScanned() const {
|
|
279
|
+
assert(Valid());
|
|
280
|
+
return at_next_ || merge_out_iter_.Valid();
|
|
281
|
+
}
|
|
282
|
+
|
|
273
283
|
Status InputStatus() const { return input_.status(); }
|
|
274
284
|
|
|
275
285
|
bool IsDeleteRangeSentinelKey() const { return is_range_del_; }
|