@nxtedition/rocksdb 7.0.23 → 7.0.26
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/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
- package/prebuilds/linux-x64/node.napi.node +0 -0
|
@@ -864,33 +864,24 @@ TEST_P(PrefetchTest, PrefetchWhenReseekwithCache) {
|
|
|
864
864
|
Close();
|
|
865
865
|
}
|
|
866
866
|
|
|
867
|
-
class PrefetchTest1
|
|
868
|
-
: public DBTestBase,
|
|
869
|
-
public ::testing::WithParamInterface<std::tuple<bool, bool>> {
|
|
870
|
-
public:
|
|
871
|
-
PrefetchTest1() : DBTestBase("prefetch_test1", true) {}
|
|
872
|
-
};
|
|
873
|
-
|
|
874
|
-
INSTANTIATE_TEST_CASE_P(PrefetchTest1, PrefetchTest1,
|
|
875
|
-
::testing::Combine(::testing::Bool(),
|
|
876
|
-
::testing::Bool()));
|
|
877
|
-
|
|
878
867
|
#ifndef ROCKSDB_LITE
|
|
879
|
-
TEST_P(
|
|
868
|
+
TEST_P(PrefetchTest, DBIterLevelReadAhead) {
|
|
880
869
|
const int kNumKeys = 1000;
|
|
881
870
|
// Set options
|
|
882
871
|
std::shared_ptr<MockFS> fs =
|
|
883
872
|
std::make_shared<MockFS>(env_->GetFileSystem(), false);
|
|
884
873
|
std::unique_ptr<Env> env(new CompositeEnvWrapper(env_, fs));
|
|
885
874
|
|
|
875
|
+
bool use_direct_io = std::get<0>(GetParam());
|
|
886
876
|
bool is_adaptive_readahead = std::get<1>(GetParam());
|
|
877
|
+
|
|
887
878
|
Options options = CurrentOptions();
|
|
888
879
|
options.write_buffer_size = 1024;
|
|
889
880
|
options.create_if_missing = true;
|
|
890
881
|
options.compression = kNoCompression;
|
|
891
882
|
options.statistics = CreateDBStatistics();
|
|
892
883
|
options.env = env.get();
|
|
893
|
-
|
|
884
|
+
|
|
894
885
|
if (use_direct_io) {
|
|
895
886
|
options.use_direct_reads = true;
|
|
896
887
|
options.use_direct_io_for_flush_and_compaction = true;
|
|
@@ -987,7 +978,7 @@ TEST_P(PrefetchTest1, DBIterLevelReadAhead) {
|
|
|
987
978
|
{
|
|
988
979
|
HistogramData async_read_bytes;
|
|
989
980
|
options.statistics->histogramData(ASYNC_READ_BYTES, &async_read_bytes);
|
|
990
|
-
if (ro.async_io
|
|
981
|
+
if (ro.async_io) {
|
|
991
982
|
ASSERT_GT(async_read_bytes.count, 0);
|
|
992
983
|
} else {
|
|
993
984
|
ASSERT_EQ(async_read_bytes.count, 0);
|
|
@@ -1001,16 +992,16 @@ TEST_P(PrefetchTest1, DBIterLevelReadAhead) {
|
|
|
1001
992
|
}
|
|
1002
993
|
#endif //! ROCKSDB_LITE
|
|
1003
994
|
|
|
1004
|
-
class
|
|
995
|
+
class PrefetchTest1 : public DBTestBase,
|
|
1005
996
|
public ::testing::WithParamInterface<bool> {
|
|
1006
997
|
public:
|
|
1007
|
-
|
|
998
|
+
PrefetchTest1() : DBTestBase("prefetch_test1", true) {}
|
|
1008
999
|
};
|
|
1009
1000
|
|
|
1010
|
-
INSTANTIATE_TEST_CASE_P(
|
|
1001
|
+
INSTANTIATE_TEST_CASE_P(PrefetchTest1, PrefetchTest1, ::testing::Bool());
|
|
1011
1002
|
|
|
1012
1003
|
#ifndef ROCKSDB_LITE
|
|
1013
|
-
TEST_P(
|
|
1004
|
+
TEST_P(PrefetchTest1, NonSequentialReadsWithAdaptiveReadahead) {
|
|
1014
1005
|
const int kNumKeys = 1000;
|
|
1015
1006
|
// Set options
|
|
1016
1007
|
std::shared_ptr<MockFS> fs =
|
|
@@ -1103,7 +1094,7 @@ TEST_P(PrefetchTest2, NonSequentialReadsWithAdaptiveReadahead) {
|
|
|
1103
1094
|
}
|
|
1104
1095
|
#endif //! ROCKSDB_LITE
|
|
1105
1096
|
|
|
1106
|
-
TEST_P(
|
|
1097
|
+
TEST_P(PrefetchTest1, DecreaseReadAheadIfInCache) {
|
|
1107
1098
|
const int kNumKeys = 2000;
|
|
1108
1099
|
// Set options
|
|
1109
1100
|
std::shared_ptr<MockFS> fs =
|
|
@@ -1167,7 +1158,6 @@ TEST_P(PrefetchTest2, DecreaseReadAheadIfInCache) {
|
|
|
1167
1158
|
SyncPoint::GetInstance()->EnableProcessing();
|
|
1168
1159
|
ReadOptions ro;
|
|
1169
1160
|
ro.adaptive_readahead = true;
|
|
1170
|
-
// ro.async_io = true;
|
|
1171
1161
|
{
|
|
1172
1162
|
/*
|
|
1173
1163
|
* Reseek keys from sequential Data Blocks within same partitioned
|
|
@@ -1248,7 +1238,7 @@ TEST_P(PrefetchTest2, DecreaseReadAheadIfInCache) {
|
|
|
1248
1238
|
Close();
|
|
1249
1239
|
}
|
|
1250
1240
|
|
|
1251
|
-
TEST_P(
|
|
1241
|
+
TEST_P(PrefetchTest1, SeekParallelizationTest) {
|
|
1252
1242
|
const int kNumKeys = 2000;
|
|
1253
1243
|
// Set options
|
|
1254
1244
|
std::shared_ptr<MockFS> fs =
|
|
@@ -1341,12 +1331,8 @@ TEST_P(PrefetchTest2, SeekParallelizationTest) {
|
|
|
1341
1331
|
{
|
|
1342
1332
|
HistogramData async_read_bytes;
|
|
1343
1333
|
options.statistics->histogramData(ASYNC_READ_BYTES, &async_read_bytes);
|
|
1344
|
-
|
|
1345
|
-
|
|
1346
|
-
} else {
|
|
1347
|
-
ASSERT_GT(async_read_bytes.count, 0);
|
|
1348
|
-
ASSERT_GT(get_perf_context()->number_async_seek, 0);
|
|
1349
|
-
}
|
|
1334
|
+
ASSERT_GT(async_read_bytes.count, 0);
|
|
1335
|
+
ASSERT_GT(get_perf_context()->number_async_seek, 0);
|
|
1350
1336
|
}
|
|
1351
1337
|
|
|
1352
1338
|
buff_prefetch_count = 0;
|
|
@@ -1356,11 +1342,7 @@ TEST_P(PrefetchTest2, SeekParallelizationTest) {
|
|
|
1356
1342
|
|
|
1357
1343
|
extern "C" bool RocksDbIOUringEnable() { return true; }
|
|
1358
1344
|
|
|
1359
|
-
|
|
1360
|
-
public ::testing::WithParamInterface<bool> {
|
|
1361
|
-
public:
|
|
1362
|
-
PrefetchTestWithPosix() : DBTestBase("prefetch_test_with_posix", true) {}
|
|
1363
|
-
|
|
1345
|
+
namespace {
|
|
1364
1346
|
#ifndef ROCKSDB_LITE
|
|
1365
1347
|
#ifdef GFLAGS
|
|
1366
1348
|
const int kMaxArgCount = 100;
|
|
@@ -1387,144 +1369,95 @@ class PrefetchTestWithPosix : public DBTestBase,
|
|
|
1387
1369
|
}
|
|
1388
1370
|
#endif // GFLAGS
|
|
1389
1371
|
#endif // ROCKSDB_LITE
|
|
1390
|
-
}
|
|
1391
|
-
|
|
1392
|
-
INSTANTIATE_TEST_CASE_P(PrefetchTestWithPosix, PrefetchTestWithPosix,
|
|
1393
|
-
::testing::Bool());
|
|
1372
|
+
} // namespace
|
|
1394
1373
|
|
|
1395
1374
|
// Tests the default implementation of ReadAsync API with PosixFileSystem.
|
|
1396
|
-
TEST_P(
|
|
1397
|
-
|
|
1398
|
-
|
|
1399
|
-
|
|
1400
|
-
|
|
1401
|
-
|
|
1402
|
-
const int kNumKeys = 1000;
|
|
1403
|
-
std::shared_ptr<MockFS> fs = std::make_shared<MockFS>(
|
|
1404
|
-
FileSystem::Default(), /*support_prefetch=*/false);
|
|
1405
|
-
std::unique_ptr<Env> env(new CompositeEnvWrapper(env_, fs));
|
|
1406
|
-
|
|
1407
|
-
bool use_direct_io = false;
|
|
1408
|
-
Options options = CurrentOptions();
|
|
1409
|
-
options.write_buffer_size = 1024;
|
|
1410
|
-
options.create_if_missing = true;
|
|
1411
|
-
options.compression = kNoCompression;
|
|
1412
|
-
options.env = env.get();
|
|
1413
|
-
options.statistics = CreateDBStatistics();
|
|
1414
|
-
if (use_direct_io) {
|
|
1415
|
-
options.use_direct_reads = true;
|
|
1416
|
-
options.use_direct_io_for_flush_and_compaction = true;
|
|
1417
|
-
}
|
|
1418
|
-
BlockBasedTableOptions table_options;
|
|
1419
|
-
table_options.no_block_cache = true;
|
|
1420
|
-
table_options.cache_index_and_filter_blocks = false;
|
|
1421
|
-
table_options.metadata_block_size = 1024;
|
|
1422
|
-
table_options.index_type =
|
|
1423
|
-
BlockBasedTableOptions::IndexType::kTwoLevelIndexSearch;
|
|
1424
|
-
options.table_factory.reset(NewBlockBasedTableFactory(table_options));
|
|
1375
|
+
TEST_P(PrefetchTest, ReadAsyncWithPosixFS) {
|
|
1376
|
+
if (mem_env_ || encrypted_env_) {
|
|
1377
|
+
ROCKSDB_GTEST_SKIP("Test requires non-mem or non-encrypted environment");
|
|
1378
|
+
return;
|
|
1379
|
+
}
|
|
1425
1380
|
|
|
1426
|
-
|
|
1427
|
-
|
|
1428
|
-
|
|
1429
|
-
|
|
1430
|
-
|
|
1431
|
-
|
|
1432
|
-
|
|
1381
|
+
const int kNumKeys = 1000;
|
|
1382
|
+
std::shared_ptr<MockFS> fs = std::make_shared<MockFS>(
|
|
1383
|
+
FileSystem::Default(), /*support_prefetch=*/false);
|
|
1384
|
+
std::unique_ptr<Env> env(new CompositeEnvWrapper(env_, fs));
|
|
1385
|
+
|
|
1386
|
+
bool use_direct_io = std::get<0>(GetParam());
|
|
1387
|
+
Options options = CurrentOptions();
|
|
1388
|
+
options.write_buffer_size = 1024;
|
|
1389
|
+
options.create_if_missing = true;
|
|
1390
|
+
options.compression = kNoCompression;
|
|
1391
|
+
options.env = env.get();
|
|
1392
|
+
options.statistics = CreateDBStatistics();
|
|
1393
|
+
if (use_direct_io) {
|
|
1394
|
+
options.use_direct_reads = true;
|
|
1395
|
+
options.use_direct_io_for_flush_and_compaction = true;
|
|
1396
|
+
}
|
|
1397
|
+
BlockBasedTableOptions table_options;
|
|
1398
|
+
table_options.no_block_cache = true;
|
|
1399
|
+
table_options.cache_index_and_filter_blocks = false;
|
|
1400
|
+
table_options.metadata_block_size = 1024;
|
|
1401
|
+
table_options.index_type =
|
|
1402
|
+
BlockBasedTableOptions::IndexType::kTwoLevelIndexSearch;
|
|
1403
|
+
options.table_factory.reset(NewBlockBasedTableFactory(table_options));
|
|
1404
|
+
|
|
1405
|
+
Status s = TryReopen(options);
|
|
1406
|
+
if (use_direct_io && (s.IsNotSupported() || s.IsInvalidArgument())) {
|
|
1407
|
+
// If direct IO is not supported, skip the test
|
|
1408
|
+
return;
|
|
1409
|
+
} else {
|
|
1410
|
+
ASSERT_OK(s);
|
|
1411
|
+
}
|
|
1433
1412
|
|
|
1434
|
-
|
|
1435
|
-
|
|
1436
|
-
|
|
1437
|
-
|
|
1438
|
-
|
|
1439
|
-
|
|
1440
|
-
|
|
1441
|
-
|
|
1442
|
-
|
|
1413
|
+
int total_keys = 0;
|
|
1414
|
+
// Write the keys.
|
|
1415
|
+
{
|
|
1416
|
+
WriteBatch batch;
|
|
1417
|
+
Random rnd(309);
|
|
1418
|
+
for (int j = 0; j < 5; j++) {
|
|
1419
|
+
for (int i = j * kNumKeys; i < (j + 1) * kNumKeys; i++) {
|
|
1420
|
+
ASSERT_OK(batch.Put(BuildKey(i), rnd.RandomString(1000)));
|
|
1421
|
+
total_keys++;
|
|
1422
|
+
}
|
|
1423
|
+
ASSERT_OK(db_->Write(WriteOptions(), &batch));
|
|
1424
|
+
ASSERT_OK(Flush());
|
|
1443
1425
|
}
|
|
1444
|
-
|
|
1445
|
-
ASSERT_OK(Flush());
|
|
1426
|
+
MoveFilesToLevel(2);
|
|
1446
1427
|
}
|
|
1447
|
-
MoveFilesToLevel(2);
|
|
1448
|
-
}
|
|
1449
|
-
|
|
1450
|
-
int buff_prefetch_count = 0;
|
|
1451
|
-
bool read_async_called = false;
|
|
1452
|
-
ReadOptions ro;
|
|
1453
|
-
ro.adaptive_readahead = true;
|
|
1454
|
-
ro.async_io = true;
|
|
1455
|
-
|
|
1456
|
-
if (GetParam()) {
|
|
1457
|
-
ro.readahead_size = 16 * 1024;
|
|
1458
|
-
}
|
|
1459
|
-
|
|
1460
|
-
SyncPoint::GetInstance()->SetCallBack(
|
|
1461
|
-
"FilePrefetchBuffer::PrefetchAsyncInternal:Start",
|
|
1462
|
-
[&](void*) { buff_prefetch_count++; });
|
|
1463
1428
|
|
|
1464
|
-
|
|
1465
|
-
|
|
1466
|
-
|
|
1467
|
-
|
|
1468
|
-
|
|
1469
|
-
// Read the keys.
|
|
1470
|
-
{
|
|
1471
|
-
ASSERT_OK(options.statistics->Reset());
|
|
1472
|
-
get_perf_context()->Reset();
|
|
1429
|
+
int buff_prefetch_count = 0;
|
|
1430
|
+
bool read_async_called = false;
|
|
1431
|
+
ReadOptions ro;
|
|
1432
|
+
ro.adaptive_readahead = true;
|
|
1433
|
+
ro.async_io = true;
|
|
1473
1434
|
|
|
1474
|
-
|
|
1475
|
-
|
|
1476
|
-
for (iter->SeekToFirst(); iter->Valid(); iter->Next()) {
|
|
1477
|
-
ASSERT_OK(iter->status());
|
|
1478
|
-
num_keys++;
|
|
1435
|
+
if (std::get<1>(GetParam())) {
|
|
1436
|
+
ro.readahead_size = 16 * 1024;
|
|
1479
1437
|
}
|
|
1480
1438
|
|
|
1481
|
-
|
|
1482
|
-
|
|
1483
|
-
|
|
1484
|
-
// Check stats to make sure async prefetch is done.
|
|
1485
|
-
{
|
|
1486
|
-
HistogramData async_read_bytes;
|
|
1487
|
-
options.statistics->histogramData(ASYNC_READ_BYTES, &async_read_bytes);
|
|
1488
|
-
HistogramData prefetched_bytes_discarded;
|
|
1489
|
-
options.statistics->histogramData(PREFETCHED_BYTES_DISCARDED,
|
|
1490
|
-
&prefetched_bytes_discarded);
|
|
1439
|
+
SyncPoint::GetInstance()->SetCallBack(
|
|
1440
|
+
"FilePrefetchBuffer::PrefetchAsyncInternal:Start",
|
|
1441
|
+
[&](void*) { buff_prefetch_count++; });
|
|
1491
1442
|
|
|
1492
|
-
|
|
1493
|
-
|
|
1494
|
-
|
|
1495
|
-
|
|
1496
|
-
} else {
|
|
1497
|
-
ASSERT_EQ(async_read_bytes.count, 0);
|
|
1498
|
-
}
|
|
1499
|
-
ASSERT_GT(prefetched_bytes_discarded.count, 0);
|
|
1500
|
-
}
|
|
1501
|
-
ASSERT_EQ(get_perf_context()->number_async_seek, 0);
|
|
1502
|
-
}
|
|
1443
|
+
SyncPoint::GetInstance()->SetCallBack(
|
|
1444
|
+
"UpdateResults::io_uring_result",
|
|
1445
|
+
[&](void* /*arg*/) { read_async_called = true; });
|
|
1446
|
+
SyncPoint::GetInstance()->EnableProcessing();
|
|
1503
1447
|
|
|
1504
|
-
|
|
1505
|
-
// Read the keys using seek.
|
|
1448
|
+
// Read the keys.
|
|
1506
1449
|
{
|
|
1507
1450
|
ASSERT_OK(options.statistics->Reset());
|
|
1508
1451
|
get_perf_context()->Reset();
|
|
1509
1452
|
|
|
1510
1453
|
auto iter = std::unique_ptr<Iterator>(db_->NewIterator(ro));
|
|
1511
1454
|
int num_keys = 0;
|
|
1512
|
-
iter->
|
|
1513
|
-
while (iter->Valid()) {
|
|
1514
|
-
ASSERT_OK(iter->status());
|
|
1515
|
-
num_keys++;
|
|
1516
|
-
iter->Next();
|
|
1517
|
-
}
|
|
1518
|
-
ASSERT_OK(iter->status());
|
|
1519
|
-
|
|
1520
|
-
iter->Seek(BuildKey(450));
|
|
1521
|
-
while (iter->Valid()) {
|
|
1455
|
+
for (iter->SeekToFirst(); iter->Valid(); iter->Next()) {
|
|
1522
1456
|
ASSERT_OK(iter->status());
|
|
1523
1457
|
num_keys++;
|
|
1524
|
-
iter->Prev();
|
|
1525
1458
|
}
|
|
1526
1459
|
|
|
1527
|
-
ASSERT_EQ(num_keys, total_keys
|
|
1460
|
+
ASSERT_EQ(num_keys, total_keys);
|
|
1528
1461
|
ASSERT_GT(buff_prefetch_count, 0);
|
|
1529
1462
|
|
|
1530
1463
|
// Check stats to make sure async prefetch is done.
|
|
@@ -1539,146 +1472,193 @@ TEST_P(PrefetchTestWithPosix, ReadAsyncWithPosixFS) {
|
|
|
1539
1472
|
// won't submit async requests.
|
|
1540
1473
|
if (read_async_called) {
|
|
1541
1474
|
ASSERT_GT(async_read_bytes.count, 0);
|
|
1542
|
-
ASSERT_GT(get_perf_context()->number_async_seek, 0);
|
|
1543
1475
|
} else {
|
|
1544
1476
|
ASSERT_EQ(async_read_bytes.count, 0);
|
|
1545
|
-
ASSERT_EQ(get_perf_context()->number_async_seek, 0);
|
|
1546
1477
|
}
|
|
1547
1478
|
ASSERT_GT(prefetched_bytes_discarded.count, 0);
|
|
1548
1479
|
}
|
|
1480
|
+
ASSERT_EQ(get_perf_context()->number_async_seek, 0);
|
|
1549
1481
|
}
|
|
1550
|
-
}
|
|
1551
1482
|
|
|
1552
|
-
|
|
1553
|
-
|
|
1483
|
+
{
|
|
1484
|
+
// Read the keys using seek.
|
|
1485
|
+
{
|
|
1486
|
+
ASSERT_OK(options.statistics->Reset());
|
|
1487
|
+
get_perf_context()->Reset();
|
|
1488
|
+
|
|
1489
|
+
auto iter = std::unique_ptr<Iterator>(db_->NewIterator(ro));
|
|
1490
|
+
int num_keys = 0;
|
|
1491
|
+
iter->Seek(BuildKey(450));
|
|
1492
|
+
while (iter->Valid()) {
|
|
1493
|
+
ASSERT_OK(iter->status());
|
|
1494
|
+
num_keys++;
|
|
1495
|
+
iter->Next();
|
|
1496
|
+
}
|
|
1497
|
+
ASSERT_OK(iter->status());
|
|
1554
1498
|
|
|
1555
|
-
|
|
1556
|
-
|
|
1499
|
+
iter->Seek(BuildKey(450));
|
|
1500
|
+
while (iter->Valid()) {
|
|
1501
|
+
ASSERT_OK(iter->status());
|
|
1502
|
+
num_keys++;
|
|
1503
|
+
iter->Prev();
|
|
1504
|
+
}
|
|
1557
1505
|
|
|
1558
|
-
|
|
1559
|
-
|
|
1560
|
-
|
|
1561
|
-
|
|
1562
|
-
|
|
1563
|
-
|
|
1564
|
-
|
|
1506
|
+
ASSERT_EQ(num_keys, total_keys + 1);
|
|
1507
|
+
ASSERT_GT(buff_prefetch_count, 0);
|
|
1508
|
+
|
|
1509
|
+
// Check stats to make sure async prefetch is done.
|
|
1510
|
+
{
|
|
1511
|
+
HistogramData async_read_bytes;
|
|
1512
|
+
options.statistics->histogramData(ASYNC_READ_BYTES,
|
|
1513
|
+
&async_read_bytes);
|
|
1514
|
+
HistogramData prefetched_bytes_discarded;
|
|
1515
|
+
options.statistics->histogramData(PREFETCHED_BYTES_DISCARDED,
|
|
1516
|
+
&prefetched_bytes_discarded);
|
|
1517
|
+
|
|
1518
|
+
// Not all platforms support iouring. In that case, ReadAsync in posix
|
|
1519
|
+
// won't submit async requests.
|
|
1520
|
+
if (read_async_called) {
|
|
1521
|
+
ASSERT_GT(async_read_bytes.count, 0);
|
|
1522
|
+
ASSERT_GT(get_perf_context()->number_async_seek, 0);
|
|
1523
|
+
} else {
|
|
1524
|
+
ASSERT_EQ(async_read_bytes.count, 0);
|
|
1525
|
+
ASSERT_EQ(get_perf_context()->number_async_seek, 0);
|
|
1526
|
+
}
|
|
1527
|
+
ASSERT_GT(prefetched_bytes_discarded.count, 0);
|
|
1528
|
+
}
|
|
1529
|
+
}
|
|
1530
|
+
}
|
|
1565
1531
|
|
|
1566
|
-
|
|
1567
|
-
|
|
1568
|
-
FileSystem::Default(), /*support_prefetch=*/false);
|
|
1569
|
-
std::unique_ptr<Env> env(new CompositeEnvWrapper(env_, fs));
|
|
1532
|
+
SyncPoint::GetInstance()->DisableProcessing();
|
|
1533
|
+
SyncPoint::GetInstance()->ClearAllCallBacks();
|
|
1570
1534
|
|
|
1571
|
-
|
|
1572
|
-
Options options = CurrentOptions();
|
|
1573
|
-
options.write_buffer_size = 1024;
|
|
1574
|
-
options.create_if_missing = true;
|
|
1575
|
-
options.compression = kNoCompression;
|
|
1576
|
-
options.env = env.get();
|
|
1577
|
-
options.statistics = CreateDBStatistics();
|
|
1578
|
-
if (use_direct_io) {
|
|
1579
|
-
options.use_direct_reads = true;
|
|
1580
|
-
options.use_direct_io_for_flush_and_compaction = true;
|
|
1535
|
+
Close();
|
|
1581
1536
|
}
|
|
1582
|
-
BlockBasedTableOptions table_options;
|
|
1583
|
-
table_options.no_block_cache = true;
|
|
1584
|
-
table_options.cache_index_and_filter_blocks = false;
|
|
1585
|
-
table_options.metadata_block_size = 1024;
|
|
1586
|
-
table_options.index_type =
|
|
1587
|
-
BlockBasedTableOptions::IndexType::kTwoLevelIndexSearch;
|
|
1588
|
-
options.table_factory.reset(NewBlockBasedTableFactory(table_options));
|
|
1589
1537
|
|
|
1590
|
-
|
|
1591
|
-
|
|
1592
|
-
|
|
1593
|
-
|
|
1594
|
-
|
|
1595
|
-
|
|
1596
|
-
|
|
1538
|
+
#ifndef ROCKSDB_LITE
|
|
1539
|
+
#ifdef GFLAGS
|
|
1540
|
+
TEST_P(PrefetchTest, TraceReadAsyncWithCallbackWrapper) {
|
|
1541
|
+
if (mem_env_ || encrypted_env_) {
|
|
1542
|
+
ROCKSDB_GTEST_SKIP("Test requires non-mem or non-encrypted environment");
|
|
1543
|
+
return;
|
|
1544
|
+
}
|
|
1597
1545
|
|
|
1598
|
-
|
|
1599
|
-
|
|
1600
|
-
|
|
1601
|
-
|
|
1602
|
-
|
|
1603
|
-
|
|
1604
|
-
|
|
1605
|
-
|
|
1606
|
-
|
|
1546
|
+
const int kNumKeys = 1000;
|
|
1547
|
+
std::shared_ptr<MockFS> fs = std::make_shared<MockFS>(
|
|
1548
|
+
FileSystem::Default(), /*support_prefetch=*/false);
|
|
1549
|
+
std::unique_ptr<Env> env(new CompositeEnvWrapper(env_, fs));
|
|
1550
|
+
|
|
1551
|
+
bool use_direct_io = std::get<0>(GetParam());
|
|
1552
|
+
Options options = CurrentOptions();
|
|
1553
|
+
options.write_buffer_size = 1024;
|
|
1554
|
+
options.create_if_missing = true;
|
|
1555
|
+
options.compression = kNoCompression;
|
|
1556
|
+
options.env = env.get();
|
|
1557
|
+
options.statistics = CreateDBStatistics();
|
|
1558
|
+
if (use_direct_io) {
|
|
1559
|
+
options.use_direct_reads = true;
|
|
1560
|
+
options.use_direct_io_for_flush_and_compaction = true;
|
|
1561
|
+
}
|
|
1562
|
+
BlockBasedTableOptions table_options;
|
|
1563
|
+
table_options.no_block_cache = true;
|
|
1564
|
+
table_options.cache_index_and_filter_blocks = false;
|
|
1565
|
+
table_options.metadata_block_size = 1024;
|
|
1566
|
+
table_options.index_type =
|
|
1567
|
+
BlockBasedTableOptions::IndexType::kTwoLevelIndexSearch;
|
|
1568
|
+
options.table_factory.reset(NewBlockBasedTableFactory(table_options));
|
|
1569
|
+
|
|
1570
|
+
Status s = TryReopen(options);
|
|
1571
|
+
if (use_direct_io && (s.IsNotSupported() || s.IsInvalidArgument())) {
|
|
1572
|
+
// If direct IO is not supported, skip the test
|
|
1573
|
+
return;
|
|
1574
|
+
} else {
|
|
1575
|
+
ASSERT_OK(s);
|
|
1576
|
+
}
|
|
1577
|
+
|
|
1578
|
+
int total_keys = 0;
|
|
1579
|
+
// Write the keys.
|
|
1580
|
+
{
|
|
1581
|
+
WriteBatch batch;
|
|
1582
|
+
Random rnd(309);
|
|
1583
|
+
for (int j = 0; j < 5; j++) {
|
|
1584
|
+
for (int i = j * kNumKeys; i < (j + 1) * kNumKeys; i++) {
|
|
1585
|
+
ASSERT_OK(batch.Put(BuildKey(i), rnd.RandomString(1000)));
|
|
1586
|
+
total_keys++;
|
|
1587
|
+
}
|
|
1588
|
+
ASSERT_OK(db_->Write(WriteOptions(), &batch));
|
|
1589
|
+
ASSERT_OK(Flush());
|
|
1607
1590
|
}
|
|
1608
|
-
|
|
1609
|
-
ASSERT_OK(Flush());
|
|
1591
|
+
MoveFilesToLevel(2);
|
|
1610
1592
|
}
|
|
1611
|
-
MoveFilesToLevel(2);
|
|
1612
|
-
}
|
|
1613
1593
|
|
|
1614
|
-
|
|
1615
|
-
|
|
1616
|
-
|
|
1617
|
-
|
|
1618
|
-
|
|
1594
|
+
int buff_prefetch_count = 0;
|
|
1595
|
+
bool read_async_called = false;
|
|
1596
|
+
ReadOptions ro;
|
|
1597
|
+
ro.adaptive_readahead = true;
|
|
1598
|
+
ro.async_io = true;
|
|
1619
1599
|
|
|
1620
|
-
|
|
1621
|
-
|
|
1622
|
-
|
|
1600
|
+
if (std::get<1>(GetParam())) {
|
|
1601
|
+
ro.readahead_size = 16 * 1024;
|
|
1602
|
+
}
|
|
1623
1603
|
|
|
1624
|
-
|
|
1625
|
-
|
|
1626
|
-
|
|
1604
|
+
SyncPoint::GetInstance()->SetCallBack(
|
|
1605
|
+
"FilePrefetchBuffer::PrefetchAsyncInternal:Start",
|
|
1606
|
+
[&](void*) { buff_prefetch_count++; });
|
|
1627
1607
|
|
|
1628
|
-
|
|
1629
|
-
|
|
1630
|
-
|
|
1631
|
-
|
|
1608
|
+
SyncPoint::GetInstance()->SetCallBack(
|
|
1609
|
+
"UpdateResults::io_uring_result",
|
|
1610
|
+
[&](void* /*arg*/) { read_async_called = true; });
|
|
1611
|
+
SyncPoint::GetInstance()->EnableProcessing();
|
|
1632
1612
|
|
|
1633
|
-
|
|
1634
|
-
|
|
1635
|
-
|
|
1636
|
-
|
|
1637
|
-
|
|
1638
|
-
|
|
1639
|
-
|
|
1640
|
-
|
|
1641
|
-
|
|
1642
|
-
|
|
1643
|
-
|
|
1644
|
-
|
|
1613
|
+
// Read the keys.
|
|
1614
|
+
{
|
|
1615
|
+
// Start io_tracing.
|
|
1616
|
+
WriteOptions write_opt;
|
|
1617
|
+
TraceOptions trace_opt;
|
|
1618
|
+
std::unique_ptr<TraceWriter> trace_writer;
|
|
1619
|
+
std::string trace_file_path = dbname_ + "/io_trace_file";
|
|
1620
|
+
|
|
1621
|
+
ASSERT_OK(NewFileTraceWriter(env_, EnvOptions(), trace_file_path,
|
|
1622
|
+
&trace_writer));
|
|
1623
|
+
ASSERT_OK(db_->StartIOTrace(trace_opt, std::move(trace_writer)));
|
|
1624
|
+
ASSERT_OK(options.statistics->Reset());
|
|
1645
1625
|
|
|
1646
|
-
|
|
1647
|
-
|
|
1648
|
-
|
|
1649
|
-
|
|
1650
|
-
|
|
1651
|
-
|
|
1626
|
+
auto iter = std::unique_ptr<Iterator>(db_->NewIterator(ro));
|
|
1627
|
+
int num_keys = 0;
|
|
1628
|
+
for (iter->SeekToFirst(); iter->Valid(); iter->Next()) {
|
|
1629
|
+
ASSERT_OK(iter->status());
|
|
1630
|
+
num_keys++;
|
|
1631
|
+
}
|
|
1652
1632
|
|
|
1653
|
-
|
|
1654
|
-
|
|
1655
|
-
|
|
1633
|
+
// End the tracing.
|
|
1634
|
+
ASSERT_OK(db_->EndIOTrace());
|
|
1635
|
+
ASSERT_OK(env_->FileExists(trace_file_path));
|
|
1656
1636
|
|
|
1657
|
-
|
|
1658
|
-
|
|
1637
|
+
ASSERT_EQ(num_keys, total_keys);
|
|
1638
|
+
ASSERT_GT(buff_prefetch_count, 0);
|
|
1659
1639
|
|
|
1660
|
-
|
|
1661
|
-
|
|
1662
|
-
|
|
1663
|
-
|
|
1664
|
-
|
|
1665
|
-
|
|
1666
|
-
|
|
1667
|
-
|
|
1668
|
-
|
|
1669
|
-
|
|
1640
|
+
// Check stats to make sure async prefetch is done.
|
|
1641
|
+
{
|
|
1642
|
+
HistogramData async_read_bytes;
|
|
1643
|
+
options.statistics->histogramData(ASYNC_READ_BYTES, &async_read_bytes);
|
|
1644
|
+
// Not all platforms support iouring. In that case, ReadAsync in posix
|
|
1645
|
+
// won't submit async requests.
|
|
1646
|
+
if (read_async_called) {
|
|
1647
|
+
ASSERT_GT(async_read_bytes.count, 0);
|
|
1648
|
+
} else {
|
|
1649
|
+
ASSERT_EQ(async_read_bytes.count, 0);
|
|
1650
|
+
}
|
|
1670
1651
|
}
|
|
1671
|
-
}
|
|
1672
1652
|
|
|
1673
|
-
|
|
1674
|
-
|
|
1675
|
-
|
|
1653
|
+
// Check the file to see if ReadAsync is logged.
|
|
1654
|
+
RunIOTracerParserTool(trace_file_path);
|
|
1655
|
+
}
|
|
1676
1656
|
|
|
1677
|
-
|
|
1678
|
-
|
|
1657
|
+
SyncPoint::GetInstance()->DisableProcessing();
|
|
1658
|
+
SyncPoint::GetInstance()->ClearAllCallBacks();
|
|
1679
1659
|
|
|
1680
|
-
|
|
1681
|
-
}
|
|
1660
|
+
Close();
|
|
1661
|
+
}
|
|
1682
1662
|
#endif // GFLAGS
|
|
1683
1663
|
#endif // ROCKSDB_LITE
|
|
1684
1664
|
} // namespace ROCKSDB_NAMESPACE
|