@nxtedition/rocksdb 12.1.3 → 12.1.5
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 +12 -13
- package/binding.gyp +0 -4
- package/deps/rocksdb/rocksdb/Makefile +10 -5
- package/deps/rocksdb/rocksdb/TARGETS +9 -7
- package/deps/rocksdb/rocksdb/cache/cache.cc +15 -11
- package/deps/rocksdb/rocksdb/cache/cache_test.cc +26 -0
- package/deps/rocksdb/rocksdb/cache/clock_cache.cc +16 -0
- package/deps/rocksdb/rocksdb/cache/clock_cache.h +6 -0
- package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache.cc +38 -8
- package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache.h +2 -0
- package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache_test.cc +4 -0
- package/deps/rocksdb/rocksdb/cache/lru_cache.cc +11 -0
- package/deps/rocksdb/rocksdb/cache/lru_cache.h +6 -0
- package/deps/rocksdb/rocksdb/cache/secondary_cache_adapter.cc +2 -1
- package/deps/rocksdb/rocksdb/cache/tiered_secondary_cache_test.cc +56 -0
- package/deps/rocksdb/rocksdb/db/arena_wrapped_db_iter.cc +12 -9
- package/deps/rocksdb/rocksdb/db/blob/blob_file_cache.cc +10 -0
- package/deps/rocksdb/rocksdb/db/blob/blob_file_cache.h +9 -0
- package/deps/rocksdb/rocksdb/db/c.cc +9 -0
- package/deps/rocksdb/rocksdb/db/c_test.c +12 -1
- package/deps/rocksdb/rocksdb/db/column_family.cc +6 -23
- package/deps/rocksdb/rocksdb/db/column_family.h +1 -2
- package/deps/rocksdb/rocksdb/db/compaction/compaction.cc +4 -5
- package/deps/rocksdb/rocksdb/db/compaction/compaction.h +4 -4
- package/deps/rocksdb/rocksdb/db/compaction/compaction_job.cc +14 -6
- package/deps/rocksdb/rocksdb/db/compaction/compaction_job.h +19 -16
- package/deps/rocksdb/rocksdb/db/compaction/compaction_job_test.cc +34 -30
- package/deps/rocksdb/rocksdb/db/compaction/compaction_outputs.h +2 -1
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker.cc +2 -1
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker.h +1 -1
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_fifo.cc +16 -31
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_fifo.h +2 -1
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_test.cc +7 -50
- package/deps/rocksdb/rocksdb/db/compaction/compaction_service_job.cc +95 -84
- package/deps/rocksdb/rocksdb/db/compaction/compaction_service_test.cc +616 -5
- package/deps/rocksdb/rocksdb/db/compaction/compaction_state.cc +1 -1
- package/deps/rocksdb/rocksdb/db/compaction/subcompaction_state.cc +1 -1
- package/deps/rocksdb/rocksdb/db/compaction/subcompaction_state.h +1 -1
- package/deps/rocksdb/rocksdb/db/compaction/tiered_compaction_test.cc +8 -2
- package/deps/rocksdb/rocksdb/db/db_basic_test.cc +93 -69
- package/deps/rocksdb/rocksdb/db/db_bloom_filter_test.cc +353 -89
- package/deps/rocksdb/rocksdb/db/db_compaction_test.cc +4 -3
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl.cc +116 -14
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl.h +67 -8
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_compaction_flush.cc +42 -14
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_debug.cc +50 -0
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_experimental.cc +1 -1
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_files.cc +79 -32
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_open.cc +36 -59
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_secondary.cc +72 -39
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_write.cc +14 -12
- package/deps/rocksdb/rocksdb/db/db_io_failure_test.cc +75 -0
- package/deps/rocksdb/rocksdb/db/db_iter.cc +7 -3
- package/deps/rocksdb/rocksdb/db/db_secondary_test.cc +1 -1
- package/deps/rocksdb/rocksdb/db/db_sst_test.cc +24 -0
- package/deps/rocksdb/rocksdb/db/db_test2.cc +36 -22
- package/deps/rocksdb/rocksdb/db/db_wal_test.cc +23 -0
- package/deps/rocksdb/rocksdb/db/db_with_timestamp_basic_test.cc +2 -0
- package/deps/rocksdb/rocksdb/db/error_handler.cc +28 -3
- package/deps/rocksdb/rocksdb/db/error_handler.h +2 -1
- package/deps/rocksdb/rocksdb/db/event_helpers.cc +1 -0
- package/deps/rocksdb/rocksdb/db/experimental.cc +165 -33
- package/deps/rocksdb/rocksdb/db/external_sst_file_ingestion_job.cc +13 -5
- package/deps/rocksdb/rocksdb/db/external_sst_file_test.cc +37 -28
- package/deps/rocksdb/rocksdb/db/flush_job.cc +11 -6
- package/deps/rocksdb/rocksdb/db/flush_job_test.cc +7 -6
- package/deps/rocksdb/rocksdb/db/forward_iterator.cc +14 -6
- package/deps/rocksdb/rocksdb/db/job_context.h +4 -0
- package/deps/rocksdb/rocksdb/db/memtable.cc +24 -14
- package/deps/rocksdb/rocksdb/db/memtable.h +2 -1
- package/deps/rocksdb/rocksdb/db/memtable_list.cc +61 -33
- package/deps/rocksdb/rocksdb/db/memtable_list.h +8 -0
- package/deps/rocksdb/rocksdb/db/repair.cc +4 -2
- package/deps/rocksdb/rocksdb/db/table_cache.cc +2 -0
- package/deps/rocksdb/rocksdb/db/version_builder.cc +14 -11
- package/deps/rocksdb/rocksdb/db/version_edit_handler.h +20 -4
- package/deps/rocksdb/rocksdb/db/version_set.cc +40 -30
- package/deps/rocksdb/rocksdb/db/version_set.h +13 -3
- package/deps/rocksdb/rocksdb/db/version_set_test.cc +8 -76
- package/deps/rocksdb/rocksdb/db/write_batch.cc +6 -2
- package/deps/rocksdb/rocksdb/db/write_batch_test.cc +1 -1
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_common.h +1 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_gflags.cc +5 -1
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.cc +2 -1
- package/deps/rocksdb/rocksdb/db_stress_tool/expected_state.cc +25 -2
- package/deps/rocksdb/rocksdb/env/fs_remap.cc +11 -0
- package/deps/rocksdb/rocksdb/env/fs_remap.h +5 -0
- package/deps/rocksdb/rocksdb/file/sst_file_manager_impl.cc +11 -1
- package/deps/rocksdb/rocksdb/file/sst_file_manager_impl.h +3 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/advanced_cache.h +20 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/advanced_options.h +10 -8
- package/deps/rocksdb/rocksdb/include/rocksdb/c.h +4 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/compaction_job_stats.h +30 -28
- package/deps/rocksdb/rocksdb/include/rocksdb/comparator.h +10 -5
- package/deps/rocksdb/rocksdb/include/rocksdb/convenience.h +3 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/experimental.h +287 -83
- package/deps/rocksdb/rocksdb/include/rocksdb/options.h +68 -36
- package/deps/rocksdb/rocksdb/include/rocksdb/table_properties.h +8 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/ldb_cmd.h +1 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/version.h +2 -2
- package/deps/rocksdb/rocksdb/memtable/inlineskiplist.h +4 -4
- package/deps/rocksdb/rocksdb/options/customizable_test.cc +31 -0
- package/deps/rocksdb/rocksdb/options/db_options.cc +14 -0
- package/deps/rocksdb/rocksdb/options/db_options.h +2 -0
- package/deps/rocksdb/rocksdb/options/options_helper.cc +15 -4
- package/deps/rocksdb/rocksdb/options/options_helper.h +4 -0
- package/deps/rocksdb/rocksdb/options/options_parser.cc +5 -4
- package/deps/rocksdb/rocksdb/options/options_settable_test.cc +11 -1
- package/deps/rocksdb/rocksdb/options/options_test.cc +38 -45
- package/deps/rocksdb/rocksdb/port/port.h +16 -0
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_builder.cc +8 -1
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.cc +10 -20
- package/deps/rocksdb/rocksdb/table/block_based/filter_policy.cc +15 -9
- package/deps/rocksdb/rocksdb/table/format.cc +32 -4
- package/deps/rocksdb/rocksdb/table/format.h +12 -1
- package/deps/rocksdb/rocksdb/table/iterator.cc +4 -0
- package/deps/rocksdb/rocksdb/table/meta_blocks.cc +214 -161
- package/deps/rocksdb/rocksdb/table/plain/plain_table_reader.cc +4 -2
- package/deps/rocksdb/rocksdb/table/table_properties.cc +4 -0
- package/deps/rocksdb/rocksdb/table/table_reader.h +2 -2
- package/deps/rocksdb/rocksdb/table/table_test.cc +5 -4
- package/deps/rocksdb/rocksdb/test_util/testutil.cc +2 -0
- package/deps/rocksdb/rocksdb/test_util/testutil.h +2 -0
- package/deps/rocksdb/rocksdb/tools/db_bench_tool.cc +11 -2
- package/deps/rocksdb/rocksdb/tools/ldb_cmd.cc +213 -22
- package/deps/rocksdb/rocksdb/tools/ldb_cmd_impl.h +3 -0
- package/deps/rocksdb/rocksdb/util/async_file_reader.h +1 -1
- package/deps/rocksdb/rocksdb/util/compaction_job_stats_impl.cc +3 -0
- package/deps/rocksdb/rocksdb/util/coro_utils.h +2 -2
- package/deps/rocksdb/rocksdb/utilities/fault_injection_fs.cc +3 -3
- package/package.json +1 -1
- package/prebuilds/darwin-arm64/@nxtedition+rocksdb.node +0 -0
- package/prebuilds/linux-x64/@nxtedition+rocksdb.node +0 -0
|
@@ -1119,48 +1119,6 @@ TEST_F(CompactionPickerTest, FIFOToCold1) {
|
|
|
1119
1119
|
ASSERT_EQ(3U, compaction->input(0, 0)->fd.GetNumber());
|
|
1120
1120
|
}
|
|
1121
1121
|
|
|
1122
|
-
TEST_F(CompactionPickerTest, FIFOToCold2) {
|
|
1123
|
-
NewVersionStorage(1, kCompactionStyleFIFO);
|
|
1124
|
-
const uint64_t kFileSize = 100000;
|
|
1125
|
-
const uint64_t kMaxSize = kFileSize * 100000;
|
|
1126
|
-
uint64_t kColdThreshold = 2000;
|
|
1127
|
-
|
|
1128
|
-
fifo_options_.max_table_files_size = kMaxSize;
|
|
1129
|
-
fifo_options_.file_temperature_age_thresholds = {
|
|
1130
|
-
{Temperature::kCold, kColdThreshold}};
|
|
1131
|
-
mutable_cf_options_.compaction_options_fifo = fifo_options_;
|
|
1132
|
-
mutable_cf_options_.level0_file_num_compaction_trigger = 100;
|
|
1133
|
-
mutable_cf_options_.max_compaction_bytes = kFileSize * 100;
|
|
1134
|
-
FIFOCompactionPicker fifo_compaction_picker(ioptions_, &icmp_);
|
|
1135
|
-
|
|
1136
|
-
int64_t current_time = 0;
|
|
1137
|
-
ASSERT_OK(Env::Default()->GetCurrentTime(¤t_time));
|
|
1138
|
-
uint64_t threshold_time =
|
|
1139
|
-
static_cast<uint64_t>(current_time) - kColdThreshold;
|
|
1140
|
-
Add(0, 6U, "240", "290", 2 * kFileSize, 0, 2900, 3000, 0, true,
|
|
1141
|
-
Temperature::kUnknown, static_cast<uint64_t>(current_time) - 100);
|
|
1142
|
-
Add(0, 4U, "260", "300", 1 * kFileSize, 0, 2500, 2600, 0, true,
|
|
1143
|
-
Temperature::kUnknown, threshold_time);
|
|
1144
|
-
// The following two files qualify for compaction to kCold.
|
|
1145
|
-
Add(0, 3U, "200", "300", 4 * kFileSize, 0, 2300, 2400, 0, true,
|
|
1146
|
-
Temperature::kUnknown, threshold_time - 3000);
|
|
1147
|
-
Add(0, 2U, "200", "300", 4 * kFileSize, 0, 2100, 2200, 0, true,
|
|
1148
|
-
Temperature::kUnknown, threshold_time - 4000);
|
|
1149
|
-
UpdateVersionStorageInfo();
|
|
1150
|
-
|
|
1151
|
-
ASSERT_EQ(fifo_compaction_picker.NeedsCompaction(vstorage_.get()), true);
|
|
1152
|
-
std::unique_ptr<Compaction> compaction(fifo_compaction_picker.PickCompaction(
|
|
1153
|
-
cf_name_, mutable_cf_options_, mutable_db_options_, vstorage_.get(),
|
|
1154
|
-
&log_buffer_));
|
|
1155
|
-
ASSERT_TRUE(compaction.get() != nullptr);
|
|
1156
|
-
ASSERT_EQ(compaction->compaction_reason(),
|
|
1157
|
-
CompactionReason::kChangeTemperature);
|
|
1158
|
-
ASSERT_EQ(compaction->output_temperature(), Temperature::kCold);
|
|
1159
|
-
ASSERT_EQ(2U, compaction->num_input_files(0));
|
|
1160
|
-
ASSERT_EQ(2U, compaction->input(0, 0)->fd.GetNumber());
|
|
1161
|
-
ASSERT_EQ(3U, compaction->input(0, 1)->fd.GetNumber());
|
|
1162
|
-
}
|
|
1163
|
-
|
|
1164
1122
|
TEST_F(CompactionPickerTest, FIFOToColdMaxCompactionSize) {
|
|
1165
1123
|
NewVersionStorage(1, kCompactionStyleFIFO);
|
|
1166
1124
|
const uint64_t kFileSize = 100000;
|
|
@@ -1202,10 +1160,10 @@ TEST_F(CompactionPickerTest, FIFOToColdMaxCompactionSize) {
|
|
|
1202
1160
|
ASSERT_TRUE(compaction.get() != nullptr);
|
|
1203
1161
|
ASSERT_EQ(compaction->compaction_reason(),
|
|
1204
1162
|
CompactionReason::kChangeTemperature);
|
|
1163
|
+
// Compaction picker picks older files first and picks one file at a time.
|
|
1205
1164
|
ASSERT_EQ(compaction->output_temperature(), Temperature::kCold);
|
|
1206
|
-
ASSERT_EQ(
|
|
1165
|
+
ASSERT_EQ(1U, compaction->num_input_files(0));
|
|
1207
1166
|
ASSERT_EQ(1U, compaction->input(0, 0)->fd.GetNumber());
|
|
1208
|
-
ASSERT_EQ(2U, compaction->input(0, 1)->fd.GetNumber());
|
|
1209
1167
|
}
|
|
1210
1168
|
|
|
1211
1169
|
TEST_F(CompactionPickerTest, FIFOToColdWithExistingCold) {
|
|
@@ -1248,10 +1206,10 @@ TEST_F(CompactionPickerTest, FIFOToColdWithExistingCold) {
|
|
|
1248
1206
|
ASSERT_TRUE(compaction.get() != nullptr);
|
|
1249
1207
|
ASSERT_EQ(compaction->compaction_reason(),
|
|
1250
1208
|
CompactionReason::kChangeTemperature);
|
|
1209
|
+
// Compaction picker picks older files first and picks one file at a time.
|
|
1251
1210
|
ASSERT_EQ(compaction->output_temperature(), Temperature::kCold);
|
|
1211
|
+
ASSERT_EQ(1U, compaction->num_input_files(0));
|
|
1252
1212
|
ASSERT_EQ(2U, compaction->input(0, 0)->fd.GetNumber());
|
|
1253
|
-
ASSERT_EQ(2U, compaction->num_input_files(0));
|
|
1254
|
-
ASSERT_EQ(3U, compaction->input(0, 1)->fd.GetNumber());
|
|
1255
1213
|
}
|
|
1256
1214
|
|
|
1257
1215
|
TEST_F(CompactionPickerTest, FIFOToColdWithHotBetweenCold) {
|
|
@@ -1299,7 +1257,7 @@ TEST_F(CompactionPickerTest, FIFOToColdWithHotBetweenCold) {
|
|
|
1299
1257
|
ASSERT_EQ(2U, compaction->input(0, 0)->fd.GetNumber());
|
|
1300
1258
|
}
|
|
1301
1259
|
|
|
1302
|
-
TEST_F(CompactionPickerTest,
|
|
1260
|
+
TEST_F(CompactionPickerTest, FIFOToHotAndWarm) {
|
|
1303
1261
|
NewVersionStorage(1, kCompactionStyleFIFO);
|
|
1304
1262
|
const uint64_t kFileSize = 100000;
|
|
1305
1263
|
const uint64_t kMaxSize = kFileSize * 100000;
|
|
@@ -1344,11 +1302,10 @@ TEST_F(CompactionPickerTest, FIFOToColdAndWarm) {
|
|
|
1344
1302
|
ASSERT_TRUE(compaction.get() != nullptr);
|
|
1345
1303
|
ASSERT_EQ(compaction->compaction_reason(),
|
|
1346
1304
|
CompactionReason::kChangeTemperature);
|
|
1347
|
-
//
|
|
1305
|
+
// Compaction picker picks older files first and picks one file at a time.
|
|
1348
1306
|
ASSERT_EQ(compaction->output_temperature(), Temperature::kWarm);
|
|
1349
|
-
ASSERT_EQ(
|
|
1307
|
+
ASSERT_EQ(1U, compaction->num_input_files(0));
|
|
1350
1308
|
ASSERT_EQ(1U, compaction->input(0, 0)->fd.GetNumber());
|
|
1351
|
-
ASSERT_EQ(2U, compaction->input(0, 1)->fd.GetNumber());
|
|
1352
1309
|
}
|
|
1353
1310
|
|
|
1354
1311
|
TEST_F(CompactionPickerTest, CompactionPriMinOverlapping1) {
|
|
@@ -39,12 +39,8 @@ CompactionJob::ProcessKeyValueCompactionWithCompactionService(
|
|
|
39
39
|
MakeTableFileName(file->fd.GetNumber()));
|
|
40
40
|
}
|
|
41
41
|
}
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
compaction_input.column_family.options =
|
|
45
|
-
compaction->column_family_data()->GetLatestCFOptions();
|
|
46
|
-
compaction_input.db_options =
|
|
47
|
-
BuildDBOptions(db_options_, mutable_db_options_copy_);
|
|
42
|
+
|
|
43
|
+
compaction_input.cf_name = compaction->column_family_data()->GetName();
|
|
48
44
|
compaction_input.snapshots = existing_snapshots_;
|
|
49
45
|
compaction_input.has_begin = sub_compact->start.has_value();
|
|
50
46
|
compaction_input.begin =
|
|
@@ -52,6 +48,14 @@ CompactionJob::ProcessKeyValueCompactionWithCompactionService(
|
|
|
52
48
|
compaction_input.has_end = sub_compact->end.has_value();
|
|
53
49
|
compaction_input.end =
|
|
54
50
|
compaction_input.has_end ? sub_compact->end->ToString() : "";
|
|
51
|
+
compaction_input.options_file_number =
|
|
52
|
+
sub_compact->compaction->input_version()
|
|
53
|
+
->version_set()
|
|
54
|
+
->options_file_number();
|
|
55
|
+
|
|
56
|
+
TEST_SYNC_POINT_CALLBACK(
|
|
57
|
+
"CompactionServiceJob::ProcessKeyValueCompactionWithCompactionService",
|
|
58
|
+
&compaction_input);
|
|
55
59
|
|
|
56
60
|
std::string compaction_input_binary;
|
|
57
61
|
Status s = compaction_input.Write(&compaction_input_binary);
|
|
@@ -70,10 +74,13 @@ CompactionJob::ProcessKeyValueCompactionWithCompactionService(
|
|
|
70
74
|
ROCKS_LOG_INFO(
|
|
71
75
|
db_options_.info_log,
|
|
72
76
|
"[%s] [JOB %d] Starting remote compaction (output level: %d): %s",
|
|
73
|
-
|
|
77
|
+
compaction->column_family_data()->GetName().c_str(), job_id_,
|
|
74
78
|
compaction_input.output_level, input_files_oss.str().c_str());
|
|
75
|
-
CompactionServiceJobInfo info(
|
|
76
|
-
|
|
79
|
+
CompactionServiceJobInfo info(
|
|
80
|
+
dbname_, db_id_, db_session_id_, GetCompactionId(sub_compact),
|
|
81
|
+
thread_pri_, compaction->compaction_reason(),
|
|
82
|
+
compaction->is_full_compaction(), compaction->is_manual_compaction(),
|
|
83
|
+
compaction->bottommost_level());
|
|
77
84
|
CompactionServiceScheduleResponse response =
|
|
78
85
|
db_options_.compaction_service->Schedule(info, compaction_input_binary);
|
|
79
86
|
switch (response.status) {
|
|
@@ -84,13 +91,14 @@ CompactionJob::ProcessKeyValueCompactionWithCompactionService(
|
|
|
84
91
|
"CompactionService failed to schedule a remote compaction job.");
|
|
85
92
|
ROCKS_LOG_WARN(db_options_.info_log,
|
|
86
93
|
"[%s] [JOB %d] Remote compaction failed to start.",
|
|
87
|
-
|
|
94
|
+
compaction->column_family_data()->GetName().c_str(),
|
|
95
|
+
job_id_);
|
|
88
96
|
return response.status;
|
|
89
97
|
case CompactionServiceJobStatus::kUseLocal:
|
|
90
98
|
ROCKS_LOG_INFO(
|
|
91
99
|
db_options_.info_log,
|
|
92
100
|
"[%s] [JOB %d] Remote compaction fallback to local by API (Schedule)",
|
|
93
|
-
|
|
101
|
+
compaction->column_family_data()->GetName().c_str(), job_id_);
|
|
94
102
|
return response.status;
|
|
95
103
|
default:
|
|
96
104
|
assert(false); // unknown status
|
|
@@ -99,7 +107,7 @@ CompactionJob::ProcessKeyValueCompactionWithCompactionService(
|
|
|
99
107
|
|
|
100
108
|
ROCKS_LOG_INFO(db_options_.info_log,
|
|
101
109
|
"[%s] [JOB %d] Waiting for remote compaction...",
|
|
102
|
-
|
|
110
|
+
compaction->column_family_data()->GetName().c_str(), job_id_);
|
|
103
111
|
std::string compaction_result_binary;
|
|
104
112
|
CompactionServiceJobStatus compaction_status =
|
|
105
113
|
db_options_.compaction_service->Wait(response.scheduled_job_id,
|
|
@@ -109,7 +117,7 @@ CompactionJob::ProcessKeyValueCompactionWithCompactionService(
|
|
|
109
117
|
ROCKS_LOG_INFO(
|
|
110
118
|
db_options_.info_log,
|
|
111
119
|
"[%s] [JOB %d] Remote compaction fallback to local by API (Wait)",
|
|
112
|
-
|
|
120
|
+
compaction->column_family_data()->GetName().c_str(), job_id_);
|
|
113
121
|
return compaction_status;
|
|
114
122
|
}
|
|
115
123
|
|
|
@@ -134,9 +142,9 @@ CompactionJob::ProcessKeyValueCompactionWithCompactionService(
|
|
|
134
142
|
"result is returned).");
|
|
135
143
|
compaction_result.status.PermitUncheckedError();
|
|
136
144
|
}
|
|
137
|
-
ROCKS_LOG_WARN(
|
|
138
|
-
|
|
139
|
-
|
|
145
|
+
ROCKS_LOG_WARN(
|
|
146
|
+
db_options_.info_log, "[%s] [JOB %d] Remote compaction failed.",
|
|
147
|
+
compaction->column_family_data()->GetName().c_str(), job_id_);
|
|
140
148
|
return compaction_status;
|
|
141
149
|
}
|
|
142
150
|
|
|
@@ -162,7 +170,7 @@ CompactionJob::ProcessKeyValueCompactionWithCompactionService(
|
|
|
162
170
|
db_options_.info_log,
|
|
163
171
|
"[%s] [JOB %d] Received remote compaction result, output path: "
|
|
164
172
|
"%s, files: %s",
|
|
165
|
-
|
|
173
|
+
compaction->column_family_data()->GetName().c_str(), job_id_,
|
|
166
174
|
compaction_result.output_path.c_str(), output_files_oss.str().c_str());
|
|
167
175
|
|
|
168
176
|
// Installation Starts
|
|
@@ -195,6 +203,8 @@ CompactionJob::ProcessKeyValueCompactionWithCompactionService(
|
|
|
195
203
|
meta.oldest_ancester_time = file.oldest_ancester_time;
|
|
196
204
|
meta.file_creation_time = file.file_creation_time;
|
|
197
205
|
meta.epoch_number = file.epoch_number;
|
|
206
|
+
meta.file_checksum = file.file_checksum;
|
|
207
|
+
meta.file_checksum_func_name = file.file_checksum_func_name;
|
|
198
208
|
meta.marked_for_compaction = file.marked_for_compaction;
|
|
199
209
|
meta.unique_id = file.unique_id;
|
|
200
210
|
|
|
@@ -205,8 +215,10 @@ CompactionJob::ProcessKeyValueCompactionWithCompactionService(
|
|
|
205
215
|
}
|
|
206
216
|
sub_compact->compaction_job_stats = compaction_result.stats;
|
|
207
217
|
sub_compact->Current().SetNumOutputRecords(
|
|
208
|
-
compaction_result.num_output_records);
|
|
209
|
-
sub_compact->Current().
|
|
218
|
+
compaction_result.stats.num_output_records);
|
|
219
|
+
sub_compact->Current().SetNumOutputFiles(
|
|
220
|
+
compaction_result.stats.num_output_files);
|
|
221
|
+
sub_compact->Current().AddBytesWritten(compaction_result.bytes_written);
|
|
210
222
|
RecordTick(stats_, REMOTE_COMPACT_READ_BYTES, compaction_result.bytes_read);
|
|
211
223
|
RecordTick(stats_, REMOTE_COMPACT_WRITE_BYTES,
|
|
212
224
|
compaction_result.bytes_written);
|
|
@@ -226,6 +238,18 @@ void CompactionServiceCompactionJob::RecordCompactionIOStats() {
|
|
|
226
238
|
CompactionJob::RecordCompactionIOStats();
|
|
227
239
|
}
|
|
228
240
|
|
|
241
|
+
void CompactionServiceCompactionJob::UpdateCompactionJobStats(
|
|
242
|
+
const InternalStats::CompactionStats& stats) const {
|
|
243
|
+
compaction_job_stats_->elapsed_micros = stats.micros;
|
|
244
|
+
|
|
245
|
+
// output information only in remote compaction
|
|
246
|
+
compaction_job_stats_->total_output_bytes = stats.bytes_written;
|
|
247
|
+
compaction_job_stats_->total_output_bytes_blob = stats.bytes_written_blob;
|
|
248
|
+
compaction_job_stats_->num_output_records = stats.num_output_records;
|
|
249
|
+
compaction_job_stats_->num_output_files = stats.num_output_files;
|
|
250
|
+
compaction_job_stats_->num_output_files_blob = stats.num_output_files_blob;
|
|
251
|
+
}
|
|
252
|
+
|
|
229
253
|
CompactionServiceCompactionJob::CompactionServiceCompactionJob(
|
|
230
254
|
int job_id, Compaction* compaction, const ImmutableDBOptions& db_options,
|
|
231
255
|
const MutableDBOptions& mutable_db_options, const FileOptions& file_options,
|
|
@@ -261,11 +285,11 @@ Status CompactionServiceCompactionJob::Run() {
|
|
|
261
285
|
|
|
262
286
|
auto* c = compact_->compaction;
|
|
263
287
|
assert(c->column_family_data() != nullptr);
|
|
264
|
-
|
|
265
|
-
|
|
288
|
+
const VersionStorageInfo* storage_info = c->input_version()->storage_info();
|
|
289
|
+
assert(storage_info);
|
|
290
|
+
assert(storage_info->NumLevelFiles(compact_->compaction->level()) > 0);
|
|
291
|
+
write_hint_ = storage_info->CalculateSSTWriteHint(c->output_level());
|
|
266
292
|
|
|
267
|
-
write_hint_ =
|
|
268
|
-
c->column_family_data()->CalculateSSTWriteHint(c->output_level());
|
|
269
293
|
bottommost_level_ = c->bottommost_level();
|
|
270
294
|
|
|
271
295
|
Slice begin = compaction_input_.begin;
|
|
@@ -280,6 +304,9 @@ Status CompactionServiceCompactionJob::Run() {
|
|
|
280
304
|
|
|
281
305
|
log_buffer_->FlushBufferToLog();
|
|
282
306
|
LogCompaction();
|
|
307
|
+
|
|
308
|
+
compaction_result_->stats.Reset();
|
|
309
|
+
|
|
283
310
|
const uint64_t start_micros = db_options_.clock->NowMicros();
|
|
284
311
|
c->GetOrInitInputTableProperties();
|
|
285
312
|
|
|
@@ -320,20 +347,32 @@ Status CompactionServiceCompactionJob::Run() {
|
|
|
320
347
|
if (status.ok()) {
|
|
321
348
|
status = io_s;
|
|
322
349
|
}
|
|
323
|
-
if (status.ok()) {
|
|
324
|
-
// TODO: Add verify_table()
|
|
325
|
-
}
|
|
326
|
-
|
|
327
|
-
// Finish up all book-keeping to unify the subcompaction results
|
|
328
|
-
compact_->AggregateCompactionStats(compaction_stats_, *compaction_job_stats_);
|
|
329
|
-
UpdateCompactionStats();
|
|
330
|
-
RecordCompactionIOStats();
|
|
331
350
|
|
|
332
351
|
LogFlush(db_options_.info_log);
|
|
333
352
|
compact_->status = status;
|
|
334
353
|
compact_->status.PermitUncheckedError();
|
|
335
354
|
|
|
336
|
-
// Build
|
|
355
|
+
// Build Compaction Job Stats
|
|
356
|
+
|
|
357
|
+
// 1. Aggregate CompactionOutputStats into Internal Compaction Stats
|
|
358
|
+
// (compaction_stats_) and aggregate Compaction Job Stats
|
|
359
|
+
// (compaction_job_stats_) from the sub compactions
|
|
360
|
+
compact_->AggregateCompactionStats(compaction_stats_, *compaction_job_stats_);
|
|
361
|
+
|
|
362
|
+
// 2. Update the Output information in the Compaction Job Stats with
|
|
363
|
+
// aggregated Internal Compaction Stats.
|
|
364
|
+
UpdateCompactionJobStats(compaction_stats_.stats);
|
|
365
|
+
|
|
366
|
+
// 3. Set fields that are not propagated as part of aggregations above
|
|
367
|
+
compaction_result_->stats.is_manual_compaction = c->is_manual_compaction();
|
|
368
|
+
compaction_result_->stats.is_full_compaction = c->is_full_compaction();
|
|
369
|
+
compaction_result_->stats.is_remote_compaction = true;
|
|
370
|
+
|
|
371
|
+
// 4. Update IO Stats that are not part of the aggregations above (bytes_read,
|
|
372
|
+
// bytes_written)
|
|
373
|
+
RecordCompactionIOStats();
|
|
374
|
+
|
|
375
|
+
// Build Output
|
|
337
376
|
compaction_result_->output_level = compact_->compaction->output_level();
|
|
338
377
|
compaction_result_->output_path = output_path_;
|
|
339
378
|
for (const auto& output_file : sub_compact->GetOutputs()) {
|
|
@@ -342,16 +381,13 @@ Status CompactionServiceCompactionJob::Run() {
|
|
|
342
381
|
MakeTableFileName(meta.fd.GetNumber()), meta.fd.smallest_seqno,
|
|
343
382
|
meta.fd.largest_seqno, meta.smallest.Encode().ToString(),
|
|
344
383
|
meta.largest.Encode().ToString(), meta.oldest_ancester_time,
|
|
345
|
-
meta.file_creation_time, meta.epoch_number,
|
|
346
|
-
output_file.validator.GetHash(),
|
|
347
|
-
meta.unique_id);
|
|
384
|
+
meta.file_creation_time, meta.epoch_number, meta.file_checksum,
|
|
385
|
+
meta.file_checksum_func_name, output_file.validator.GetHash(),
|
|
386
|
+
meta.marked_for_compaction, meta.unique_id);
|
|
348
387
|
}
|
|
349
|
-
InternalStats::CompactionStatsFull compaction_stats;
|
|
350
|
-
sub_compact->AggregateCompactionStats(compaction_stats);
|
|
351
|
-
compaction_result_->num_output_records =
|
|
352
|
-
compaction_stats.stats.num_output_records;
|
|
353
|
-
compaction_result_->total_bytes = compaction_stats.TotalBytesWritten();
|
|
354
388
|
|
|
389
|
+
TEST_SYNC_POINT_CALLBACK("CompactionServiceCompactionJob::Run:0",
|
|
390
|
+
&compaction_result_);
|
|
355
391
|
return status;
|
|
356
392
|
}
|
|
357
393
|
|
|
@@ -404,42 +440,9 @@ static std::unordered_map<std::string, OptionTypeInfo> cfd_type_info = {
|
|
|
404
440
|
};
|
|
405
441
|
|
|
406
442
|
static std::unordered_map<std::string, OptionTypeInfo> cs_input_type_info = {
|
|
407
|
-
{"
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
offsetof(struct CompactionServiceInput, column_family),
|
|
411
|
-
OptionVerificationType::kNormal, OptionTypeFlags::kNone)},
|
|
412
|
-
{"db_options",
|
|
413
|
-
{offsetof(struct CompactionServiceInput, db_options),
|
|
414
|
-
OptionType::kConfigurable, OptionVerificationType::kNormal,
|
|
415
|
-
OptionTypeFlags::kNone,
|
|
416
|
-
[](const ConfigOptions& opts, const std::string& /*name*/,
|
|
417
|
-
const std::string& value, void* addr) {
|
|
418
|
-
auto options = static_cast<DBOptions*>(addr);
|
|
419
|
-
return GetDBOptionsFromString(opts, DBOptions(), value, options);
|
|
420
|
-
},
|
|
421
|
-
[](const ConfigOptions& opts, const std::string& /*name*/,
|
|
422
|
-
const void* addr, std::string* value) {
|
|
423
|
-
const auto options = static_cast<const DBOptions*>(addr);
|
|
424
|
-
std::string result;
|
|
425
|
-
auto status = GetStringFromDBOptions(opts, *options, &result);
|
|
426
|
-
*value = "{" + result + "}";
|
|
427
|
-
return status;
|
|
428
|
-
},
|
|
429
|
-
[](const ConfigOptions& opts, const std::string& name, const void* addr1,
|
|
430
|
-
const void* addr2, std::string* mismatch) {
|
|
431
|
-
const auto this_one = static_cast<const DBOptions*>(addr1);
|
|
432
|
-
const auto that_one = static_cast<const DBOptions*>(addr2);
|
|
433
|
-
auto this_conf = DBOptionsAsConfigurable(*this_one);
|
|
434
|
-
auto that_conf = DBOptionsAsConfigurable(*that_one);
|
|
435
|
-
std::string mismatch_opt;
|
|
436
|
-
bool result =
|
|
437
|
-
this_conf->AreEquivalent(opts, that_conf.get(), &mismatch_opt);
|
|
438
|
-
if (!result) {
|
|
439
|
-
*mismatch = name + "." + mismatch_opt;
|
|
440
|
-
}
|
|
441
|
-
return result;
|
|
442
|
-
}}},
|
|
443
|
+
{"cf_name",
|
|
444
|
+
{offsetof(struct CompactionServiceInput, cf_name),
|
|
445
|
+
OptionType::kEncodedString}},
|
|
443
446
|
{"snapshots", OptionTypeInfo::Vector<uint64_t>(
|
|
444
447
|
offsetof(struct CompactionServiceInput, snapshots),
|
|
445
448
|
OptionVerificationType::kNormal, OptionTypeFlags::kNone,
|
|
@@ -467,6 +470,10 @@ static std::unordered_map<std::string, OptionTypeInfo> cs_input_type_info = {
|
|
|
467
470
|
{"end",
|
|
468
471
|
{offsetof(struct CompactionServiceInput, end), OptionType::kEncodedString,
|
|
469
472
|
OptionVerificationType::kNormal, OptionTypeFlags::kNone}},
|
|
473
|
+
{"options_file_number",
|
|
474
|
+
{offsetof(struct CompactionServiceInput, options_file_number),
|
|
475
|
+
OptionType::kUInt64T, OptionVerificationType::kNormal,
|
|
476
|
+
OptionTypeFlags::kNone}},
|
|
470
477
|
};
|
|
471
478
|
|
|
472
479
|
static std::unordered_map<std::string, OptionTypeInfo>
|
|
@@ -503,6 +510,14 @@ static std::unordered_map<std::string, OptionTypeInfo>
|
|
|
503
510
|
{offsetof(struct CompactionServiceOutputFile, epoch_number),
|
|
504
511
|
OptionType::kUInt64T, OptionVerificationType::kNormal,
|
|
505
512
|
OptionTypeFlags::kNone}},
|
|
513
|
+
{"file_checksum",
|
|
514
|
+
{offsetof(struct CompactionServiceOutputFile, file_checksum),
|
|
515
|
+
OptionType::kEncodedString, OptionVerificationType::kNormal,
|
|
516
|
+
OptionTypeFlags::kNone}},
|
|
517
|
+
{"file_checksum_func_name",
|
|
518
|
+
{offsetof(struct CompactionServiceOutputFile, file_checksum_func_name),
|
|
519
|
+
OptionType::kEncodedString, OptionVerificationType::kNormal,
|
|
520
|
+
OptionTypeFlags::kNone}},
|
|
506
521
|
{"paranoid_hash",
|
|
507
522
|
{offsetof(struct CompactionServiceOutputFile, paranoid_hash),
|
|
508
523
|
OptionType::kUInt64T, OptionVerificationType::kNormal,
|
|
@@ -563,6 +578,10 @@ static std::unordered_map<std::string, OptionTypeInfo>
|
|
|
563
578
|
{offsetof(struct CompactionJobStats, is_manual_compaction),
|
|
564
579
|
OptionType::kBoolean, OptionVerificationType::kNormal,
|
|
565
580
|
OptionTypeFlags::kNone}},
|
|
581
|
+
{"is_remote_compaction",
|
|
582
|
+
{offsetof(struct CompactionJobStats, is_remote_compaction),
|
|
583
|
+
OptionType::kBoolean, OptionVerificationType::kNormal,
|
|
584
|
+
OptionTypeFlags::kNone}},
|
|
566
585
|
{"total_input_bytes",
|
|
567
586
|
{offsetof(struct CompactionJobStats, total_input_bytes),
|
|
568
587
|
OptionType::kUInt64T, OptionVerificationType::kNormal,
|
|
@@ -731,14 +750,6 @@ static std::unordered_map<std::string, OptionTypeInfo> cs_result_type_info = {
|
|
|
731
750
|
{offsetof(struct CompactionServiceResult, output_path),
|
|
732
751
|
OptionType::kEncodedString, OptionVerificationType::kNormal,
|
|
733
752
|
OptionTypeFlags::kNone}},
|
|
734
|
-
{"num_output_records",
|
|
735
|
-
{offsetof(struct CompactionServiceResult, num_output_records),
|
|
736
|
-
OptionType::kUInt64T, OptionVerificationType::kNormal,
|
|
737
|
-
OptionTypeFlags::kNone}},
|
|
738
|
-
{"total_bytes",
|
|
739
|
-
{offsetof(struct CompactionServiceResult, total_bytes),
|
|
740
|
-
OptionType::kUInt64T, OptionVerificationType::kNormal,
|
|
741
|
-
OptionTypeFlags::kNone}},
|
|
742
753
|
{"bytes_read",
|
|
743
754
|
{offsetof(struct CompactionServiceResult, bytes_read),
|
|
744
755
|
OptionType::kUInt64T, OptionVerificationType::kNormal,
|