@nxtedition/rocksdb 13.1.5 → 13.3.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 +62 -15
- package/deps/rocksdb/rocksdb/{TARGETS → BUCK} +27 -0
- package/deps/rocksdb/rocksdb/CMakeLists.txt +3 -1
- package/deps/rocksdb/rocksdb/Makefile +2 -2
- package/deps/rocksdb/rocksdb/cache/cache.cc +3 -1
- package/deps/rocksdb/rocksdb/db/arena_wrapped_db_iter.h +2 -0
- package/deps/rocksdb/rocksdb/db/attribute_group_iterator_impl.h +34 -9
- package/deps/rocksdb/rocksdb/db/blob/blob_source.cc +7 -6
- package/deps/rocksdb/rocksdb/db/blob/blob_source.h +5 -1
- package/deps/rocksdb/rocksdb/db/blob/blob_source_test.cc +22 -14
- package/deps/rocksdb/rocksdb/db/blob/db_blob_basic_test.cc +149 -0
- package/deps/rocksdb/rocksdb/db/builder.cc +13 -24
- package/deps/rocksdb/rocksdb/db/coalescing_iterator.h +35 -10
- package/deps/rocksdb/rocksdb/db/column_family.cc +21 -10
- package/deps/rocksdb/rocksdb/db/column_family.h +15 -8
- package/deps/rocksdb/rocksdb/db/column_family_test.cc +98 -7
- package/deps/rocksdb/rocksdb/db/compaction/compaction.cc +126 -16
- package/deps/rocksdb/rocksdb/db/compaction/compaction.h +51 -5
- package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator.cc +2 -2
- package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator.h +2 -8
- package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator_test.cc +24 -0
- package/deps/rocksdb/rocksdb/db/compaction/compaction_job.cc +52 -22
- package/deps/rocksdb/rocksdb/db/compaction/compaction_job.h +9 -7
- package/deps/rocksdb/rocksdb/db/compaction/compaction_job_test.cc +36 -9
- package/deps/rocksdb/rocksdb/db/compaction/compaction_outputs.h +6 -0
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker.cc +30 -17
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker.h +26 -23
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_fifo.cc +43 -33
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_fifo.h +6 -5
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_level.cc +19 -9
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_level.h +6 -5
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_test.cc +632 -411
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_universal.cc +171 -51
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_universal.h +7 -5
- package/deps/rocksdb/rocksdb/db/compaction/compaction_service_job.cc +37 -10
- package/deps/rocksdb/rocksdb/db/compaction/compaction_service_test.cc +51 -11
- package/deps/rocksdb/rocksdb/db/compaction/subcompaction_state.cc +10 -3
- package/deps/rocksdb/rocksdb/db/compaction/tiered_compaction_test.cc +350 -154
- package/deps/rocksdb/rocksdb/db/convenience.cc +1 -1
- package/deps/rocksdb/rocksdb/db/db_block_cache_test.cc +62 -27
- package/deps/rocksdb/rocksdb/db/db_bloom_filter_test.cc +68 -1
- package/deps/rocksdb/rocksdb/db/db_compaction_test.cc +91 -0
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl.cc +134 -70
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl.h +71 -23
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_compaction_flush.cc +43 -16
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_debug.cc +47 -33
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_files.cc +27 -19
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_open.cc +38 -25
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_readonly.cc +3 -3
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_secondary.cc +7 -4
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_write.cc +258 -42
- package/deps/rocksdb/rocksdb/db/db_io_failure_test.cc +161 -9
- package/deps/rocksdb/rocksdb/db/db_iter.cc +118 -86
- package/deps/rocksdb/rocksdb/db/db_iter.h +44 -17
- package/deps/rocksdb/rocksdb/db/db_options_test.cc +27 -6
- package/deps/rocksdb/rocksdb/db/db_test.cc +48 -16
- package/deps/rocksdb/rocksdb/db/db_test2.cc +60 -15
- package/deps/rocksdb/rocksdb/db/db_test_util.cc +97 -44
- package/deps/rocksdb/rocksdb/db/db_test_util.h +7 -1
- package/deps/rocksdb/rocksdb/db/dbformat.cc +15 -5
- package/deps/rocksdb/rocksdb/db/dbformat.h +137 -55
- package/deps/rocksdb/rocksdb/db/event_helpers.cc +1 -0
- package/deps/rocksdb/rocksdb/db/experimental.cc +54 -0
- package/deps/rocksdb/rocksdb/db/external_sst_file_basic_test.cc +663 -8
- package/deps/rocksdb/rocksdb/db/external_sst_file_ingestion_job.cc +152 -91
- package/deps/rocksdb/rocksdb/db/external_sst_file_ingestion_job.h +134 -11
- package/deps/rocksdb/rocksdb/db/external_sst_file_test.cc +55 -9
- package/deps/rocksdb/rocksdb/db/flush_job.cc +52 -29
- package/deps/rocksdb/rocksdb/db/flush_job.h +5 -3
- package/deps/rocksdb/rocksdb/db/flush_job_test.cc +18 -12
- package/deps/rocksdb/rocksdb/db/forward_iterator.cc +23 -29
- package/deps/rocksdb/rocksdb/db/import_column_family_job.cc +3 -2
- package/deps/rocksdb/rocksdb/db/import_column_family_test.cc +2 -0
- package/deps/rocksdb/rocksdb/db/internal_stats.cc +9 -6
- package/deps/rocksdb/rocksdb/db/internal_stats.h +54 -0
- package/deps/rocksdb/rocksdb/db/job_context.h +1 -1
- package/deps/rocksdb/rocksdb/db/log_reader.cc +6 -7
- package/deps/rocksdb/rocksdb/db/manifest_ops.cc +47 -0
- package/deps/rocksdb/rocksdb/db/manifest_ops.h +20 -0
- package/deps/rocksdb/rocksdb/db/memtable.cc +165 -64
- package/deps/rocksdb/rocksdb/db/memtable.h +422 -243
- package/deps/rocksdb/rocksdb/db/memtable_list.cc +99 -68
- package/deps/rocksdb/rocksdb/db/memtable_list.h +63 -38
- package/deps/rocksdb/rocksdb/db/memtable_list_test.cc +28 -25
- package/deps/rocksdb/rocksdb/db/multi_cf_iterator_impl.h +118 -60
- package/deps/rocksdb/rocksdb/db/multi_cf_iterator_test.cc +344 -89
- package/deps/rocksdb/rocksdb/db/range_tombstone_fragmenter.h +2 -3
- package/deps/rocksdb/rocksdb/db/repair.cc +15 -14
- package/deps/rocksdb/rocksdb/db/repair_test.cc +0 -13
- package/deps/rocksdb/rocksdb/db/snapshot_checker.h +7 -0
- package/deps/rocksdb/rocksdb/db/table_cache.cc +62 -65
- package/deps/rocksdb/rocksdb/db/table_cache.h +70 -76
- package/deps/rocksdb/rocksdb/db/table_cache_sync_and_async.h +5 -6
- package/deps/rocksdb/rocksdb/db/table_properties_collector_test.cc +1 -1
- package/deps/rocksdb/rocksdb/db/transaction_log_impl.cc +8 -7
- package/deps/rocksdb/rocksdb/db/version_builder.cc +17 -19
- package/deps/rocksdb/rocksdb/db/version_builder.h +13 -12
- package/deps/rocksdb/rocksdb/db/version_edit.h +30 -0
- package/deps/rocksdb/rocksdb/db/version_edit_handler.cc +3 -5
- package/deps/rocksdb/rocksdb/db/version_set.cc +89 -129
- package/deps/rocksdb/rocksdb/db/version_set.h +12 -4
- package/deps/rocksdb/rocksdb/db/version_set_sync_and_async.h +1 -2
- package/deps/rocksdb/rocksdb/db/version_set_test.cc +12 -8
- package/deps/rocksdb/rocksdb/db/wide/wide_column_serialization.cc +0 -15
- package/deps/rocksdb/rocksdb/db/wide/wide_column_serialization.h +0 -2
- package/deps/rocksdb/rocksdb/db/wide/wide_column_serialization_test.cc +9 -7
- package/deps/rocksdb/rocksdb/db/wide/wide_columns_helper.cc +0 -8
- package/deps/rocksdb/rocksdb/db/wide/wide_columns_helper.h +28 -2
- package/deps/rocksdb/rocksdb/db/write_batch.cc +32 -10
- package/deps/rocksdb/rocksdb/db/write_batch_internal.h +9 -0
- package/deps/rocksdb/rocksdb/db/write_batch_test.cc +2 -1
- package/deps/rocksdb/rocksdb/db/write_thread.cc +3 -1
- package/deps/rocksdb/rocksdb/db/write_thread.h +6 -2
- package/deps/rocksdb/rocksdb/db_stress_tool/batched_ops_stress.cc +15 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/cf_consistency_stress.cc +7 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_common.h +4 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_gflags.cc +18 -2
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.cc +100 -22
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.h +15 -4
- package/deps/rocksdb/rocksdb/db_stress_tool/multi_ops_txns_stress.cc +34 -8
- package/deps/rocksdb/rocksdb/db_stress_tool/no_batched_ops_stress.cc +223 -78
- package/deps/rocksdb/rocksdb/env/file_system.cc +6 -1
- package/deps/rocksdb/rocksdb/env/fs_posix.cc +53 -0
- package/deps/rocksdb/rocksdb/env/io_posix.cc +63 -17
- package/deps/rocksdb/rocksdb/env/io_posix.h +30 -1
- package/deps/rocksdb/rocksdb/file/file_prefetch_buffer.cc +132 -48
- package/deps/rocksdb/rocksdb/file/file_prefetch_buffer.h +92 -24
- package/deps/rocksdb/rocksdb/file/prefetch_test.cc +727 -109
- package/deps/rocksdb/rocksdb/file/random_access_file_reader.cc +3 -4
- package/deps/rocksdb/rocksdb/file/random_access_file_reader.h +1 -1
- package/deps/rocksdb/rocksdb/file/writable_file_writer.cc +8 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/attribute_groups.h +20 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/compaction_job_stats.h +9 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/configurable.h +9 -5
- package/deps/rocksdb/rocksdb/include/rocksdb/convenience.h +2 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/db.h +10 -2
- package/deps/rocksdb/rocksdb/include/rocksdb/env.h +1 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/experimental.h +7 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/file_system.h +34 -37
- package/deps/rocksdb/rocksdb/include/rocksdb/iterator_base.h +21 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/options.h +56 -28
- package/deps/rocksdb/rocksdb/include/rocksdb/sst_file_writer.h +3 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/table.h +36 -28
- package/deps/rocksdb/rocksdb/include/rocksdb/table_properties.h +11 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/thread_status.h +1 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/options_type.h +84 -60
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/secondary_index.h +102 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/table_properties_collectors.h +89 -2
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/transaction.h +32 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/transaction_db.h +30 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/write_batch_with_index.h +23 -2
- package/deps/rocksdb/rocksdb/include/rocksdb/version.h +2 -2
- package/deps/rocksdb/rocksdb/include/rocksdb/write_batch.h +2 -0
- package/deps/rocksdb/rocksdb/memtable/inlineskiplist.h +79 -21
- package/deps/rocksdb/rocksdb/memtable/skiplist.h +41 -18
- package/deps/rocksdb/rocksdb/memtable/skiplistrep.cc +1 -5
- package/deps/rocksdb/rocksdb/memtable/wbwi_memtable.cc +169 -0
- package/deps/rocksdb/rocksdb/memtable/wbwi_memtable.h +400 -0
- package/deps/rocksdb/rocksdb/monitoring/thread_status_util_debug.cc +2 -0
- package/deps/rocksdb/rocksdb/options/cf_options.cc +137 -82
- package/deps/rocksdb/rocksdb/options/cf_options.h +18 -6
- package/deps/rocksdb/rocksdb/options/configurable.cc +31 -17
- package/deps/rocksdb/rocksdb/options/configurable_helper.h +7 -6
- package/deps/rocksdb/rocksdb/options/options_helper.cc +10 -8
- package/deps/rocksdb/rocksdb/options/options_parser.cc +74 -54
- package/deps/rocksdb/rocksdb/options/options_settable_test.cc +89 -0
- package/deps/rocksdb/rocksdb/options/options_test.cc +112 -26
- package/deps/rocksdb/rocksdb/port/port.h +5 -9
- package/deps/rocksdb/rocksdb/src.mk +8 -0
- package/deps/rocksdb/rocksdb/table/adaptive/adaptive_table_factory.h +4 -0
- package/deps/rocksdb/rocksdb/table/block_based/block.h +1 -7
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_builder.cc +2 -0
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_factory.cc +62 -80
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_factory.h +13 -3
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_iterator.cc +16 -5
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_iterator.h +38 -7
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.cc +12 -4
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.h +4 -1
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_sync_and_async.h +4 -1
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_test.cc +204 -1
- package/deps/rocksdb/rocksdb/table/block_based/data_block_hash_index_test.cc +3 -3
- package/deps/rocksdb/rocksdb/table/block_fetcher_test.cc +2 -1
- package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_factory.h +4 -0
- package/deps/rocksdb/rocksdb/table/format.cc +3 -3
- package/deps/rocksdb/rocksdb/table/meta_blocks.cc +4 -1
- package/deps/rocksdb/rocksdb/table/mock_table.cc +0 -50
- package/deps/rocksdb/rocksdb/table/mock_table.h +53 -0
- package/deps/rocksdb/rocksdb/table/plain/plain_table_factory.h +4 -0
- package/deps/rocksdb/rocksdb/table/sst_file_dumper.cc +1 -1
- package/deps/rocksdb/rocksdb/table/sst_file_writer.cc +10 -5
- package/deps/rocksdb/rocksdb/table/table_builder.h +3 -1
- package/deps/rocksdb/rocksdb/table/table_properties.cc +181 -0
- package/deps/rocksdb/rocksdb/table/table_reader_bench.cc +5 -5
- package/deps/rocksdb/rocksdb/table/table_test.cc +71 -64
- package/deps/rocksdb/rocksdb/tools/block_cache_analyzer/block_cache_pysim.py +45 -45
- package/deps/rocksdb/rocksdb/tools/block_cache_analyzer/block_cache_pysim_test.py +35 -35
- package/deps/rocksdb/rocksdb/tools/block_cache_analyzer/block_cache_trace_analyzer_plot.py +43 -43
- package/deps/rocksdb/rocksdb/tools/db_bench_tool.cc +41 -4
- package/deps/rocksdb/rocksdb/tools/ldb_cmd.cc +1 -0
- package/deps/rocksdb/rocksdb/tools/sst_dump_test.cc +1 -1
- package/deps/rocksdb/rocksdb/unreleased_history/add.sh +13 -0
- package/deps/rocksdb/rocksdb/util/aligned_buffer.h +24 -5
- package/deps/rocksdb/rocksdb/util/compaction_job_stats_impl.cc +7 -0
- package/deps/rocksdb/rocksdb/util/file_checksum_helper.cc +0 -52
- package/deps/rocksdb/rocksdb/util/file_checksum_helper.h +1 -10
- package/deps/rocksdb/rocksdb/util/file_reader_writer_test.cc +92 -0
- package/deps/rocksdb/rocksdb/util/thread_operation.h +1 -0
- package/deps/rocksdb/rocksdb/util/udt_util.cc +50 -4
- package/deps/rocksdb/rocksdb/util/udt_util.h +24 -11
- package/deps/rocksdb/rocksdb/util/udt_util_test.cc +26 -13
- package/deps/rocksdb/rocksdb/utilities/memory/memory_test.cc +1 -16
- package/deps/rocksdb/rocksdb/utilities/options/options_util_test.cc +2 -0
- package/deps/rocksdb/rocksdb/utilities/secondary_index/faiss_ivf_index.cc +214 -0
- package/deps/rocksdb/rocksdb/utilities/secondary_index/faiss_ivf_index.h +60 -0
- package/deps/rocksdb/rocksdb/utilities/secondary_index/faiss_ivf_index_test.cc +124 -0
- package/deps/rocksdb/rocksdb/utilities/secondary_index/secondary_index_mixin.h +441 -0
- package/deps/rocksdb/rocksdb/utilities/table_properties_collectors/compact_for_tiering_collector.cc +34 -3
- package/deps/rocksdb/rocksdb/utilities/table_properties_collectors/compact_for_tiering_collector.h +7 -2
- package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction_test.cc +437 -0
- package/deps/rocksdb/rocksdb/utilities/transactions/pessimistic_transaction.cc +34 -11
- package/deps/rocksdb/rocksdb/utilities/transactions/pessimistic_transaction.h +14 -7
- package/deps/rocksdb/rocksdb/utilities/transactions/pessimistic_transaction_db.cc +7 -1
- package/deps/rocksdb/rocksdb/utilities/transactions/snapshot_checker.cc +17 -0
- package/deps/rocksdb/rocksdb/utilities/transactions/transaction_base.cc +69 -0
- package/deps/rocksdb/rocksdb/utilities/transactions/transaction_base.h +20 -0
- package/deps/rocksdb/rocksdb/utilities/transactions/transaction_test.cc +1290 -0
- package/deps/rocksdb/rocksdb/utilities/transactions/write_committed_transaction_ts_test.cc +324 -0
- package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn.cc +18 -1
- package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn.h +8 -1
- package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index.cc +57 -12
- package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_internal.cc +32 -3
- package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_internal.h +33 -2
- package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_test.cc +721 -9
- package/deps/rocksdb/rocksdb.gyp +2 -0
- package/package.json +1 -1
- package/prebuilds/darwin-arm64/@nxtedition+rocksdb.node +0 -0
- package/prebuilds/linux-x64/@nxtedition+rocksdb.node +0 -0
|
@@ -15,7 +15,9 @@
|
|
|
15
15
|
#include <sstream>
|
|
16
16
|
#include <string>
|
|
17
17
|
|
|
18
|
+
#include "file/random_access_file_reader.h"
|
|
18
19
|
#include "file/readahead_file_info.h"
|
|
20
|
+
#include "file_util.h"
|
|
19
21
|
#include "monitoring/statistics_impl.h"
|
|
20
22
|
#include "port/port.h"
|
|
21
23
|
#include "rocksdb/env.h"
|
|
@@ -149,6 +151,9 @@ enum class FilePrefetchBufferUsage {
|
|
|
149
151
|
//
|
|
150
152
|
// If num_buffers_ == 1, it's a sequential read flow. Read API will be called on
|
|
151
153
|
// that one buffer whenever the data is requested and is not in the buffer.
|
|
154
|
+
// When reusing the file system allocated buffer, overlap_buf_ is used if the
|
|
155
|
+
// main buffer only contains part of the requested data. It is returned to
|
|
156
|
+
// the caller after the remaining data is fetched.
|
|
152
157
|
// If num_buffers_ > 1, then the data is prefetched asynchronosuly in the
|
|
153
158
|
// buffers whenever the data is consumed from the buffers and that buffer is
|
|
154
159
|
// freed.
|
|
@@ -206,10 +211,15 @@ class FilePrefetchBuffer {
|
|
|
206
211
|
assert((num_file_reads_ >= num_file_reads_for_auto_readahead_ + 1) ||
|
|
207
212
|
(num_file_reads_ == 0));
|
|
208
213
|
|
|
209
|
-
//
|
|
210
|
-
//
|
|
211
|
-
// data
|
|
212
|
-
|
|
214
|
+
// overlap_buf_ is used whenever the main buffer only has part of the
|
|
215
|
+
// requested data. The relevant data is copied into overlap_buf_ and the
|
|
216
|
+
// remaining data is copied in later to satisfy the user's request. This is
|
|
217
|
+
// used in both the synchronous (num_buffers_ = 1) and asynchronous
|
|
218
|
+
// (num_buffers_ > 1) cases. In the asynchronous case, the requested data
|
|
219
|
+
// may be spread out over 2 buffers.
|
|
220
|
+
if (num_buffers_ > 1 ||
|
|
221
|
+
(fs_ != nullptr &&
|
|
222
|
+
CheckFSFeatureSupport(fs_, FSSupportedOps::kFSBuffer))) {
|
|
213
223
|
overlap_buf_ = new BufferInfo();
|
|
214
224
|
}
|
|
215
225
|
|
|
@@ -379,12 +389,21 @@ class FilePrefetchBuffer {
|
|
|
379
389
|
void PrefetchAsyncCallback(FSReadRequest& req, void* cb_arg);
|
|
380
390
|
|
|
381
391
|
void TEST_GetBufferOffsetandSize(
|
|
382
|
-
std::vector<std::
|
|
392
|
+
std::vector<std::tuple<uint64_t, size_t, bool>>& buffer_info) {
|
|
383
393
|
for (size_t i = 0; i < bufs_.size(); i++) {
|
|
384
|
-
buffer_info[i]
|
|
385
|
-
buffer_info[i]
|
|
386
|
-
|
|
387
|
-
|
|
394
|
+
std::get<0>(buffer_info[i]) = bufs_[i]->offset_;
|
|
395
|
+
std::get<1>(buffer_info[i]) = bufs_[i]->async_read_in_progress_
|
|
396
|
+
? bufs_[i]->async_req_len_
|
|
397
|
+
: bufs_[i]->CurrentSize();
|
|
398
|
+
std::get<2>(buffer_info[i]) = bufs_[i]->async_read_in_progress_;
|
|
399
|
+
}
|
|
400
|
+
}
|
|
401
|
+
|
|
402
|
+
void TEST_GetOverlapBufferOffsetandSize(
|
|
403
|
+
std::pair<uint64_t, size_t>& buffer_info) {
|
|
404
|
+
if (overlap_buf_ != nullptr) {
|
|
405
|
+
buffer_info.first = overlap_buf_->offset_;
|
|
406
|
+
buffer_info.second = overlap_buf_->CurrentSize();
|
|
388
407
|
}
|
|
389
408
|
}
|
|
390
409
|
|
|
@@ -394,7 +413,7 @@ class FilePrefetchBuffer {
|
|
|
394
413
|
// required.
|
|
395
414
|
void PrepareBufferForRead(BufferInfo* buf, size_t alignment, uint64_t offset,
|
|
396
415
|
size_t roundup_len, bool refit_tail,
|
|
397
|
-
uint64_t& aligned_useful_len);
|
|
416
|
+
bool use_fs_buffer, uint64_t& aligned_useful_len);
|
|
398
417
|
|
|
399
418
|
void AbortOutdatedIO(uint64_t offset);
|
|
400
419
|
|
|
@@ -411,14 +430,16 @@ class FilePrefetchBuffer {
|
|
|
411
430
|
|
|
412
431
|
Status Read(BufferInfo* buf, const IOOptions& opts,
|
|
413
432
|
RandomAccessFileReader* reader, uint64_t read_len,
|
|
414
|
-
uint64_t aligned_useful_len, uint64_t start_offset
|
|
433
|
+
uint64_t aligned_useful_len, uint64_t start_offset,
|
|
434
|
+
bool use_fs_buffer);
|
|
415
435
|
|
|
416
436
|
Status ReadAsync(BufferInfo* buf, const IOOptions& opts,
|
|
417
437
|
RandomAccessFileReader* reader, uint64_t read_len,
|
|
418
438
|
uint64_t start_offset);
|
|
419
439
|
|
|
420
440
|
// Copy the data from src to overlap_buf_.
|
|
421
|
-
void
|
|
441
|
+
void CopyDataToOverlapBuffer(BufferInfo* src, uint64_t& offset,
|
|
442
|
+
size_t& length);
|
|
422
443
|
|
|
423
444
|
bool IsBlockSequential(const size_t& offset) {
|
|
424
445
|
return (prev_len_ == 0 || (prev_offset_ + prev_len_ == offset));
|
|
@@ -465,6 +486,49 @@ class FilePrefetchBuffer {
|
|
|
465
486
|
return true;
|
|
466
487
|
}
|
|
467
488
|
|
|
489
|
+
// Whether we reuse the file system provided buffer
|
|
490
|
+
// Until we also handle the async read case, only enable this optimization
|
|
491
|
+
// for the synchronous case when num_buffers_ = 1.
|
|
492
|
+
bool UseFSBuffer(RandomAccessFileReader* reader) {
|
|
493
|
+
return reader->file() != nullptr && !reader->use_direct_io() &&
|
|
494
|
+
fs_ != nullptr &&
|
|
495
|
+
CheckFSFeatureSupport(fs_, FSSupportedOps::kFSBuffer) &&
|
|
496
|
+
num_buffers_ == 1;
|
|
497
|
+
}
|
|
498
|
+
|
|
499
|
+
// When we are reusing the file system provided buffer, we are not concerned
|
|
500
|
+
// with alignment. However, quite a bit of prefetch code incorporates
|
|
501
|
+
// alignment, so we can put in 1 to keep the code simpler.
|
|
502
|
+
size_t GetRequiredBufferAlignment(RandomAccessFileReader* reader) {
|
|
503
|
+
if (UseFSBuffer(reader)) {
|
|
504
|
+
return 1;
|
|
505
|
+
}
|
|
506
|
+
return reader->file()->GetRequiredBufferAlignment();
|
|
507
|
+
}
|
|
508
|
+
|
|
509
|
+
// Reuses the file system allocated buffer to avoid an extra copy
|
|
510
|
+
IOStatus FSBufferDirectRead(RandomAccessFileReader* reader, BufferInfo* buf,
|
|
511
|
+
const IOOptions& opts, uint64_t offset, size_t n,
|
|
512
|
+
Slice& result) {
|
|
513
|
+
FSReadRequest read_req;
|
|
514
|
+
read_req.offset = offset;
|
|
515
|
+
read_req.len = n;
|
|
516
|
+
read_req.scratch = nullptr;
|
|
517
|
+
IOStatus s = reader->MultiRead(opts, &read_req, 1, nullptr);
|
|
518
|
+
if (!s.ok()) {
|
|
519
|
+
return s;
|
|
520
|
+
}
|
|
521
|
+
s = read_req.status;
|
|
522
|
+
if (!s.ok()) {
|
|
523
|
+
return s;
|
|
524
|
+
}
|
|
525
|
+
buf->buffer_.SetBuffer(read_req.result, std::move(read_req.fs_scratch));
|
|
526
|
+
buf->offset_ = offset;
|
|
527
|
+
buf->initial_end_offset_ = offset + read_req.result.size();
|
|
528
|
+
result = read_req.result;
|
|
529
|
+
return s;
|
|
530
|
+
}
|
|
531
|
+
|
|
468
532
|
void DestroyAndClearIOHandle(BufferInfo* buf) {
|
|
469
533
|
if (buf->io_handle_ != nullptr && buf->del_fn_ != nullptr) {
|
|
470
534
|
buf->del_fn_(buf->io_handle_);
|
|
@@ -474,24 +538,28 @@ class FilePrefetchBuffer {
|
|
|
474
538
|
buf->async_read_in_progress_ = false;
|
|
475
539
|
}
|
|
476
540
|
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
541
|
+
void HandleOverlappingSyncData(uint64_t offset, size_t length,
|
|
542
|
+
uint64_t& tmp_offset, size_t& tmp_length,
|
|
543
|
+
bool& use_overlap_buffer);
|
|
544
|
+
|
|
545
|
+
Status HandleOverlappingAsyncData(const IOOptions& opts,
|
|
546
|
+
RandomAccessFileReader* reader,
|
|
547
|
+
uint64_t offset, size_t length,
|
|
548
|
+
size_t readahead_size,
|
|
549
|
+
bool& copy_to_third_buffer,
|
|
550
|
+
uint64_t& tmp_offset, size_t& tmp_length);
|
|
482
551
|
|
|
483
552
|
bool TryReadFromCacheUntracked(const IOOptions& opts,
|
|
484
553
|
RandomAccessFileReader* reader,
|
|
485
554
|
uint64_t offset, size_t n, Slice* result,
|
|
486
|
-
Status* s,
|
|
487
|
-
bool for_compaction = false);
|
|
555
|
+
Status* s, bool for_compaction = false);
|
|
488
556
|
|
|
489
557
|
void ReadAheadSizeTuning(BufferInfo* buf, bool read_curr_block,
|
|
490
|
-
bool refit_tail,
|
|
491
|
-
|
|
492
|
-
size_t
|
|
493
|
-
uint64_t&
|
|
494
|
-
uint64_t& aligned_useful_len);
|
|
558
|
+
bool refit_tail, bool use_fs_buffer,
|
|
559
|
+
uint64_t prev_buf_end_offset, size_t alignment,
|
|
560
|
+
size_t length, size_t readahead_size,
|
|
561
|
+
uint64_t& offset, uint64_t& end_offset,
|
|
562
|
+
size_t& read_len, uint64_t& aligned_useful_len);
|
|
495
563
|
|
|
496
564
|
void UpdateStats(bool found_in_buffer, size_t length_found) {
|
|
497
565
|
if (found_in_buffer) {
|