@nxtedition/rocksdb 10.1.5 → 10.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 +5 -7
- package/deps/rocksdb/rocksdb/CMakeLists.txt +16 -5
- package/deps/rocksdb/rocksdb/Makefile +38 -15
- package/deps/rocksdb/rocksdb/TARGETS +10 -0
- package/deps/rocksdb/rocksdb/cache/cache_test.cc +58 -0
- package/deps/rocksdb/rocksdb/db/arena_wrapped_db_iter.cc +4 -4
- package/deps/rocksdb/rocksdb/db/arena_wrapped_db_iter.h +4 -2
- package/deps/rocksdb/rocksdb/db/builder.cc +2 -2
- package/deps/rocksdb/rocksdb/db/builder.h +1 -1
- package/deps/rocksdb/rocksdb/db/c.cc +205 -6
- package/deps/rocksdb/rocksdb/db/c_test.c +189 -1
- package/deps/rocksdb/rocksdb/db/column_family.cc +28 -0
- package/deps/rocksdb/rocksdb/db/column_family.h +17 -0
- package/deps/rocksdb/rocksdb/db/column_family_test.cc +234 -60
- package/deps/rocksdb/rocksdb/db/compaction/compaction.cc +8 -1
- package/deps/rocksdb/rocksdb/db/compaction/compaction.h +11 -9
- package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator.cc +4 -4
- package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator.h +2 -0
- package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator_test.cc +1 -0
- package/deps/rocksdb/rocksdb/db/compaction/compaction_job.cc +22 -25
- package/deps/rocksdb/rocksdb/db/compaction/compaction_job.h +2 -0
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_test.cc +112 -0
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_universal.cc +72 -21
- package/deps/rocksdb/rocksdb/db/compaction/compaction_service_job.cc +2 -0
- package/deps/rocksdb/rocksdb/db/compaction/tiered_compaction_test.cc +77 -0
- package/deps/rocksdb/rocksdb/db/convenience.cc +3 -0
- package/deps/rocksdb/rocksdb/db/db_block_cache_test.cc +269 -112
- package/deps/rocksdb/rocksdb/db/db_bloom_filter_test.cc +107 -43
- package/deps/rocksdb/rocksdb/db/db_filesnapshot.cc +93 -24
- package/deps/rocksdb/rocksdb/db/db_flush_test.cc +5 -5
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl.cc +157 -68
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl.h +56 -15
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_compaction_flush.cc +78 -105
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_files.cc +39 -9
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_follower.cc +1 -0
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_open.cc +21 -14
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_write.cc +107 -63
- package/deps/rocksdb/rocksdb/db/db_properties_test.cc +43 -2
- package/deps/rocksdb/rocksdb/db/db_range_del_test.cc +4 -0
- package/deps/rocksdb/rocksdb/db/db_rate_limiter_test.cc +6 -0
- package/deps/rocksdb/rocksdb/db/db_test.cc +10 -2
- package/deps/rocksdb/rocksdb/db/db_test2.cc +1 -1
- package/deps/rocksdb/rocksdb/db/db_test_util.cc +5 -0
- package/deps/rocksdb/rocksdb/db/db_test_util.h +7 -6
- package/deps/rocksdb/rocksdb/db/db_wal_test.cc +92 -2
- package/deps/rocksdb/rocksdb/db/error_handler.cc +34 -39
- package/deps/rocksdb/rocksdb/db/error_handler.h +3 -4
- package/deps/rocksdb/rocksdb/db/error_handler_fs_test.cc +8 -4
- package/deps/rocksdb/rocksdb/db/event_helpers.cc +6 -3
- package/deps/rocksdb/rocksdb/db/external_sst_file_ingestion_job.cc +71 -15
- package/deps/rocksdb/rocksdb/db/external_sst_file_ingestion_job.h +11 -0
- package/deps/rocksdb/rocksdb/db/external_sst_file_test.cc +383 -4
- package/deps/rocksdb/rocksdb/db/fault_injection_test.cc +88 -72
- package/deps/rocksdb/rocksdb/db/flush_job.cc +30 -3
- package/deps/rocksdb/rocksdb/db/flush_job.h +14 -0
- package/deps/rocksdb/rocksdb/db/internal_stats.cc +60 -1
- package/deps/rocksdb/rocksdb/db/internal_stats.h +20 -1
- package/deps/rocksdb/rocksdb/db/log_writer.cc +24 -0
- package/deps/rocksdb/rocksdb/db/log_writer.h +5 -0
- package/deps/rocksdb/rocksdb/db/memtable.cc +6 -4
- package/deps/rocksdb/rocksdb/db/memtable.h +10 -10
- package/deps/rocksdb/rocksdb/db/memtable_list.cc +4 -4
- package/deps/rocksdb/rocksdb/db/multi_cf_iterator_impl.h +10 -3
- package/deps/rocksdb/rocksdb/db/range_tombstone_fragmenter.h +8 -10
- package/deps/rocksdb/rocksdb/db/repair.cc +4 -3
- package/deps/rocksdb/rocksdb/db/seqno_to_time_mapping.cc +30 -0
- package/deps/rocksdb/rocksdb/db/seqno_to_time_mapping.h +9 -0
- package/deps/rocksdb/rocksdb/db/table_cache.cc +17 -2
- package/deps/rocksdb/rocksdb/db/table_cache.h +9 -1
- package/deps/rocksdb/rocksdb/db/table_properties_collector.h +9 -2
- package/deps/rocksdb/rocksdb/db/table_properties_collector_test.cc +3 -1
- package/deps/rocksdb/rocksdb/db/transaction_log_impl.cc +3 -3
- package/deps/rocksdb/rocksdb/db/transaction_log_impl.h +7 -7
- package/deps/rocksdb/rocksdb/db/version_edit.cc +0 -1
- package/deps/rocksdb/rocksdb/db/version_edit_handler.h +7 -6
- package/deps/rocksdb/rocksdb/db/version_set.cc +54 -31
- package/deps/rocksdb/rocksdb/db/version_set.h +14 -7
- package/deps/rocksdb/rocksdb/db/wal_manager.cc +37 -29
- package/deps/rocksdb/rocksdb/db/wal_manager.h +6 -5
- package/deps/rocksdb/rocksdb/db/wide/wide_columns_helper.cc +6 -0
- package/deps/rocksdb/rocksdb/db/write_batch.cc +54 -23
- package/deps/rocksdb/rocksdb/db/write_callback_test.cc +46 -5
- package/deps/rocksdb/rocksdb/db/write_thread.cc +53 -5
- package/deps/rocksdb/rocksdb/db/write_thread.h +36 -4
- package/deps/rocksdb/rocksdb/db_stress_tool/CMakeLists.txt +1 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/batched_ops_stress.cc +5 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/cf_consistency_stress.cc +57 -17
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_common.cc +11 -3
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_common.h +8 -4
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_driver.cc +10 -25
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_env_wrapper.h +25 -88
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_filters.cc +93 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_filters.h +16 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_gflags.cc +43 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_listener.h +109 -21
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_shared_state.h +8 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.cc +666 -205
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.h +55 -10
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_tool.cc +18 -16
- package/deps/rocksdb/rocksdb/db_stress_tool/multi_ops_txns_stress.cc +19 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/multi_ops_txns_stress.h +5 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/no_batched_ops_stress.cc +782 -494
- package/deps/rocksdb/rocksdb/env/composite_env_wrapper.h +21 -0
- package/deps/rocksdb/rocksdb/env/env.cc +6 -0
- package/deps/rocksdb/rocksdb/env/io_posix.cc +0 -1
- package/deps/rocksdb/rocksdb/file/file_util.cc +8 -2
- package/deps/rocksdb/rocksdb/file/prefetch_test.cc +34 -19
- package/deps/rocksdb/rocksdb/file/writable_file_writer.cc +29 -32
- package/deps/rocksdb/rocksdb/file/writable_file_writer.h +41 -15
- package/deps/rocksdb/rocksdb/include/rocksdb/advanced_options.h +4 -2
- package/deps/rocksdb/rocksdb/include/rocksdb/c.h +63 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/db.h +16 -5
- package/deps/rocksdb/rocksdb/include/rocksdb/env.h +5 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/iterator.h +0 -16
- package/deps/rocksdb/rocksdb/include/rocksdb/iterator_base.h +16 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/listener.h +21 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/options.h +76 -3
- package/deps/rocksdb/rocksdb/include/rocksdb/table_properties.h +17 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/transaction_log.h +12 -6
- package/deps/rocksdb/rocksdb/include/rocksdb/universal_compaction.h +31 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/user_write_callback.h +29 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/checkpoint.h +4 -2
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/customizable_util.h +0 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/ldb_cmd.h +17 -8
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/stackable_db.h +2 -2
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/table_properties_collectors.h +46 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/transaction.h +7 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/version.h +2 -2
- package/deps/rocksdb/rocksdb/options/cf_options.cc +13 -2
- package/deps/rocksdb/rocksdb/options/cf_options.h +6 -2
- package/deps/rocksdb/rocksdb/options/db_options.cc +8 -0
- package/deps/rocksdb/rocksdb/options/db_options.h +9 -5
- package/deps/rocksdb/rocksdb/options/options.cc +3 -0
- package/deps/rocksdb/rocksdb/options/options_helper.cc +1 -0
- package/deps/rocksdb/rocksdb/options/options_settable_test.cc +3 -1
- package/deps/rocksdb/rocksdb/port/jemalloc_helper.h +2 -2
- package/deps/rocksdb/rocksdb/port/stack_trace.cc +1 -0
- package/deps/rocksdb/rocksdb/port/win/port_win.cc +3 -2
- package/deps/rocksdb/rocksdb/src.mk +4 -0
- package/deps/rocksdb/rocksdb/table/block_based/binary_search_index_reader.cc +1 -2
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_builder.cc +4 -2
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_iterator.cc +15 -0
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.cc +102 -41
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.h +15 -7
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_impl.h +1 -3
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_sync_and_async.h +5 -6
- package/deps/rocksdb/rocksdb/table/block_based/block_cache.h +31 -0
- package/deps/rocksdb/rocksdb/table/block_based/block_prefetcher.cc +6 -0
- package/deps/rocksdb/rocksdb/table/block_based/cachable_entry.h +10 -5
- package/deps/rocksdb/rocksdb/table/block_based/filter_block.h +11 -15
- package/deps/rocksdb/rocksdb/table/block_based/filter_block_reader_common.cc +17 -11
- package/deps/rocksdb/rocksdb/table/block_based/filter_block_reader_common.h +5 -2
- package/deps/rocksdb/rocksdb/table/block_based/full_filter_block.cc +28 -21
- package/deps/rocksdb/rocksdb/table/block_based/full_filter_block.h +9 -11
- package/deps/rocksdb/rocksdb/table/block_based/full_filter_block_test.cc +16 -16
- package/deps/rocksdb/rocksdb/table/block_based/hash_index_reader.cc +1 -2
- package/deps/rocksdb/rocksdb/table/block_based/index_reader_common.cc +14 -9
- package/deps/rocksdb/rocksdb/table/block_based/index_reader_common.h +4 -1
- package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block.cc +82 -41
- package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block.h +13 -14
- package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block_test.cc +18 -22
- package/deps/rocksdb/rocksdb/table/block_based/partitioned_index_reader.cc +51 -13
- package/deps/rocksdb/rocksdb/table/block_based/partitioned_index_reader.h +2 -0
- package/deps/rocksdb/rocksdb/table/block_based/uncompression_dict_reader.cc +3 -11
- package/deps/rocksdb/rocksdb/table/block_based/uncompression_dict_reader.h +2 -3
- package/deps/rocksdb/rocksdb/table/compaction_merging_iterator.cc +9 -10
- package/deps/rocksdb/rocksdb/table/compaction_merging_iterator.h +3 -2
- package/deps/rocksdb/rocksdb/table/format.cc +1 -2
- package/deps/rocksdb/rocksdb/table/merging_iterator.cc +18 -13
- package/deps/rocksdb/rocksdb/table/merging_iterator.h +5 -3
- package/deps/rocksdb/rocksdb/table/plain/plain_table_builder.cc +2 -2
- package/deps/rocksdb/rocksdb/table/sst_file_reader.cc +1 -1
- package/deps/rocksdb/rocksdb/table/sst_file_writer_collectors.h +3 -1
- package/deps/rocksdb/rocksdb/table/table_builder.h +8 -7
- package/deps/rocksdb/rocksdb/table/table_reader.h +9 -0
- package/deps/rocksdb/rocksdb/test_util/testutil.cc +1 -0
- package/deps/rocksdb/rocksdb/test_util/testutil.h +6 -0
- package/deps/rocksdb/rocksdb/tools/db_bench_tool.cc +19 -0
- package/deps/rocksdb/rocksdb/tools/ldb_cmd.cc +434 -110
- package/deps/rocksdb/rocksdb/tools/ldb_cmd_impl.h +3 -1
- package/deps/rocksdb/rocksdb/tools/ldb_tool.cc +3 -0
- package/deps/rocksdb/rocksdb/util/aligned_storage.h +24 -0
- package/deps/rocksdb/rocksdb/util/filter_bench.cc +1 -1
- package/deps/rocksdb/rocksdb/util/random.cc +2 -1
- package/deps/rocksdb/rocksdb/util/stderr_logger.h +1 -1
- package/deps/rocksdb/rocksdb/util/udt_util.cc +33 -0
- package/deps/rocksdb/rocksdb/util/udt_util.h +7 -0
- package/deps/rocksdb/rocksdb/util/udt_util_test.cc +33 -0
- package/deps/rocksdb/rocksdb/util/write_batch_util.h +5 -0
- package/deps/rocksdb/rocksdb/util/xxhash.h +10 -3
- package/deps/rocksdb/rocksdb/utilities/backup/backup_engine_test.cc +13 -13
- package/deps/rocksdb/rocksdb/utilities/checkpoint/checkpoint_test.cc +104 -48
- package/deps/rocksdb/rocksdb/utilities/debug.cc +16 -4
- package/deps/rocksdb/rocksdb/utilities/fault_injection_fs.cc +647 -235
- package/deps/rocksdb/rocksdb/utilities/fault_injection_fs.h +274 -157
- package/deps/rocksdb/rocksdb/utilities/table_properties_collectors/compact_for_tiering_collector.cc +144 -0
- package/deps/rocksdb/rocksdb/utilities/table_properties_collectors/compact_for_tiering_collector.h +45 -0
- package/deps/rocksdb/rocksdb/utilities/table_properties_collectors/compact_for_tiering_collector_test.cc +139 -0
- package/deps/rocksdb/rocksdb/utilities/table_properties_collectors/compact_on_deletion_collector.cc +12 -0
- package/deps/rocksdb/rocksdb/utilities/table_properties_collectors/compact_on_deletion_collector_test.cc +3 -0
- package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction_test.cc +105 -6
- package/deps/rocksdb/rocksdb/utilities/transactions/pessimistic_transaction.cc +64 -8
- package/deps/rocksdb/rocksdb/utilities/transactions/pessimistic_transaction.h +5 -0
- package/deps/rocksdb/rocksdb/utilities/transactions/transaction_base.cc +43 -5
- package/deps/rocksdb/rocksdb/utilities/transactions/transaction_base.h +5 -0
- package/deps/rocksdb/rocksdb/utilities/transactions/transaction_test.cc +154 -6
- package/deps/rocksdb/rocksdb/utilities/transactions/transaction_test.h +1 -1
- package/deps/rocksdb/rocksdb/utilities/transactions/write_committed_transaction_ts_test.cc +158 -2
- package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn.cc +16 -11
- package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn_db.cc +4 -4
- package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_txn.cc +9 -8
- package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_txn_db.cc +2 -1
- package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index.cc +43 -7
- package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_internal.cc +2 -0
- package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_internal.h +1 -1
- package/package.json +1 -1
- package/prebuilds/darwin-arm64/@nxtedition+rocksdb.node +0 -0
- package/.tap/test-results/node_modules/abstract-level/test/chained-batch-test.js.tap +0 -0
- package/.tap/test-results/node_modules/abstract-level/test/get-test.js.tap +0 -0
- package/.tap/test-results/test/abstract-level-test.js.tap +0 -1077
- package/.tap/test-results/test/batch-test.js.tap +0 -12
- package/.tap/test-results/test/chained-batch-gc-test.js.tap +0 -11
- package/.tap/test-results/test/cleanup-hanging-iterators-test.js.tap +0 -135
- package/.tap/test-results/test/clear-gc-test.js.tap +0 -13
- package/.tap/test-results/test/column-test.js.tap +0 -55
- package/.tap/test-results/test/common.js.tap +0 -0
- package/.tap/test-results/test/compression-test.js.tap +0 -30
- package/.tap/test-results/test/db-identity.js.tap +0 -12
- package/.tap/test-results/test/electron.js.tap +0 -0
- package/.tap/test-results/test/env-cleanup-hook-test.js.tap +0 -40
- package/.tap/test-results/test/env-cleanup-hook.js.tap +0 -0
- package/.tap/test-results/test/gc.js.tap +0 -0
- package/.tap/test-results/test/getproperty-test.js.tap +0 -29
- package/.tap/test-results/test/iterator-gc-test.js.tap +0 -15
- package/.tap/test-results/test/iterator-hwm-test.js.tap +0 -131
- package/.tap/test-results/test/iterator-recursion-test.js.tap +0 -12
- package/.tap/test-results/test/iterator-starvation-test.js.tap +0 -73
- package/.tap/test-results/test/iterator-test.js.tap +0 -6
- package/.tap/test-results/test/leak-tester-batch.js.tap +0 -0
- package/.tap/test-results/test/leak-tester-iterator.js.tap +0 -0
- package/.tap/test-results/test/leak-tester.js.tap +0 -0
- package/.tap/test-results/test/lock-test.js.tap +0 -18
- package/.tap/test-results/test/lock.js.tap +0 -0
- package/.tap/test-results/test/make.js.tap +0 -0
- package/.tap/test-results/test/max-rev-merge.js.tap +0 -0
- package/.tap/test-results/test/merge-operator-test.js.tap +0 -12
- package/.tap/test-results/test/mkdir-test.js.tap +0 -15
- package/.tap/test-results/test/segfault-test.js.tap +0 -76
- package/.tap/test-results/test/stack-blower.js.tap +0 -0
- package/deps/rocksdb/rocksdb/README.md +0 -29
- package/deps/rocksdb/rocksdb/microbench/README.md +0 -60
- package/deps/rocksdb/rocksdb/plugin/README.md +0 -43
- package/deps/rocksdb/rocksdb/port/README +0 -10
- package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/README +0 -13
|
@@ -231,6 +231,7 @@ struct rocksdb_livefiles_t {
|
|
|
231
231
|
};
|
|
232
232
|
struct rocksdb_column_family_handle_t {
|
|
233
233
|
ColumnFamilyHandle* rep;
|
|
234
|
+
bool immortal; /* only true for default cf */
|
|
234
235
|
};
|
|
235
236
|
struct rocksdb_column_family_metadata_t {
|
|
236
237
|
ColumnFamilyMetaData rep;
|
|
@@ -531,6 +532,42 @@ struct rocksdb_universal_compaction_options_t {
|
|
|
531
532
|
ROCKSDB_NAMESPACE::CompactionOptionsUniversal* rep;
|
|
532
533
|
};
|
|
533
534
|
|
|
535
|
+
struct rocksdb_callback_logger_t : public Logger {
|
|
536
|
+
static const ssize_t STACK_BUFSZ = 512;
|
|
537
|
+
rocksdb_callback_logger_t(InfoLogLevel log_level,
|
|
538
|
+
void (*logv_cb)(void*, unsigned, char*, size_t),
|
|
539
|
+
void* priv)
|
|
540
|
+
: Logger(log_level), logv_cb_(logv_cb), priv_(priv) {}
|
|
541
|
+
|
|
542
|
+
using Logger::Logv;
|
|
543
|
+
void Logv(const InfoLogLevel level, const char* fmt, va_list ap0) override {
|
|
544
|
+
char stack_buf[STACK_BUFSZ];
|
|
545
|
+
char* alloc_buf = nullptr;
|
|
546
|
+
char* buf = stack_buf;
|
|
547
|
+
int len = 0;
|
|
548
|
+
va_list ap1;
|
|
549
|
+
if (!logv_cb_) return;
|
|
550
|
+
va_copy(ap1, ap0);
|
|
551
|
+
len = vsnprintf(buf, STACK_BUFSZ, fmt, ap0);
|
|
552
|
+
if (len <= 0)
|
|
553
|
+
goto cleanup;
|
|
554
|
+
else if (len >= STACK_BUFSZ) {
|
|
555
|
+
buf = alloc_buf = reinterpret_cast<char*>(malloc(len + 1));
|
|
556
|
+
if (!buf) goto cleanup;
|
|
557
|
+
len = vsnprintf(buf, len + 1, fmt, ap1);
|
|
558
|
+
if (len <= 0) goto cleanup;
|
|
559
|
+
}
|
|
560
|
+
logv_cb_(priv_, unsigned(level), buf, size_t(len));
|
|
561
|
+
cleanup:
|
|
562
|
+
va_end(ap1);
|
|
563
|
+
free(alloc_buf);
|
|
564
|
+
}
|
|
565
|
+
|
|
566
|
+
private:
|
|
567
|
+
void (*logv_cb_)(void*, unsigned, char*, size_t) = nullptr;
|
|
568
|
+
void* priv_ = nullptr;
|
|
569
|
+
};
|
|
570
|
+
|
|
534
571
|
static bool SaveError(char** errptr, const Status& s) {
|
|
535
572
|
assert(errptr != nullptr);
|
|
536
573
|
if (s.ok()) {
|
|
@@ -546,6 +583,7 @@ static bool SaveError(char** errptr, const Status& s) {
|
|
|
546
583
|
return true;
|
|
547
584
|
}
|
|
548
585
|
|
|
586
|
+
// Copies str to a new malloc()-ed buffer. The buffer is not NUL terminated.
|
|
549
587
|
static char* CopyString(const std::string& str) {
|
|
550
588
|
char* result = reinterpret_cast<char*>(malloc(sizeof(char) * str.size()));
|
|
551
589
|
memcpy(result, str.data(), sizeof(char) * str.size());
|
|
@@ -906,6 +944,7 @@ rocksdb_t* rocksdb_open_and_trim_history(
|
|
|
906
944
|
rocksdb_column_family_handle_t* c_handle =
|
|
907
945
|
new rocksdb_column_family_handle_t;
|
|
908
946
|
c_handle->rep = handles[i];
|
|
947
|
+
c_handle->immortal = false;
|
|
909
948
|
column_family_handles[i] = c_handle;
|
|
910
949
|
}
|
|
911
950
|
rocksdb_t* result = new rocksdb_t;
|
|
@@ -936,6 +975,7 @@ rocksdb_t* rocksdb_open_column_families(
|
|
|
936
975
|
rocksdb_column_family_handle_t* c_handle =
|
|
937
976
|
new rocksdb_column_family_handle_t;
|
|
938
977
|
c_handle->rep = handles[i];
|
|
978
|
+
c_handle->immortal = false;
|
|
939
979
|
column_family_handles[i] = c_handle;
|
|
940
980
|
}
|
|
941
981
|
rocksdb_t* result = new rocksdb_t;
|
|
@@ -971,6 +1011,7 @@ rocksdb_t* rocksdb_open_column_families_with_ttl(
|
|
|
971
1011
|
rocksdb_column_family_handle_t* c_handle =
|
|
972
1012
|
new rocksdb_column_family_handle_t;
|
|
973
1013
|
c_handle->rep = handles[i];
|
|
1014
|
+
c_handle->immortal = false;
|
|
974
1015
|
column_family_handles[i] = c_handle;
|
|
975
1016
|
}
|
|
976
1017
|
rocksdb_t* result = new rocksdb_t;
|
|
@@ -1004,6 +1045,7 @@ rocksdb_t* rocksdb_open_for_read_only_column_families(
|
|
|
1004
1045
|
rocksdb_column_family_handle_t* c_handle =
|
|
1005
1046
|
new rocksdb_column_family_handle_t;
|
|
1006
1047
|
c_handle->rep = handles[i];
|
|
1048
|
+
c_handle->immortal = false;
|
|
1007
1049
|
column_family_handles[i] = c_handle;
|
|
1008
1050
|
}
|
|
1009
1051
|
rocksdb_t* result = new rocksdb_t;
|
|
@@ -1035,6 +1077,7 @@ rocksdb_t* rocksdb_open_as_secondary_column_families(
|
|
|
1035
1077
|
rocksdb_column_family_handle_t* c_handle =
|
|
1036
1078
|
new rocksdb_column_family_handle_t;
|
|
1037
1079
|
c_handle->rep = handles[i];
|
|
1080
|
+
c_handle->immortal = false;
|
|
1038
1081
|
column_family_handles[i] = c_handle;
|
|
1039
1082
|
}
|
|
1040
1083
|
rocksdb_t* result = new rocksdb_t;
|
|
@@ -1072,6 +1115,7 @@ rocksdb_column_family_handle_t* rocksdb_create_column_family(
|
|
|
1072
1115
|
SaveError(errptr, db->rep->CreateColumnFamily(
|
|
1073
1116
|
ColumnFamilyOptions(column_family_options->rep),
|
|
1074
1117
|
std::string(column_family_name), &(handle->rep)));
|
|
1118
|
+
handle->immortal = false;
|
|
1075
1119
|
return handle;
|
|
1076
1120
|
}
|
|
1077
1121
|
|
|
@@ -1095,6 +1139,7 @@ rocksdb_column_family_handle_t** rocksdb_create_column_families(
|
|
|
1095
1139
|
for (size_t i = 0; i != handles.size(); ++i) {
|
|
1096
1140
|
c_handles[i] = new rocksdb_column_family_handle_t;
|
|
1097
1141
|
c_handles[i]->rep = handles[i];
|
|
1142
|
+
c_handles[i]->immortal = false;
|
|
1098
1143
|
}
|
|
1099
1144
|
|
|
1100
1145
|
return c_handles;
|
|
@@ -1114,6 +1159,7 @@ rocksdb_column_family_handle_t* rocksdb_create_column_family_with_ttl(
|
|
|
1114
1159
|
SaveError(errptr, db_with_ttl->CreateColumnFamilyWithTtl(
|
|
1115
1160
|
ColumnFamilyOptions(column_family_options->rep),
|
|
1116
1161
|
std::string(column_family_name), &(handle->rep), ttl));
|
|
1162
|
+
handle->immortal = false;
|
|
1117
1163
|
return handle;
|
|
1118
1164
|
}
|
|
1119
1165
|
|
|
@@ -1135,9 +1181,19 @@ char* rocksdb_column_family_handle_get_name(
|
|
|
1135
1181
|
return CopyString(name);
|
|
1136
1182
|
}
|
|
1137
1183
|
|
|
1184
|
+
rocksdb_column_family_handle_t* rocksdb_get_default_column_family_handle(
|
|
1185
|
+
rocksdb_t* db) {
|
|
1186
|
+
rocksdb_column_family_handle_t* handle = new rocksdb_column_family_handle_t;
|
|
1187
|
+
handle->rep = db->rep->DefaultColumnFamily();
|
|
1188
|
+
handle->immortal = true;
|
|
1189
|
+
return handle;
|
|
1190
|
+
}
|
|
1191
|
+
|
|
1138
1192
|
void rocksdb_column_family_handle_destroy(
|
|
1139
1193
|
rocksdb_column_family_handle_t* handle) {
|
|
1140
|
-
|
|
1194
|
+
if (!handle->immortal) {
|
|
1195
|
+
delete handle->rep;
|
|
1196
|
+
}
|
|
1141
1197
|
delete handle;
|
|
1142
1198
|
}
|
|
1143
1199
|
|
|
@@ -1373,6 +1429,18 @@ char* rocksdb_get_cf_with_ts(rocksdb_t* db,
|
|
|
1373
1429
|
return result;
|
|
1374
1430
|
}
|
|
1375
1431
|
|
|
1432
|
+
char* rocksdb_get_db_identity(rocksdb_t* db, size_t* id_len) {
|
|
1433
|
+
std::string identity_tmp;
|
|
1434
|
+
Status s = db->rep->GetDbIdentity(identity_tmp);
|
|
1435
|
+
if (!s.ok()) {
|
|
1436
|
+
*id_len = 0;
|
|
1437
|
+
return nullptr;
|
|
1438
|
+
}
|
|
1439
|
+
|
|
1440
|
+
*id_len = identity_tmp.size();
|
|
1441
|
+
return CopyString(identity_tmp);
|
|
1442
|
+
}
|
|
1443
|
+
|
|
1376
1444
|
void rocksdb_multi_get(rocksdb_t* db, const rocksdb_readoptions_t* options,
|
|
1377
1445
|
size_t num_keys, const char* const* keys_list,
|
|
1378
1446
|
const size_t* keys_list_sizes, char** values_list,
|
|
@@ -1770,6 +1838,26 @@ void rocksdb_approximate_sizes_cf(
|
|
|
1770
1838
|
delete[] ranges;
|
|
1771
1839
|
}
|
|
1772
1840
|
|
|
1841
|
+
extern ROCKSDB_LIBRARY_API void rocksdb_approximate_sizes_cf_with_flags(
|
|
1842
|
+
rocksdb_t* db, rocksdb_column_family_handle_t* column_family,
|
|
1843
|
+
int num_ranges, const char* const* range_start_key,
|
|
1844
|
+
const size_t* range_start_key_len, const char* const* range_limit_key,
|
|
1845
|
+
const size_t* range_limit_key_len, uint8_t include_flags, uint64_t* sizes,
|
|
1846
|
+
char** errptr) {
|
|
1847
|
+
Range* ranges = new Range[num_ranges];
|
|
1848
|
+
for (int i = 0; i < num_ranges; i++) {
|
|
1849
|
+
ranges[i].start = Slice(range_start_key[i], range_start_key_len[i]);
|
|
1850
|
+
ranges[i].limit = Slice(range_limit_key[i], range_limit_key_len[i]);
|
|
1851
|
+
}
|
|
1852
|
+
Status s = db->rep->GetApproximateSizes(
|
|
1853
|
+
column_family->rep, ranges, num_ranges, sizes,
|
|
1854
|
+
static_cast<DB::SizeApproximationFlags>(include_flags));
|
|
1855
|
+
if (!s.ok()) {
|
|
1856
|
+
SaveError(errptr, s);
|
|
1857
|
+
}
|
|
1858
|
+
delete[] ranges;
|
|
1859
|
+
}
|
|
1860
|
+
|
|
1773
1861
|
void rocksdb_delete_file(rocksdb_t* db, const char* name) {
|
|
1774
1862
|
db->rep->DeleteFile(name);
|
|
1775
1863
|
}
|
|
@@ -1947,6 +2035,10 @@ void rocksdb_iter_get_error(const rocksdb_iterator_t* iter, char** errptr) {
|
|
|
1947
2035
|
SaveError(errptr, iter->rep->status());
|
|
1948
2036
|
}
|
|
1949
2037
|
|
|
2038
|
+
void rocksdb_iter_refresh(const rocksdb_iterator_t* iter, char** errptr) {
|
|
2039
|
+
SaveError(errptr, iter->rep->Refresh());
|
|
2040
|
+
}
|
|
2041
|
+
|
|
1950
2042
|
rocksdb_writebatch_t* rocksdb_writebatch_create() {
|
|
1951
2043
|
return new rocksdb_writebatch_t;
|
|
1952
2044
|
}
|
|
@@ -1958,6 +2050,15 @@ rocksdb_writebatch_t* rocksdb_writebatch_create_from(const char* rep,
|
|
|
1958
2050
|
return b;
|
|
1959
2051
|
}
|
|
1960
2052
|
|
|
2053
|
+
rocksdb_writebatch_t* rocksdb_writebatch_create_with_params(
|
|
2054
|
+
size_t reserved_bytes, size_t max_bytes, size_t protection_bytes_per_key,
|
|
2055
|
+
size_t default_cf_ts_sz) {
|
|
2056
|
+
rocksdb_writebatch_t* b = new rocksdb_writebatch_t;
|
|
2057
|
+
b->rep = WriteBatch(reserved_bytes, max_bytes, protection_bytes_per_key,
|
|
2058
|
+
default_cf_ts_sz);
|
|
2059
|
+
return b;
|
|
2060
|
+
}
|
|
2061
|
+
|
|
1961
2062
|
void rocksdb_writebatch_destroy(rocksdb_writebatch_t* b) { delete b; }
|
|
1962
2063
|
|
|
1963
2064
|
void rocksdb_writebatch_clear(rocksdb_writebatch_t* b) { b->rep.Clear(); }
|
|
@@ -2185,6 +2286,32 @@ class H : public WriteBatch::Handler {
|
|
|
2185
2286
|
}
|
|
2186
2287
|
};
|
|
2187
2288
|
|
|
2289
|
+
class HCF : public WriteBatch::Handler {
|
|
2290
|
+
public:
|
|
2291
|
+
void* state_;
|
|
2292
|
+
void (*put_cf_)(void*, uint32_t cfid, const char* k, size_t klen,
|
|
2293
|
+
const char* v, size_t vlen);
|
|
2294
|
+
void (*deleted_cf_)(void*, uint32_t cfid, const char* k, size_t klen);
|
|
2295
|
+
void (*merge_cf_)(void*, uint32_t cfid, const char* k, size_t klen,
|
|
2296
|
+
const char* v, size_t vlen);
|
|
2297
|
+
Status PutCF(uint32_t column_family_id, const Slice& key,
|
|
2298
|
+
const Slice& value) override {
|
|
2299
|
+
(*put_cf_)(state_, column_family_id, key.data(), key.size(), value.data(),
|
|
2300
|
+
value.size());
|
|
2301
|
+
return Status::OK();
|
|
2302
|
+
}
|
|
2303
|
+
Status DeleteCF(uint32_t column_family_id, const Slice& key) override {
|
|
2304
|
+
(*deleted_cf_)(state_, column_family_id, key.data(), key.size());
|
|
2305
|
+
return Status::OK();
|
|
2306
|
+
}
|
|
2307
|
+
Status MergeCF(uint32_t column_family_id, const Slice& key,
|
|
2308
|
+
const Slice& value) override {
|
|
2309
|
+
(*merge_cf_)(state_, column_family_id, key.data(), key.size(), value.data(),
|
|
2310
|
+
value.size());
|
|
2311
|
+
return Status::OK();
|
|
2312
|
+
}
|
|
2313
|
+
};
|
|
2314
|
+
|
|
2188
2315
|
void rocksdb_writebatch_iterate(rocksdb_writebatch_t* b, void* state,
|
|
2189
2316
|
void (*put)(void*, const char* k, size_t klen,
|
|
2190
2317
|
const char* v, size_t vlen),
|
|
@@ -2197,6 +2324,21 @@ void rocksdb_writebatch_iterate(rocksdb_writebatch_t* b, void* state,
|
|
|
2197
2324
|
b->rep.Iterate(&handler);
|
|
2198
2325
|
}
|
|
2199
2326
|
|
|
2327
|
+
void rocksdb_writebatch_iterate_cf(
|
|
2328
|
+
rocksdb_writebatch_t* b, void* state,
|
|
2329
|
+
void (*put_cf)(void*, uint32_t cfid, const char* k, size_t klen,
|
|
2330
|
+
const char* v, size_t vlen),
|
|
2331
|
+
void (*deleted_cf)(void*, uint32_t cfid, const char* k, size_t klen),
|
|
2332
|
+
void (*merge_cf)(void*, uint32_t cfid, const char* k, size_t klen,
|
|
2333
|
+
const char* v, size_t vlen)) {
|
|
2334
|
+
HCF handler;
|
|
2335
|
+
handler.state_ = state;
|
|
2336
|
+
handler.put_cf_ = put_cf;
|
|
2337
|
+
handler.deleted_cf_ = deleted_cf;
|
|
2338
|
+
handler.merge_cf_ = merge_cf;
|
|
2339
|
+
b->rep.Iterate(&handler);
|
|
2340
|
+
}
|
|
2341
|
+
|
|
2200
2342
|
const char* rocksdb_writebatch_data(rocksdb_writebatch_t* b, size_t* size) {
|
|
2201
2343
|
*size = b->rep.GetDataSize();
|
|
2202
2344
|
return b->rep.Data().c_str();
|
|
@@ -2223,6 +2365,35 @@ rocksdb_writebatch_wi_t* rocksdb_writebatch_wi_create(
|
|
|
2223
2365
|
return b;
|
|
2224
2366
|
}
|
|
2225
2367
|
|
|
2368
|
+
rocksdb_writebatch_wi_t* rocksdb_writebatch_wi_create_with_params(
|
|
2369
|
+
rocksdb_comparator_t* backup_index_comparator, size_t reserved_bytes,
|
|
2370
|
+
unsigned char overwrite_key, size_t max_bytes,
|
|
2371
|
+
size_t protection_bytes_per_key) {
|
|
2372
|
+
rocksdb_writebatch_wi_t* b = new rocksdb_writebatch_wi_t;
|
|
2373
|
+
b->rep = new WriteBatchWithIndex(backup_index_comparator, reserved_bytes,
|
|
2374
|
+
overwrite_key, max_bytes,
|
|
2375
|
+
protection_bytes_per_key);
|
|
2376
|
+
return b;
|
|
2377
|
+
}
|
|
2378
|
+
|
|
2379
|
+
void rocksdb_writebatch_update_timestamps(
|
|
2380
|
+
rocksdb_writebatch_t* wb, const char* ts, size_t tslen, void* state,
|
|
2381
|
+
size_t (*get_ts_size)(void*, uint32_t), char** errptr) {
|
|
2382
|
+
SaveError(errptr, wb->rep.UpdateTimestamps(
|
|
2383
|
+
Slice(ts, tslen), [&get_ts_size, &state](uint32_t cf) {
|
|
2384
|
+
return (*get_ts_size)(state, cf);
|
|
2385
|
+
}));
|
|
2386
|
+
}
|
|
2387
|
+
|
|
2388
|
+
void rocksdb_writebatch_wi_update_timestamps(
|
|
2389
|
+
rocksdb_writebatch_wi_t* wb, const char* ts, size_t tslen, void* state,
|
|
2390
|
+
size_t (*get_ts_size)(void*, uint32_t), char** errptr) {
|
|
2391
|
+
SaveError(errptr, wb->rep->GetWriteBatch()->UpdateTimestamps(
|
|
2392
|
+
Slice(ts, tslen), [&get_ts_size, &state](uint32_t cf) {
|
|
2393
|
+
return (*get_ts_size)(state, cf);
|
|
2394
|
+
}));
|
|
2395
|
+
}
|
|
2396
|
+
|
|
2226
2397
|
void rocksdb_writebatch_wi_destroy(rocksdb_writebatch_wi_t* b) {
|
|
2227
2398
|
if (b->rep) {
|
|
2228
2399
|
delete b->rep;
|
|
@@ -2963,6 +3134,15 @@ rocksdb_logger_t* rocksdb_logger_create_stderr_logger(int log_level,
|
|
|
2963
3134
|
return logger;
|
|
2964
3135
|
}
|
|
2965
3136
|
|
|
3137
|
+
rocksdb_logger_t* rocksdb_logger_create_callback_logger(
|
|
3138
|
+
int log_level, void (*callback)(void*, unsigned, char*, size_t),
|
|
3139
|
+
void* priv) {
|
|
3140
|
+
rocksdb_logger_t* logger = new rocksdb_logger_t;
|
|
3141
|
+
logger->rep = std::make_shared<rocksdb_callback_logger_t>(
|
|
3142
|
+
static_cast<InfoLogLevel>(log_level), callback, priv);
|
|
3143
|
+
return logger;
|
|
3144
|
+
}
|
|
3145
|
+
|
|
2966
3146
|
void rocksdb_logger_destroy(rocksdb_logger_t* logger) { delete logger; }
|
|
2967
3147
|
|
|
2968
3148
|
void rocksdb_options_set_env(rocksdb_options_t* opt, rocksdb_env_t* env) {
|
|
@@ -3885,6 +4065,27 @@ void rocksdb_options_set_plain_table_factory(
|
|
|
3885
4065
|
opt->rep.table_factory.reset(factory);
|
|
3886
4066
|
}
|
|
3887
4067
|
|
|
4068
|
+
unsigned char rocksdb_options_get_write_dbid_to_manifest(
|
|
4069
|
+
rocksdb_options_t* opt) {
|
|
4070
|
+
return opt->rep.write_dbid_to_manifest;
|
|
4071
|
+
}
|
|
4072
|
+
|
|
4073
|
+
void rocksdb_options_set_write_dbid_to_manifest(
|
|
4074
|
+
rocksdb_options_t* opt, unsigned char write_dbid_to_manifest) {
|
|
4075
|
+
opt->rep.write_dbid_to_manifest = write_dbid_to_manifest;
|
|
4076
|
+
}
|
|
4077
|
+
|
|
4078
|
+
unsigned char rocksdb_options_get_track_and_verify_wals_in_manifest(
|
|
4079
|
+
rocksdb_options_t* opt) {
|
|
4080
|
+
return opt->rep.track_and_verify_wals_in_manifest;
|
|
4081
|
+
}
|
|
4082
|
+
|
|
4083
|
+
void rocksdb_options_set_track_and_verify_wals_in_manifest(
|
|
4084
|
+
rocksdb_options_t* opt, unsigned char track_and_verify_wals_in_manifest) {
|
|
4085
|
+
opt->rep.track_and_verify_wals_in_manifest =
|
|
4086
|
+
track_and_verify_wals_in_manifest;
|
|
4087
|
+
}
|
|
4088
|
+
|
|
3888
4089
|
void rocksdb_options_set_max_successive_merges(rocksdb_options_t* opt,
|
|
3889
4090
|
size_t v) {
|
|
3890
4091
|
opt->rep.max_successive_merges = v;
|
|
@@ -4264,13 +4465,8 @@ void rocksdb_perfcontext_destroy(rocksdb_perfcontext_t* context) {
|
|
|
4264
4465
|
|
|
4265
4466
|
/*
|
|
4266
4467
|
TODO:
|
|
4267
|
-
DB::OpenForReadOnly
|
|
4268
|
-
DB::KeyMayExist
|
|
4269
4468
|
DB::GetOptions
|
|
4270
4469
|
DB::GetSortedWalFiles
|
|
4271
|
-
DB::GetLatestSequenceNumber
|
|
4272
|
-
DB::GetUpdatesSince
|
|
4273
|
-
DB::GetDbIdentity
|
|
4274
4470
|
DB::RunManualCompaction
|
|
4275
4471
|
custom cache
|
|
4276
4472
|
table_properties_collectors
|
|
@@ -5747,6 +5943,7 @@ rocksdb_column_family_handle_t* rocksdb_transactiondb_create_column_family(
|
|
|
5747
5943
|
SaveError(errptr, txn_db->rep->CreateColumnFamily(
|
|
5748
5944
|
ColumnFamilyOptions(column_family_options->rep),
|
|
5749
5945
|
std::string(column_family_name), &(handle->rep)));
|
|
5946
|
+
handle->immortal = false;
|
|
5750
5947
|
return handle;
|
|
5751
5948
|
}
|
|
5752
5949
|
|
|
@@ -5789,6 +5986,7 @@ rocksdb_transactiondb_t* rocksdb_transactiondb_open_column_families(
|
|
|
5789
5986
|
rocksdb_column_family_handle_t* c_handle =
|
|
5790
5987
|
new rocksdb_column_family_handle_t;
|
|
5791
5988
|
c_handle->rep = handles[i];
|
|
5989
|
+
c_handle->immortal = false;
|
|
5792
5990
|
column_family_handles[i] = c_handle;
|
|
5793
5991
|
}
|
|
5794
5992
|
rocksdb_transactiondb_t* result = new rocksdb_transactiondb_t;
|
|
@@ -6583,6 +6781,7 @@ rocksdb_optimistictransactiondb_open_column_families(
|
|
|
6583
6781
|
rocksdb_column_family_handle_t* c_handle =
|
|
6584
6782
|
new rocksdb_column_family_handle_t;
|
|
6585
6783
|
c_handle->rep = handles[i];
|
|
6784
|
+
c_handle->immortal = false;
|
|
6586
6785
|
column_family_handles[i] = c_handle;
|
|
6587
6786
|
}
|
|
6588
6787
|
rocksdb_optimistictransactiondb_t* result =
|
|
@@ -199,6 +199,79 @@ static void CheckDel(void* ptr, const char* k, size_t klen) {
|
|
|
199
199
|
(*state)++;
|
|
200
200
|
}
|
|
201
201
|
|
|
202
|
+
// Callback from rocksdb_writebatch_iterate_cf()
|
|
203
|
+
static void CheckPutCF(void* ptr, uint32_t cfid, const char* k, size_t klen,
|
|
204
|
+
const char* v, size_t vlen) {
|
|
205
|
+
int* state = (int*)ptr;
|
|
206
|
+
switch (*state) {
|
|
207
|
+
case 0:
|
|
208
|
+
CheckEqual("bar", k, klen);
|
|
209
|
+
CheckEqual("b", v, vlen);
|
|
210
|
+
CheckCondition(cfid == 1);
|
|
211
|
+
break;
|
|
212
|
+
case 1:
|
|
213
|
+
CheckEqual("box", k, klen);
|
|
214
|
+
CheckEqual("c", v, vlen);
|
|
215
|
+
CheckCondition(cfid == 1);
|
|
216
|
+
break;
|
|
217
|
+
case 4:
|
|
218
|
+
CheckEqual("foo", k, klen);
|
|
219
|
+
CheckEqual("f", v, vlen);
|
|
220
|
+
CheckCondition(cfid == 0);
|
|
221
|
+
break;
|
|
222
|
+
case 6:
|
|
223
|
+
CheckEqual("baz", k, klen);
|
|
224
|
+
CheckEqual("a", v, vlen);
|
|
225
|
+
CheckCondition(cfid == 0);
|
|
226
|
+
break;
|
|
227
|
+
default:
|
|
228
|
+
CheckCondition(false);
|
|
229
|
+
break;
|
|
230
|
+
}
|
|
231
|
+
(*state)++;
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
// Callback from rocksdb_writebatch_iterate_cf()
|
|
235
|
+
static void CheckDelCF(void* ptr, uint32_t cfid, const char* k, size_t klen) {
|
|
236
|
+
int* state = (int*)ptr;
|
|
237
|
+
switch (*state) {
|
|
238
|
+
case 2:
|
|
239
|
+
CheckEqual("bar", k, klen);
|
|
240
|
+
CheckCondition(cfid == 1);
|
|
241
|
+
break;
|
|
242
|
+
case 5:
|
|
243
|
+
CheckEqual("foo", k, klen);
|
|
244
|
+
CheckCondition(cfid == 0);
|
|
245
|
+
break;
|
|
246
|
+
default:
|
|
247
|
+
CheckCondition(false);
|
|
248
|
+
break;
|
|
249
|
+
}
|
|
250
|
+
(*state)++;
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
// Callback from rocksdb_writebatch_iterate_cf()
|
|
254
|
+
static void CheckMergeCF(void* ptr, uint32_t cfid, const char* k, size_t klen,
|
|
255
|
+
const char* v, size_t vlen) {
|
|
256
|
+
int* state = (int*)ptr;
|
|
257
|
+
switch (*state) {
|
|
258
|
+
case 3:
|
|
259
|
+
CheckEqual("box", k, klen);
|
|
260
|
+
CheckEqual("cc", v, vlen);
|
|
261
|
+
CheckCondition(cfid == 1);
|
|
262
|
+
break;
|
|
263
|
+
case 7:
|
|
264
|
+
CheckEqual("baz", k, klen);
|
|
265
|
+
CheckEqual("aa", v, vlen);
|
|
266
|
+
CheckCondition(cfid == 0);
|
|
267
|
+
break;
|
|
268
|
+
default:
|
|
269
|
+
CheckCondition(false);
|
|
270
|
+
break;
|
|
271
|
+
}
|
|
272
|
+
(*state)++;
|
|
273
|
+
}
|
|
274
|
+
|
|
202
275
|
static void CmpDestroy(void* arg) { (void)arg; }
|
|
203
276
|
|
|
204
277
|
static int CmpCompare(void* arg, const char* a, size_t alen, const char* b,
|
|
@@ -798,6 +871,11 @@ int main(int argc, char** argv) {
|
|
|
798
871
|
rocksdb_delete(db, woptions, "foo", 3, &err);
|
|
799
872
|
CheckNoError(err);
|
|
800
873
|
|
|
874
|
+
// get the identity before the backup
|
|
875
|
+
size_t before_db_id_len = 0;
|
|
876
|
+
char* before_db_id = rocksdb_get_db_identity(db, &before_db_id_len);
|
|
877
|
+
CheckCondition(before_db_id_len == 36);
|
|
878
|
+
|
|
801
879
|
rocksdb_close(db);
|
|
802
880
|
|
|
803
881
|
rocksdb_destroy_db(options, dbname, &err);
|
|
@@ -818,6 +896,14 @@ int main(int argc, char** argv) {
|
|
|
818
896
|
|
|
819
897
|
CheckGet(db, roptions, "foo", "hello");
|
|
820
898
|
|
|
899
|
+
// the db_identity after the backup is different
|
|
900
|
+
size_t after_db_id_len = 0;
|
|
901
|
+
char* after_db_id = rocksdb_get_db_identity(db, &after_db_id_len);
|
|
902
|
+
CheckCondition(after_db_id_len == 36);
|
|
903
|
+
CheckCondition(memcmp(after_db_id, before_db_id, after_db_id_len) != 0);
|
|
904
|
+
Free(&before_db_id);
|
|
905
|
+
Free(&after_db_id);
|
|
906
|
+
|
|
821
907
|
rocksdb_backup_engine_close(be);
|
|
822
908
|
}
|
|
823
909
|
|
|
@@ -833,6 +919,14 @@ int main(int argc, char** argv) {
|
|
|
833
919
|
rocksdb_checkpoint_create(checkpoint, dbcheckpointname, 0, &err);
|
|
834
920
|
CheckNoError(err);
|
|
835
921
|
|
|
922
|
+
rocksdb_checkpoint_object_destroy(checkpoint);
|
|
923
|
+
checkpoint = NULL;
|
|
924
|
+
|
|
925
|
+
// get the identity before the checkpoint
|
|
926
|
+
size_t before_db_id_len = 0;
|
|
927
|
+
char* before_db_id = rocksdb_get_db_identity(db, &before_db_id_len);
|
|
928
|
+
CheckCondition(before_db_id_len == 36);
|
|
929
|
+
|
|
836
930
|
// start a new database from the checkpoint
|
|
837
931
|
rocksdb_close(db);
|
|
838
932
|
rocksdb_options_set_error_if_exists(options, 0);
|
|
@@ -841,7 +935,13 @@ int main(int argc, char** argv) {
|
|
|
841
935
|
|
|
842
936
|
CheckGet(db, roptions, "foo", "hello");
|
|
843
937
|
|
|
844
|
-
|
|
938
|
+
// the db_identity after the checkpoint is different
|
|
939
|
+
size_t after_db_id_len = 0;
|
|
940
|
+
char* after_db_id = rocksdb_get_db_identity(db, &after_db_id_len);
|
|
941
|
+
CheckCondition(after_db_id_len == 36);
|
|
942
|
+
CheckCondition(memcmp(after_db_id, before_db_id, after_db_id_len) != 0);
|
|
943
|
+
Free(&before_db_id);
|
|
944
|
+
Free(&after_db_id);
|
|
845
945
|
|
|
846
946
|
rocksdb_close(db);
|
|
847
947
|
rocksdb_destroy_db(options, dbcheckpointname, &err);
|
|
@@ -852,6 +952,73 @@ int main(int argc, char** argv) {
|
|
|
852
952
|
rocksdb_options_set_error_if_exists(options, 1);
|
|
853
953
|
}
|
|
854
954
|
|
|
955
|
+
StartPhase("checkpoint_db_id_in_manifest");
|
|
956
|
+
{
|
|
957
|
+
// create new DB with set_write_dbid_to_manifest=true
|
|
958
|
+
// db_identity is now the same across checkpoints
|
|
959
|
+
rocksdb_close(db);
|
|
960
|
+
db = NULL;
|
|
961
|
+
|
|
962
|
+
rocksdb_options_t* options_dbid_in_manifest = rocksdb_options_create();
|
|
963
|
+
rocksdb_options_set_create_if_missing(options_dbid_in_manifest, 1);
|
|
964
|
+
|
|
965
|
+
unsigned char write_to_manifest =
|
|
966
|
+
rocksdb_options_get_write_dbid_to_manifest(options_dbid_in_manifest);
|
|
967
|
+
CheckCondition(!write_to_manifest);
|
|
968
|
+
rocksdb_options_set_write_dbid_to_manifest(options_dbid_in_manifest, true);
|
|
969
|
+
CheckCondition(!write_to_manifest);
|
|
970
|
+
write_to_manifest =
|
|
971
|
+
rocksdb_options_get_write_dbid_to_manifest(options_dbid_in_manifest);
|
|
972
|
+
CheckCondition(write_to_manifest);
|
|
973
|
+
|
|
974
|
+
db = rocksdb_open(options_dbid_in_manifest, dbbackupname, &err);
|
|
975
|
+
CheckNoError(err);
|
|
976
|
+
|
|
977
|
+
rocksdb_checkpoint_t* checkpoint =
|
|
978
|
+
rocksdb_checkpoint_object_create(db, &err);
|
|
979
|
+
CheckNoError(err);
|
|
980
|
+
|
|
981
|
+
rocksdb_checkpoint_create(checkpoint, dbcheckpointname, 0, &err);
|
|
982
|
+
CheckNoError(err);
|
|
983
|
+
|
|
984
|
+
rocksdb_checkpoint_object_destroy(checkpoint);
|
|
985
|
+
checkpoint = NULL;
|
|
986
|
+
|
|
987
|
+
// get the identity before the backup
|
|
988
|
+
size_t before_db_id_len = 0;
|
|
989
|
+
char* before_db_id = rocksdb_get_db_identity(db, &before_db_id_len);
|
|
990
|
+
CheckCondition(before_db_id_len == 36);
|
|
991
|
+
|
|
992
|
+
// open the checkpoint
|
|
993
|
+
rocksdb_close(db);
|
|
994
|
+
rocksdb_destroy_db(options_dbid_in_manifest, dbbackupname, &err);
|
|
995
|
+
CheckNoError(err);
|
|
996
|
+
|
|
997
|
+
rocksdb_options_set_error_if_exists(options_dbid_in_manifest, 0);
|
|
998
|
+
db = rocksdb_open(options_dbid_in_manifest, dbcheckpointname, &err);
|
|
999
|
+
CheckNoError(err);
|
|
1000
|
+
|
|
1001
|
+
// the db_identity after the checkpoint is the same
|
|
1002
|
+
size_t after_db_id_len = 0;
|
|
1003
|
+
char* after_db_id = rocksdb_get_db_identity(db, &after_db_id_len);
|
|
1004
|
+
CheckCondition(after_db_id_len == 36);
|
|
1005
|
+
CheckCondition(memcmp(after_db_id, before_db_id, after_db_id_len) == 0);
|
|
1006
|
+
Free(&before_db_id);
|
|
1007
|
+
Free(&after_db_id);
|
|
1008
|
+
|
|
1009
|
+
rocksdb_close(db);
|
|
1010
|
+
rocksdb_destroy_db(options_dbid_in_manifest, dbcheckpointname, &err);
|
|
1011
|
+
CheckNoError(err);
|
|
1012
|
+
rocksdb_options_destroy(options_dbid_in_manifest);
|
|
1013
|
+
options_dbid_in_manifest = NULL;
|
|
1014
|
+
|
|
1015
|
+
// re-open the default database
|
|
1016
|
+
rocksdb_options_set_error_if_exists(options, 0);
|
|
1017
|
+
db = rocksdb_open(options, dbname, &err);
|
|
1018
|
+
CheckNoError(err);
|
|
1019
|
+
rocksdb_options_set_error_if_exists(options, 1);
|
|
1020
|
+
}
|
|
1021
|
+
|
|
855
1022
|
StartPhase("compactall");
|
|
856
1023
|
rocksdb_compact_range(db, NULL, 0, NULL, 0);
|
|
857
1024
|
CheckGet(db, roptions, "foo", "hello");
|
|
@@ -1594,6 +1761,21 @@ int main(int argc, char** argv) {
|
|
|
1594
1761
|
CheckPinGetCF(db, roptions, handles[1], "bar", NULL);
|
|
1595
1762
|
CheckPinGetCF(db, roptions, handles[1], "box", "c");
|
|
1596
1763
|
CheckPinGetCF(db, roptions, handles[1], "buff", "rocksdb");
|
|
1764
|
+
rocksdb_writebatch_clear(wb);
|
|
1765
|
+
// Test WriteBatch iteration with Column Family
|
|
1766
|
+
int pos = 0;
|
|
1767
|
+
rocksdb_writebatch_put_cf(wb, handles[1], "bar", 3, "b", 1);
|
|
1768
|
+
rocksdb_writebatch_put_cf(wb, handles[1], "box", 3, "c", 1);
|
|
1769
|
+
rocksdb_writebatch_delete_cf(wb, handles[1], "bar", 3);
|
|
1770
|
+
rocksdb_writebatch_merge_cf(wb, handles[1], "box", 3, "cc", 2);
|
|
1771
|
+
rocksdb_writebatch_put(wb, "foo", 3, "f", 1);
|
|
1772
|
+
rocksdb_writebatch_delete(wb, "foo", 3);
|
|
1773
|
+
rocksdb_writebatch_put(wb, "baz", 3, "a", 1);
|
|
1774
|
+
rocksdb_writebatch_merge(wb, "baz", 3, "aa", 2);
|
|
1775
|
+
rocksdb_writebatch_iterate_cf(wb, &pos, CheckPutCF, CheckDelCF,
|
|
1776
|
+
CheckMergeCF);
|
|
1777
|
+
CheckCondition(pos == 8);
|
|
1778
|
+
rocksdb_writebatch_clear(wb);
|
|
1597
1779
|
rocksdb_writebatch_destroy(wb);
|
|
1598
1780
|
|
|
1599
1781
|
rocksdb_flush_wal(db, 1, &err);
|
|
@@ -2140,6 +2322,12 @@ int main(int argc, char** argv) {
|
|
|
2140
2322
|
CheckCondition(rocksdb_statistics_level_all ==
|
|
2141
2323
|
rocksdb_options_get_statistics_level(o));
|
|
2142
2324
|
|
|
2325
|
+
CheckCondition(0 ==
|
|
2326
|
+
rocksdb_options_get_track_and_verify_wals_in_manifest(o));
|
|
2327
|
+
rocksdb_options_set_track_and_verify_wals_in_manifest(o, 42);
|
|
2328
|
+
CheckCondition(1 ==
|
|
2329
|
+
rocksdb_options_get_track_and_verify_wals_in_manifest(o));
|
|
2330
|
+
|
|
2143
2331
|
/* Blob Options */
|
|
2144
2332
|
rocksdb_options_set_enable_blob_files(o, 1);
|
|
2145
2333
|
CheckCondition(1 == rocksdb_options_get_enable_blob_files(o));
|
|
@@ -538,6 +538,7 @@ ColumnFamilyData::ColumnFamilyData(
|
|
|
538
538
|
refs_(0),
|
|
539
539
|
initialized_(false),
|
|
540
540
|
dropped_(false),
|
|
541
|
+
flush_skip_reschedule_(false),
|
|
541
542
|
internal_comparator_(cf_options.comparator),
|
|
542
543
|
initial_cf_options_(SanitizeOptions(db_options, cf_options)),
|
|
543
544
|
ioptions_(db_options, initial_cf_options_),
|
|
@@ -1528,6 +1529,20 @@ Status ColumnFamilyData::ValidateOptions(
|
|
|
1528
1529
|
}
|
|
1529
1530
|
}
|
|
1530
1531
|
}
|
|
1532
|
+
|
|
1533
|
+
if (cf_options.compaction_style == kCompactionStyleUniversal) {
|
|
1534
|
+
int max_read_amp = cf_options.compaction_options_universal.max_read_amp;
|
|
1535
|
+
if (max_read_amp < -1) {
|
|
1536
|
+
return Status::NotSupported(
|
|
1537
|
+
"CompactionOptionsUniversal::max_read_amp should be at least -1.");
|
|
1538
|
+
} else if (0 < max_read_amp &&
|
|
1539
|
+
max_read_amp < cf_options.level0_file_num_compaction_trigger) {
|
|
1540
|
+
return Status::NotSupported(
|
|
1541
|
+
"CompactionOptionsUniversal::max_read_amp limits the number of sorted"
|
|
1542
|
+
" runs but is smaller than the compaction trigger "
|
|
1543
|
+
"level0_file_num_compaction_trigger.");
|
|
1544
|
+
}
|
|
1545
|
+
}
|
|
1531
1546
|
return s;
|
|
1532
1547
|
}
|
|
1533
1548
|
|
|
@@ -1607,6 +1622,19 @@ FSDirectory* ColumnFamilyData::GetDataDir(size_t path_id) const {
|
|
|
1607
1622
|
return data_dirs_[path_id].get();
|
|
1608
1623
|
}
|
|
1609
1624
|
|
|
1625
|
+
void ColumnFamilyData::SetFlushSkipReschedule() {
|
|
1626
|
+
const Comparator* ucmp = user_comparator();
|
|
1627
|
+
const size_t ts_sz = ucmp->timestamp_size();
|
|
1628
|
+
if (ts_sz == 0 || ioptions_.persist_user_defined_timestamps) {
|
|
1629
|
+
return;
|
|
1630
|
+
}
|
|
1631
|
+
flush_skip_reschedule_.store(true);
|
|
1632
|
+
}
|
|
1633
|
+
|
|
1634
|
+
bool ColumnFamilyData::GetAndClearFlushSkipReschedule() {
|
|
1635
|
+
return flush_skip_reschedule_.exchange(false);
|
|
1636
|
+
}
|
|
1637
|
+
|
|
1610
1638
|
bool ColumnFamilyData::ShouldPostponeFlushToRetainUDT(
|
|
1611
1639
|
uint64_t max_memtable_id) {
|
|
1612
1640
|
const Comparator* ucmp = user_comparator();
|