@nxtedition/rocksdb 14.0.0 → 15.0.1
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 +23 -179
- package/index.js +15 -39
- package/package.json +1 -1
- package/prebuilds/linux-x64/@nxtedition+rocksdb.node +0 -0
package/binding.cc
CHANGED
|
@@ -2034,193 +2034,30 @@ NAPI_METHOD(updates_close) {
|
|
|
2034
2034
|
}
|
|
2035
2035
|
}
|
|
2036
2036
|
|
|
2037
|
-
NAPI_METHOD(
|
|
2038
|
-
NAPI_ARGV(
|
|
2037
|
+
NAPI_METHOD(db_compact_range_sync) {
|
|
2038
|
+
NAPI_ARGV(2);
|
|
2039
2039
|
|
|
2040
2040
|
Database* database;
|
|
2041
2041
|
NAPI_STATUS_THROWS(napi_get_value_external(env, argv[0], reinterpret_cast<void**>(&database)));
|
|
2042
2042
|
|
|
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);
|
|
2043
|
+
std::optional<std::string> start;
|
|
2044
|
+
std::optional<std::string> end;
|
|
2198
2045
|
|
|
2199
|
-
|
|
2046
|
+
NAPI_STATUS_THROWS(GetProperty(env, argv[1], "start", start));
|
|
2047
|
+
NAPI_STATUS_THROWS(GetProperty(env, argv[1], "end", end));
|
|
2200
2048
|
|
|
2201
|
-
|
|
2202
|
-
ColumnFamily column;
|
|
2203
|
-
column.handle = handles[n];
|
|
2204
|
-
column.descriptor = descriptors[n];
|
|
2205
|
-
database->columns[column.handle->GetID()] = column;
|
|
2206
|
-
}
|
|
2049
|
+
rocksdb::CompactRangeOptions options;
|
|
2207
2050
|
|
|
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
|
-
}
|
|
2051
|
+
auto begin = start ? std::make_unique<rocksdb::Slice>(*start) : nullptr;
|
|
2052
|
+
auto finish = end ? std::make_unique<rocksdb::Slice>(*end) : nullptr;
|
|
2214
2053
|
|
|
2215
|
-
|
|
2216
|
-
});
|
|
2217
|
-
}
|
|
2054
|
+
ROCKS_STATUS_THROWS_NAPI(database->db->CompactRange(options, begin.get(), finish.get()));
|
|
2218
2055
|
|
|
2219
2056
|
return 0;
|
|
2220
2057
|
}
|
|
2221
2058
|
|
|
2222
2059
|
NAPI_METHOD(db_compact_range) {
|
|
2223
|
-
NAPI_ARGV(
|
|
2060
|
+
NAPI_ARGV(3);
|
|
2224
2061
|
|
|
2225
2062
|
Database* database;
|
|
2226
2063
|
NAPI_STATUS_THROWS(napi_get_value_external(env, argv[0], reinterpret_cast<void**>(&database)));
|
|
@@ -2231,12 +2068,19 @@ NAPI_METHOD(db_compact_range) {
|
|
|
2231
2068
|
NAPI_STATUS_THROWS(GetProperty(env, argv[1], "start", start));
|
|
2232
2069
|
NAPI_STATUS_THROWS(GetProperty(env, argv[1], "end", end));
|
|
2233
2070
|
|
|
2234
|
-
|
|
2071
|
+
auto callback = argv[2];
|
|
2235
2072
|
|
|
2236
|
-
|
|
2237
|
-
|
|
2073
|
+
runAsync<std::nullptr_t>(
|
|
2074
|
+
"leveldown.compact_range", env, callback,
|
|
2075
|
+
[=](auto& state) {
|
|
2076
|
+
rocksdb::CompactRangeOptions options;
|
|
2238
2077
|
|
|
2239
|
-
|
|
2078
|
+
auto begin = start ? std::make_unique<rocksdb::Slice>(*start) : nullptr;
|
|
2079
|
+
auto finish = end ? std::make_unique<rocksdb::Slice>(*end) : nullptr;
|
|
2080
|
+
|
|
2081
|
+
return database->db->CompactRange(options, begin.get(), finish.get());
|
|
2082
|
+
},
|
|
2083
|
+
[](auto& state, auto env, auto& argv) { return napi_ok; });
|
|
2240
2084
|
|
|
2241
2085
|
return 0;
|
|
2242
2086
|
}
|
|
@@ -2254,7 +2098,7 @@ NAPI_INIT() {
|
|
|
2254
2098
|
NAPI_EXPORT_FUNCTION(db_get_property);
|
|
2255
2099
|
NAPI_EXPORT_FUNCTION(db_get_latest_sequence);
|
|
2256
2100
|
NAPI_EXPORT_FUNCTION(db_query);
|
|
2257
|
-
NAPI_EXPORT_FUNCTION(
|
|
2101
|
+
NAPI_EXPORT_FUNCTION(db_compact_range_sync);
|
|
2258
2102
|
NAPI_EXPORT_FUNCTION(db_compact_range);
|
|
2259
2103
|
|
|
2260
2104
|
NAPI_EXPORT_FUNCTION(iterator_init);
|
package/index.js
CHANGED
|
@@ -255,8 +255,16 @@ class RocksLevel extends AbstractLevel {
|
|
|
255
255
|
return binding.db_get_property(this[kContext], property)
|
|
256
256
|
}
|
|
257
257
|
|
|
258
|
-
|
|
259
|
-
|
|
258
|
+
query(options, callback) {
|
|
259
|
+
callback = fromCallback(callback, kPromise)
|
|
260
|
+
|
|
261
|
+
try {
|
|
262
|
+
process.nextTick(callback, null, this.querySync(options))
|
|
263
|
+
} catch (err) {
|
|
264
|
+
process.nextTick(callback, err)
|
|
265
|
+
}
|
|
266
|
+
|
|
267
|
+
return callback[kPromise]
|
|
260
268
|
}
|
|
261
269
|
|
|
262
270
|
querySync (options) {
|
|
@@ -294,50 +302,18 @@ class RocksLevel extends AbstractLevel {
|
|
|
294
302
|
}
|
|
295
303
|
}
|
|
296
304
|
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
callback = options
|
|
300
|
-
options = {}
|
|
301
|
-
}
|
|
302
|
-
const doOpen = () => {
|
|
303
|
-
let columns
|
|
304
|
-
try {
|
|
305
|
-
columns = binding.db_open_for_read_only(this[kContext], options, (err, columns) => {
|
|
306
|
-
if (err) {
|
|
307
|
-
callback?.(err)
|
|
308
|
-
} else {
|
|
309
|
-
this[kColumns] = columns
|
|
310
|
-
const procId = setInterval(() => {
|
|
311
|
-
if (this.status === 'opening') {
|
|
312
|
-
/**
|
|
313
|
-
* Wait until db opens
|
|
314
|
-
*/
|
|
315
|
-
} else {
|
|
316
|
-
clearInterval(procId)
|
|
317
|
-
callback?.(null)
|
|
318
|
-
}
|
|
319
|
-
}, 1)
|
|
320
|
-
}
|
|
321
|
-
})
|
|
322
|
-
} catch (err) {
|
|
323
|
-
callback?.(err)
|
|
324
|
-
}
|
|
325
|
-
if (columns) {
|
|
326
|
-
this[kColumns] = columns
|
|
327
|
-
callback?.(null)
|
|
328
|
-
}
|
|
329
|
-
}
|
|
330
|
-
doOpen()
|
|
331
|
-
}
|
|
305
|
+
compactRange (options = {}, callback) {
|
|
306
|
+
callback = fromCallback(callback, kPromise)
|
|
332
307
|
|
|
333
|
-
compactRange (options = {}) {
|
|
334
308
|
if (this.status !== 'open') {
|
|
335
309
|
throw new ModuleError('Database is not open', {
|
|
336
310
|
code: 'LEVEL_DATABASE_NOT_OPEN'
|
|
337
311
|
})
|
|
338
312
|
}
|
|
339
313
|
|
|
340
|
-
|
|
314
|
+
binding.db_compact_range(this[kContext], options, callback)
|
|
315
|
+
|
|
316
|
+
return callback[kPromise]
|
|
341
317
|
}
|
|
342
318
|
}
|
|
343
319
|
|
package/package.json
CHANGED
|
Binary file
|