@nxtedition/rocksdb 7.0.24 → 7.0.25
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 +3 -1
- package/deps/rocksdb/rocksdb/CMakeLists.txt +5 -0
- package/deps/rocksdb/rocksdb/Makefile +6 -2
- package/deps/rocksdb/rocksdb/TARGETS +14 -0
- package/deps/rocksdb/rocksdb/cache/cache_bench_tool.cc +4 -1
- package/deps/rocksdb/rocksdb/cache/cache_helpers.h +20 -0
- package/deps/rocksdb/rocksdb/cache/cache_reservation_manager_test.cc +2 -2
- package/deps/rocksdb/rocksdb/cache/cache_test.cc +44 -31
- package/deps/rocksdb/rocksdb/cache/clock_cache.cc +491 -722
- package/deps/rocksdb/rocksdb/cache/clock_cache.h +468 -2
- package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache.cc +1 -1
- package/deps/rocksdb/rocksdb/cache/fast_lru_cache.cc +51 -52
- package/deps/rocksdb/rocksdb/cache/fast_lru_cache.h +28 -16
- package/deps/rocksdb/rocksdb/cache/lru_cache.cc +12 -1
- package/deps/rocksdb/rocksdb/cache/lru_cache.h +1 -0
- package/deps/rocksdb/rocksdb/cache/lru_cache_test.cc +170 -36
- package/deps/rocksdb/rocksdb/db/blob/blob_file_cache_test.cc +1 -1
- package/deps/rocksdb/rocksdb/db/blob/blob_file_reader.cc +63 -36
- package/deps/rocksdb/rocksdb/db/blob/blob_file_reader.h +4 -6
- package/deps/rocksdb/rocksdb/db/blob/blob_file_reader_test.cc +57 -38
- package/deps/rocksdb/rocksdb/db/blob/blob_read_request.h +58 -0
- package/deps/rocksdb/rocksdb/db/blob/blob_source.cc +164 -74
- package/deps/rocksdb/rocksdb/db/blob/blob_source.h +42 -29
- package/deps/rocksdb/rocksdb/db/blob/blob_source_test.cc +419 -62
- package/deps/rocksdb/rocksdb/db/blob/db_blob_basic_test.cc +208 -8
- package/deps/rocksdb/rocksdb/db/c.cc +68 -0
- package/deps/rocksdb/rocksdb/db/c_test.c +95 -2
- package/deps/rocksdb/rocksdb/db/column_family.cc +12 -3
- package/deps/rocksdb/rocksdb/db/compaction/compaction.cc +92 -15
- package/deps/rocksdb/rocksdb/db/compaction/compaction.h +76 -4
- package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator.cc +52 -1
- package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator.h +30 -1
- package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator_test.cc +126 -0
- package/deps/rocksdb/rocksdb/db/compaction/compaction_job.cc +203 -1584
- package/deps/rocksdb/rocksdb/db/compaction/compaction_job.h +93 -26
- package/deps/rocksdb/rocksdb/db/compaction/compaction_job_test.cc +87 -1
- package/deps/rocksdb/rocksdb/db/compaction/compaction_outputs.cc +314 -0
- package/deps/rocksdb/rocksdb/db/compaction/compaction_outputs.h +328 -0
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker.cc +32 -6
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker.h +4 -1
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_fifo.cc +7 -3
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_level.cc +174 -33
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_test.cc +474 -7
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_universal.cc +5 -2
- package/deps/rocksdb/rocksdb/db/compaction/compaction_service_job.cc +825 -0
- package/deps/rocksdb/rocksdb/db/compaction/compaction_state.cc +46 -0
- package/deps/rocksdb/rocksdb/db/compaction/compaction_state.h +42 -0
- package/deps/rocksdb/rocksdb/db/compaction/subcompaction_state.cc +223 -0
- package/deps/rocksdb/rocksdb/db/compaction/subcompaction_state.h +255 -0
- package/deps/rocksdb/rocksdb/db/compaction/tiered_compaction_test.cc +1253 -0
- package/deps/rocksdb/rocksdb/db/corruption_test.cc +32 -8
- package/deps/rocksdb/rocksdb/db/db_basic_test.cc +3 -1
- package/deps/rocksdb/rocksdb/db/db_block_cache_test.cc +13 -8
- package/deps/rocksdb/rocksdb/db/db_bloom_filter_test.cc +376 -0
- package/deps/rocksdb/rocksdb/db/db_compaction_test.cc +103 -78
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl.cc +4 -6
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl.h +0 -8
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_open.cc +10 -3
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_secondary.cc +21 -6
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_secondary.h +19 -1
- package/deps/rocksdb/rocksdb/db/db_iter.cc +91 -14
- package/deps/rocksdb/rocksdb/db/db_iter.h +5 -0
- package/deps/rocksdb/rocksdb/db/db_kv_checksum_test.cc +33 -0
- package/deps/rocksdb/rocksdb/db/db_properties_test.cc +79 -0
- package/deps/rocksdb/rocksdb/db/db_range_del_test.cc +2 -0
- package/deps/rocksdb/rocksdb/db/db_test2.cc +1 -1
- package/deps/rocksdb/rocksdb/db/db_wal_test.cc +5 -2
- package/deps/rocksdb/rocksdb/db/db_with_timestamp_basic_test.cc +185 -0
- package/deps/rocksdb/rocksdb/db/dbformat.cc +1 -4
- package/deps/rocksdb/rocksdb/db/dbformat.h +2 -8
- package/deps/rocksdb/rocksdb/db/internal_stats.cc +71 -29
- package/deps/rocksdb/rocksdb/db/internal_stats.h +160 -5
- package/deps/rocksdb/rocksdb/db/log_reader.cc +29 -3
- package/deps/rocksdb/rocksdb/db/log_reader.h +12 -3
- package/deps/rocksdb/rocksdb/db/repair_test.cc +1 -3
- package/deps/rocksdb/rocksdb/db/version_edit.cc +6 -0
- package/deps/rocksdb/rocksdb/db/version_set.cc +93 -129
- package/deps/rocksdb/rocksdb/db/version_set.h +4 -4
- package/deps/rocksdb/rocksdb/db/version_set_sync_and_async.h +2 -2
- package/deps/rocksdb/rocksdb/db/version_set_test.cc +42 -35
- package/deps/rocksdb/rocksdb/db/write_batch.cc +10 -2
- package/deps/rocksdb/rocksdb/db/write_batch_internal.h +4 -1
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_common.cc +10 -4
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_common.h +3 -3
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_driver.cc +3 -2
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_gflags.cc +4 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_shared_state.h +5 -1
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.cc +140 -8
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.h +12 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/multi_ops_txns_stress.cc +46 -7
- package/deps/rocksdb/rocksdb/db_stress_tool/multi_ops_txns_stress.h +7 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/no_batched_ops_stress.cc +27 -7
- package/deps/rocksdb/rocksdb/env/composite_env_wrapper.h +8 -0
- package/deps/rocksdb/rocksdb/env/env_posix.cc +14 -0
- package/deps/rocksdb/rocksdb/env/env_test.cc +130 -1
- package/deps/rocksdb/rocksdb/env/fs_posix.cc +7 -1
- package/deps/rocksdb/rocksdb/env/io_posix.cc +18 -50
- package/deps/rocksdb/rocksdb/env/io_posix.h +53 -6
- package/deps/rocksdb/rocksdb/file/file_prefetch_buffer.cc +8 -10
- package/deps/rocksdb/rocksdb/file/file_prefetch_buffer.h +3 -7
- package/deps/rocksdb/rocksdb/file/prefetch_test.cc +239 -259
- package/deps/rocksdb/rocksdb/file/random_access_file_reader.cc +84 -19
- package/deps/rocksdb/rocksdb/file/random_access_file_reader.h +24 -4
- package/deps/rocksdb/rocksdb/include/rocksdb/advanced_options.h +1 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/c.h +31 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/cache.h +11 -7
- package/deps/rocksdb/rocksdb/include/rocksdb/compaction_job_stats.h +2 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/db.h +14 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/env.h +20 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/options.h +37 -13
- package/deps/rocksdb/rocksdb/include/rocksdb/perf_context.h +7 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/statistics.h +14 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/threadpool.h +9 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/write_batch.h +13 -13
- package/deps/rocksdb/rocksdb/logging/auto_roll_logger.cc +12 -2
- package/deps/rocksdb/rocksdb/monitoring/perf_context.cc +38 -0
- package/deps/rocksdb/rocksdb/monitoring/statistics.cc +7 -1
- package/deps/rocksdb/rocksdb/port/win/env_win.cc +17 -0
- package/deps/rocksdb/rocksdb/port/win/env_win.h +8 -0
- package/deps/rocksdb/rocksdb/port/win/io_win.cc +6 -3
- package/{prebuilds → deps/rocksdb/rocksdb/prebuilds}/linux-x64/node.napi.node +0 -0
- package/deps/rocksdb/rocksdb/src.mk +5 -0
- package/deps/rocksdb/rocksdb/table/block_based/block.h +1 -2
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_builder.cc +1 -1
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_iterator.cc +5 -2
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.cc +1 -1
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_impl.h +15 -12
- package/deps/rocksdb/rocksdb/table/block_based/block_prefetcher.cc +5 -4
- package/deps/rocksdb/rocksdb/table/block_based/block_prefetcher.h +2 -1
- package/deps/rocksdb/rocksdb/table/block_based/filter_policy.cc +1 -1
- package/deps/rocksdb/rocksdb/table/block_based/partitioned_index_iterator.cc +4 -4
- package/deps/rocksdb/rocksdb/table/block_fetcher.cc +1 -2
- package/deps/rocksdb/rocksdb/table/get_context.cc +1 -0
- package/deps/rocksdb/rocksdb/table/sst_file_dumper.cc +1 -2
- package/deps/rocksdb/rocksdb/tools/db_bench_tool.cc +24 -4
- package/deps/rocksdb/rocksdb/util/async_file_reader.cc +1 -1
- package/deps/rocksdb/rocksdb/util/compression.h +2 -0
- package/deps/rocksdb/rocksdb/util/thread_list_test.cc +18 -1
- package/deps/rocksdb/rocksdb/util/threadpool_imp.cc +67 -4
- package/deps/rocksdb/rocksdb/util/threadpool_imp.h +8 -0
- package/deps/rocksdb/rocksdb/utilities/backup/backup_engine.cc +15 -12
- package/deps/rocksdb/rocksdb/utilities/backup/backup_engine_test.cc +4 -2
- package/deps/rocksdb/rocksdb/utilities/simulator_cache/sim_cache_test.cc +1 -1
- package/deps/rocksdb/rocksdb.gyp +5 -1
- package/package.json +1 -1
- package/prebuilds/darwin-arm64/node.napi.node +0 -0
|
@@ -1102,15 +1102,21 @@ class PosixFileSystem : public FileSystem {
|
|
|
1102
1102
|
req.scratch = posix_handle->scratch;
|
|
1103
1103
|
req.offset = posix_handle->offset;
|
|
1104
1104
|
req.len = posix_handle->len;
|
|
1105
|
+
|
|
1105
1106
|
size_t finished_len = 0;
|
|
1106
1107
|
size_t bytes_read = 0;
|
|
1108
|
+
bool read_again = false;
|
|
1107
1109
|
UpdateResult(cqe, "", req.len, posix_handle->iov.iov_len,
|
|
1108
|
-
true /*async_read*/,
|
|
1110
|
+
true /*async_read*/, posix_handle->use_direct_io,
|
|
1111
|
+
posix_handle->alignment, finished_len, &req, bytes_read,
|
|
1112
|
+
read_again);
|
|
1109
1113
|
posix_handle->is_finished = true;
|
|
1110
1114
|
io_uring_cqe_seen(iu, cqe);
|
|
1111
1115
|
posix_handle->cb(req, posix_handle->cb_arg);
|
|
1116
|
+
|
|
1112
1117
|
(void)finished_len;
|
|
1113
1118
|
(void)bytes_read;
|
|
1119
|
+
(void)read_again;
|
|
1114
1120
|
|
|
1115
1121
|
if (static_cast<Posix_IOHandle*>(io_handles[i]) == posix_handle) {
|
|
1116
1122
|
break;
|
|
@@ -199,23 +199,6 @@ bool IsSyncFileRangeSupported(int fd) {
|
|
|
199
199
|
|
|
200
200
|
} // anonymous namespace
|
|
201
201
|
|
|
202
|
-
/*
|
|
203
|
-
* DirectIOHelper
|
|
204
|
-
*/
|
|
205
|
-
namespace {
|
|
206
|
-
|
|
207
|
-
bool IsSectorAligned(const size_t off, size_t sector_size) {
|
|
208
|
-
assert((sector_size & (sector_size - 1)) == 0);
|
|
209
|
-
return (off & (sector_size - 1)) == 0;
|
|
210
|
-
}
|
|
211
|
-
|
|
212
|
-
#ifndef NDEBUG
|
|
213
|
-
bool IsSectorAligned(const void* ptr, size_t sector_size) {
|
|
214
|
-
return uintptr_t(ptr) % sector_size == 0;
|
|
215
|
-
}
|
|
216
|
-
#endif
|
|
217
|
-
} // namespace
|
|
218
|
-
|
|
219
202
|
/*
|
|
220
203
|
* PosixSequentialFile
|
|
221
204
|
*/
|
|
@@ -760,32 +743,21 @@ IOStatus PosixRandomAccessFile::MultiRead(FSReadRequest* reqs,
|
|
|
760
743
|
|
|
761
744
|
FSReadRequest* req = req_wrap->req;
|
|
762
745
|
size_t bytes_read = 0;
|
|
746
|
+
bool read_again = false;
|
|
763
747
|
UpdateResult(cqe, filename_, req->len, req_wrap->iov.iov_len,
|
|
764
|
-
false /*async_read*/,
|
|
765
|
-
|
|
748
|
+
false /*async_read*/, use_direct_io(),
|
|
749
|
+
GetRequiredBufferAlignment(), req_wrap->finished_len, req,
|
|
750
|
+
bytes_read, read_again);
|
|
766
751
|
int32_t res = cqe->res;
|
|
767
752
|
if (res >= 0) {
|
|
768
|
-
if (bytes_read == 0) {
|
|
769
|
-
|
|
770
|
-
|
|
771
|
-
|
|
772
|
-
|
|
773
|
-
|
|
774
|
-
|
|
775
|
-
|
|
776
|
-
// Bytes reads don't fill sectors. Should only happen at the end
|
|
777
|
-
// of the file.
|
|
778
|
-
req->result = Slice(req->scratch, req_wrap->finished_len);
|
|
779
|
-
req->status = IOStatus::OK();
|
|
780
|
-
} else {
|
|
781
|
-
Slice tmp_slice;
|
|
782
|
-
req->status =
|
|
783
|
-
Read(req->offset + req_wrap->finished_len,
|
|
784
|
-
req->len - req_wrap->finished_len, options, &tmp_slice,
|
|
785
|
-
req->scratch + req_wrap->finished_len, dbg);
|
|
786
|
-
req->result =
|
|
787
|
-
Slice(req->scratch, req_wrap->finished_len + tmp_slice.size());
|
|
788
|
-
}
|
|
753
|
+
if (bytes_read == 0 && read_again) {
|
|
754
|
+
Slice tmp_slice;
|
|
755
|
+
req->status =
|
|
756
|
+
Read(req->offset + req_wrap->finished_len,
|
|
757
|
+
req->len - req_wrap->finished_len, options, &tmp_slice,
|
|
758
|
+
req->scratch + req_wrap->finished_len, dbg);
|
|
759
|
+
req->result =
|
|
760
|
+
Slice(req->scratch, req_wrap->finished_len + tmp_slice.size());
|
|
789
761
|
} else if (bytes_read < req_wrap->iov.iov_len) {
|
|
790
762
|
incomplete_rq_list.push_back(req_wrap);
|
|
791
763
|
}
|
|
@@ -910,19 +882,15 @@ IOStatus PosixRandomAccessFile::ReadAsync(
|
|
|
910
882
|
args = nullptr;
|
|
911
883
|
};
|
|
912
884
|
|
|
913
|
-
Posix_IOHandle* posix_handle = new Posix_IOHandle();
|
|
914
|
-
*io_handle = static_cast<void*>(posix_handle);
|
|
915
|
-
*del_fn = deletefn;
|
|
916
|
-
|
|
917
885
|
// Initialize Posix_IOHandle.
|
|
918
|
-
posix_handle
|
|
886
|
+
Posix_IOHandle* posix_handle =
|
|
887
|
+
new Posix_IOHandle(iu, cb, cb_arg, req.offset, req.len, req.scratch,
|
|
888
|
+
use_direct_io(), GetRequiredBufferAlignment());
|
|
919
889
|
posix_handle->iov.iov_base = req.scratch;
|
|
920
890
|
posix_handle->iov.iov_len = req.len;
|
|
921
|
-
|
|
922
|
-
|
|
923
|
-
|
|
924
|
-
posix_handle->len = req.len;
|
|
925
|
-
posix_handle->scratch = req.scratch;
|
|
891
|
+
|
|
892
|
+
*io_handle = static_cast<void*>(posix_handle);
|
|
893
|
+
*del_fn = deletefn;
|
|
926
894
|
|
|
927
895
|
// Step 3: io_uring_sqe_set_data
|
|
928
896
|
struct io_uring_sqe* sqe;
|
|
@@ -52,8 +52,37 @@ class PosixHelper {
|
|
|
52
52
|
size_t* size);
|
|
53
53
|
};
|
|
54
54
|
|
|
55
|
+
/*
|
|
56
|
+
* DirectIOHelper
|
|
57
|
+
*/
|
|
58
|
+
inline bool IsSectorAligned(const size_t off, size_t sector_size) {
|
|
59
|
+
assert((sector_size & (sector_size - 1)) == 0);
|
|
60
|
+
return (off & (sector_size - 1)) == 0;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
#ifndef NDEBUG
|
|
64
|
+
inline bool IsSectorAligned(const void* ptr, size_t sector_size) {
|
|
65
|
+
return uintptr_t(ptr) % sector_size == 0;
|
|
66
|
+
}
|
|
67
|
+
#endif
|
|
68
|
+
|
|
55
69
|
#if defined(ROCKSDB_IOURING_PRESENT)
|
|
56
70
|
struct Posix_IOHandle {
|
|
71
|
+
Posix_IOHandle(struct io_uring* _iu,
|
|
72
|
+
std::function<void(const FSReadRequest&, void*)> _cb,
|
|
73
|
+
void* _cb_arg, uint64_t _offset, size_t _len, char* _scratch,
|
|
74
|
+
bool _use_direct_io, size_t _alignment)
|
|
75
|
+
: iu(_iu),
|
|
76
|
+
cb(_cb),
|
|
77
|
+
cb_arg(_cb_arg),
|
|
78
|
+
offset(_offset),
|
|
79
|
+
len(_len),
|
|
80
|
+
scratch(_scratch),
|
|
81
|
+
use_direct_io(_use_direct_io),
|
|
82
|
+
alignment(_alignment),
|
|
83
|
+
is_finished(false),
|
|
84
|
+
req_count(0) {}
|
|
85
|
+
|
|
57
86
|
struct iovec iov;
|
|
58
87
|
struct io_uring* iu;
|
|
59
88
|
std::function<void(const FSReadRequest&, void*)> cb;
|
|
@@ -61,15 +90,19 @@ struct Posix_IOHandle {
|
|
|
61
90
|
uint64_t offset;
|
|
62
91
|
size_t len;
|
|
63
92
|
char* scratch;
|
|
64
|
-
bool
|
|
93
|
+
bool use_direct_io;
|
|
94
|
+
size_t alignment;
|
|
95
|
+
bool is_finished;
|
|
65
96
|
// req_count is used by AbortIO API to keep track of number of requests.
|
|
66
|
-
uint32_t req_count
|
|
97
|
+
uint32_t req_count;
|
|
67
98
|
};
|
|
68
99
|
|
|
69
100
|
inline void UpdateResult(struct io_uring_cqe* cqe, const std::string& file_name,
|
|
70
101
|
size_t len, size_t iov_len, bool async_read,
|
|
102
|
+
bool use_direct_io, size_t alignment,
|
|
71
103
|
size_t& finished_len, FSReadRequest* req,
|
|
72
|
-
size_t& bytes_read) {
|
|
104
|
+
size_t& bytes_read, bool& read_again) {
|
|
105
|
+
read_again = false;
|
|
73
106
|
if (cqe->res < 0) {
|
|
74
107
|
req->result = Slice(req->scratch, 0);
|
|
75
108
|
req->status = IOError("Req failed", file_name, cqe->res);
|
|
@@ -80,10 +113,24 @@ inline void UpdateResult(struct io_uring_cqe* cqe, const std::string& file_name,
|
|
|
80
113
|
req->result = Slice(req->scratch, req->len);
|
|
81
114
|
req->status = IOStatus::OK();
|
|
82
115
|
} else if (bytes_read == 0) {
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
116
|
+
/// cqe->res == 0 can means EOF, or can mean partial results. See
|
|
117
|
+
// comment
|
|
118
|
+
// https://github.com/facebook/rocksdb/pull/6441#issuecomment-589843435
|
|
119
|
+
// Fall back to pread in this case.
|
|
120
|
+
if (use_direct_io && !IsSectorAligned(finished_len, alignment)) {
|
|
121
|
+
// Bytes reads don't fill sectors. Should only happen at the end
|
|
122
|
+
// of the file.
|
|
123
|
+
req->result = Slice(req->scratch, finished_len);
|
|
86
124
|
req->status = IOStatus::OK();
|
|
125
|
+
} else {
|
|
126
|
+
if (async_read) {
|
|
127
|
+
// No bytes read. It can means EOF. In case of partial results, it's
|
|
128
|
+
// caller responsibility to call read/readasync again.
|
|
129
|
+
req->result = Slice(req->scratch, 0);
|
|
130
|
+
req->status = IOStatus::OK();
|
|
131
|
+
} else {
|
|
132
|
+
read_again = true;
|
|
133
|
+
}
|
|
87
134
|
}
|
|
88
135
|
} else if (bytes_read < iov_len) {
|
|
89
136
|
assert(bytes_read > 0);
|
|
@@ -88,7 +88,7 @@ Status FilePrefetchBuffer::Read(const IOOptions& opts,
|
|
|
88
88
|
Slice result;
|
|
89
89
|
Status s = reader->Read(opts, rounddown_start + chunk_len, read_len, &result,
|
|
90
90
|
bufs_[index].buffer_.BufferStart() + chunk_len,
|
|
91
|
-
nullptr, rate_limiter_priority);
|
|
91
|
+
/*aligned_buf=*/nullptr, rate_limiter_priority);
|
|
92
92
|
#ifndef NDEBUG
|
|
93
93
|
if (result.size() < read_len) {
|
|
94
94
|
// Fake an IO error to force db_stress fault injection to ignore
|
|
@@ -108,7 +108,6 @@ Status FilePrefetchBuffer::Read(const IOOptions& opts,
|
|
|
108
108
|
|
|
109
109
|
Status FilePrefetchBuffer::ReadAsync(const IOOptions& opts,
|
|
110
110
|
RandomAccessFileReader* reader,
|
|
111
|
-
Env::IOPriority rate_limiter_priority,
|
|
112
111
|
uint64_t read_len, uint64_t chunk_len,
|
|
113
112
|
uint64_t rounddown_start, uint32_t index) {
|
|
114
113
|
// callback for async read request.
|
|
@@ -120,8 +119,9 @@ Status FilePrefetchBuffer::ReadAsync(const IOOptions& opts,
|
|
|
120
119
|
req.offset = rounddown_start + chunk_len;
|
|
121
120
|
req.result = result;
|
|
122
121
|
req.scratch = bufs_[index].buffer_.BufferStart() + chunk_len;
|
|
123
|
-
Status s = reader->ReadAsync(req, opts, fp,
|
|
124
|
-
&del_fn_,
|
|
122
|
+
Status s = reader->ReadAsync(req, opts, fp,
|
|
123
|
+
/*cb_arg=*/nullptr, &io_handle_, &del_fn_,
|
|
124
|
+
/*aligned_buf=*/nullptr);
|
|
125
125
|
req.status.PermitUncheckedError();
|
|
126
126
|
if (s.ok()) {
|
|
127
127
|
async_read_in_progress_ = true;
|
|
@@ -373,8 +373,7 @@ Status FilePrefetchBuffer::PrefetchAsyncInternal(
|
|
|
373
373
|
bufs_[second].offset_ = rounddown_start2;
|
|
374
374
|
assert(roundup_len2 >= chunk_len2);
|
|
375
375
|
uint64_t read_len2 = static_cast<size_t>(roundup_len2 - chunk_len2);
|
|
376
|
-
ReadAsync(opts, reader,
|
|
377
|
-
rounddown_start2, second)
|
|
376
|
+
ReadAsync(opts, reader, read_len2, chunk_len2, rounddown_start2, second)
|
|
378
377
|
.PermitUncheckedError();
|
|
379
378
|
}
|
|
380
379
|
|
|
@@ -544,7 +543,8 @@ void FilePrefetchBuffer::PrefetchAsyncCallback(const FSReadRequest& req,
|
|
|
544
543
|
if (req.status.ok()) {
|
|
545
544
|
if (req.offset + req.result.size() <=
|
|
546
545
|
bufs_[index].offset_ + bufs_[index].buffer_.CurrentSize()) {
|
|
547
|
-
// All requested bytes are already in the buffer
|
|
546
|
+
// All requested bytes are already in the buffer or no data is read
|
|
547
|
+
// because of EOF. So no need to update.
|
|
548
548
|
return;
|
|
549
549
|
}
|
|
550
550
|
if (req.offset < bufs_[index].offset_) {
|
|
@@ -560,7 +560,6 @@ void FilePrefetchBuffer::PrefetchAsyncCallback(const FSReadRequest& req,
|
|
|
560
560
|
Status FilePrefetchBuffer::PrefetchAsync(const IOOptions& opts,
|
|
561
561
|
RandomAccessFileReader* reader,
|
|
562
562
|
uint64_t offset, size_t n,
|
|
563
|
-
Env::IOPriority rate_limiter_priority,
|
|
564
563
|
Slice* result) {
|
|
565
564
|
assert(reader != nullptr);
|
|
566
565
|
if (!enable_) {
|
|
@@ -630,8 +629,7 @@ Status FilePrefetchBuffer::PrefetchAsync(const IOOptions& opts,
|
|
|
630
629
|
|
|
631
630
|
size_t read_len = static_cast<size_t>(roundup_len - chunk_len);
|
|
632
631
|
|
|
633
|
-
s = ReadAsync(opts, reader,
|
|
634
|
-
rounddown_start, second);
|
|
632
|
+
s = ReadAsync(opts, reader, read_len, chunk_len, rounddown_start, second);
|
|
635
633
|
|
|
636
634
|
if (!s.ok()) {
|
|
637
635
|
return s;
|
|
@@ -138,16 +138,13 @@ class FilePrefetchBuffer {
|
|
|
138
138
|
// reader : the file reader.
|
|
139
139
|
// offset : the file offset to start reading from.
|
|
140
140
|
// n : the number of bytes to read.
|
|
141
|
-
// rate_limiter_priority : rate limiting priority, or `Env::IO_TOTAL` to
|
|
142
|
-
// bypass.
|
|
143
141
|
// result : if data already exists in the buffer, result will
|
|
144
142
|
// be updated with the data.
|
|
145
143
|
//
|
|
146
144
|
// If data already exist in the buffer, it will return Status::OK, otherwise
|
|
147
145
|
// it will send asynchronous request and return Status::TryAgain.
|
|
148
146
|
Status PrefetchAsync(const IOOptions& opts, RandomAccessFileReader* reader,
|
|
149
|
-
uint64_t offset, size_t n,
|
|
150
|
-
Env::IOPriority rate_limiter_priority, Slice* result);
|
|
147
|
+
uint64_t offset, size_t n, Slice* result);
|
|
151
148
|
|
|
152
149
|
// Tries returning the data for a file read from this buffer if that data is
|
|
153
150
|
// in the buffer.
|
|
@@ -246,9 +243,8 @@ class FilePrefetchBuffer {
|
|
|
246
243
|
uint64_t chunk_len, uint64_t rounddown_start, uint32_t index);
|
|
247
244
|
|
|
248
245
|
Status ReadAsync(const IOOptions& opts, RandomAccessFileReader* reader,
|
|
249
|
-
|
|
250
|
-
uint64_t
|
|
251
|
-
uint32_t index);
|
|
246
|
+
uint64_t read_len, uint64_t chunk_len,
|
|
247
|
+
uint64_t rounddown_start, uint32_t index);
|
|
252
248
|
|
|
253
249
|
// Copy the data from src to third buffer.
|
|
254
250
|
void CopyDataToBuffer(uint32_t src, uint64_t& offset, size_t& length);
|