gavinchou commented on code in PR #54094:
URL: https://github.com/apache/doris/pull/54094#discussion_r2269055275
##########
cloud/src/meta-service/meta_service_job.cpp:
##########
@@ -806,56 +872,67 @@ void process_compaction_job(MetaServiceCode& code,
std::string& msg, std::string
// with `config::split_tablet_stats = true` can meet the condition.
internal_get_tablet_stats(code, msg, txn.get(), instance_id,
request->job().idx(), *stats,
detached_stats,
config::snapshot_get_tablet_stats);
- if (compaction.type() == TabletCompactionJobPB::EMPTY_CUMULATIVE) {
-
stats->set_cumulative_compaction_cnt(stats->cumulative_compaction_cnt() + 1);
- stats->set_cumulative_point(compaction.output_cumulative_point());
- stats->set_last_cumu_compaction_time_ms(now * 1000);
- } else if (compaction.type() == TabletCompactionJobPB::CUMULATIVE) {
- // clang-format off
-
stats->set_cumulative_compaction_cnt(stats->cumulative_compaction_cnt() + 1);
- if (compaction.output_cumulative_point() > stats->cumulative_point()) {
- // After supporting parallel cumu compaction, compaction with
older cumu point may be committed after
- // new cumu point has been set, MUST NOT set cumu point back to
old value
- stats->set_cumulative_point(compaction.output_cumulative_point());
- }
- stats->set_num_rows(stats->num_rows() + (compaction.num_output_rows()
- compaction.num_input_rows()));
- stats->set_data_size(stats->data_size() +
(compaction.size_output_rowsets() - compaction.size_input_rowsets()));
- stats->set_num_rowsets(stats->num_rowsets() +
(compaction.num_output_rowsets() - compaction.num_input_rowsets()));
- stats->set_num_segments(stats->num_segments() +
(compaction.num_output_segments() - compaction.num_input_segments()));
- stats->set_index_size(stats->index_size() +
(compaction.index_size_output_rowsets() -
compaction.index_size_input_rowsets()));
- stats->set_segment_size(stats->segment_size() +
(compaction.segment_size_output_rowsets() -
compaction.segment_size_input_rowsets()));
- stats->set_last_cumu_compaction_time_ms(now * 1000);
- // clang-format on
- } else if (compaction.type() == TabletCompactionJobPB::BASE) {
- // clang-format off
- stats->set_base_compaction_cnt(stats->base_compaction_cnt() + 1);
- stats->set_num_rows(stats->num_rows() + (compaction.num_output_rows()
- compaction.num_input_rows()));
- stats->set_data_size(stats->data_size() +
(compaction.size_output_rowsets() - compaction.size_input_rowsets()));
- stats->set_num_rowsets(stats->num_rowsets() +
(compaction.num_output_rowsets() - compaction.num_input_rowsets()));
- stats->set_num_segments(stats->num_segments() +
(compaction.num_output_segments() - compaction.num_input_segments()));
- stats->set_index_size(stats->index_size() +
(compaction.index_size_output_rowsets() -
compaction.index_size_input_rowsets()));
- stats->set_segment_size(stats->segment_size() +
(compaction.segment_size_output_rowsets() -
compaction.segment_size_input_rowsets()));
- stats->set_last_base_compaction_time_ms(now * 1000);
- // clang-format on
- } else if (compaction.type() == TabletCompactionJobPB::FULL) {
- // clang-format off
- stats->set_base_compaction_cnt(stats->base_compaction_cnt() + 1);
- if (compaction.output_cumulative_point() > stats->cumulative_point()) {
- // After supporting parallel cumu compaction, compaction with
older cumu point may be committed after
- // new cumu point has been set, MUST NOT set cumu point back to
old value
- stats->set_cumulative_point(compaction.output_cumulative_point());
+
+ if (is_versioned_write) {
+ // read old TabletCompactStatsKey -> TabletStatsPB
+ TabletStatsPB tablet_compact_stats;
+ MetaReader meta_reader(instance_id, txn_kv);
+ Versionstamp* versionstamp = nullptr;
+ TxnErrorCode err = meta_reader.get_tablet_compact_stats(
+ txn.get(), tablet_id, &tablet_compact_stats, versionstamp,
false);
+ if (err == TxnErrorCode::TXN_OK) {
+ // tablet_compact_stats exists, update TabletStatsPB
+ if (compaction_update_tablet_stats(compaction,
&tablet_compact_stats, code, msg, now) ==
+ -1) {
+ LOG_WARNING("compaction_update_tablet_stats failed.")
+ .tag("instancej_id", instance_id)
+ .tag("tablet_id", tablet_id)
+ .tag("compact_stats",
tablet_compact_stats.ShortDebugString());
+ return;
+ }
+
tablet_compact_stats.set_num_compaction_rowsets(compaction.num_output_segments()
-
+
compaction.num_input_segments());
+ } else if (err == TxnErrorCode::TXN_KEY_NOT_FOUND) {
+ // First time switching from single write to double write mode
+ // Step 1: Copy from single version stats as baseline
+ tablet_compact_stats.CopyFrom(*stats);
+ // Step 2: Apply compaction updates
+ if (compaction_update_tablet_stats(compaction,
&tablet_compact_stats, code, msg, now) ==
+ -1) {
+ LOG_WARNING("first set compaction_update_tablet_stats failed.")
+ .tag("tablet_id", tablet_id)
+ .tag("compact_stats",
tablet_compact_stats.ShortDebugString());
+ return;
+ }
+ // Step 3: Reset size fields to zero because compact_stats +
load_stats = single_stats
+ // Since data_size/index_size are inherited by load_stats,
compact_stats must start from 0
+ tablet_compact_stats.set_num_rows(0);
+ tablet_compact_stats.set_data_size(0);
+ tablet_compact_stats.set_num_rowsets(0);
+ tablet_compact_stats.set_num_segments(0);
+ tablet_compact_stats.set_index_size(0);
+ tablet_compact_stats.set_segment_size(0);
+
tablet_compact_stats.set_num_compaction_rowsets(compaction.num_output_segments()
-
Review Comment:
这个是什么意义 期望是一个负数还是整数?
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]