You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@doris.apache.org by w4...@apache.org on 2026/04/10 07:10:22 UTC
(doris) branch master updated: [fix](cloud) Add predecessor instance id (#62276)
This is an automated email from the ASF dual-hosted git repository.
w41ter pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/doris.git
The following commit(s) were added to refs/heads/master by this push:
new 6f21ae42659 [fix](cloud) Add predecessor instance id (#62276)
6f21ae42659 is described below
commit 6f21ae42659a86e15418ca84a88967bdbf4248d8
Author: walter <ma...@selectdb.com>
AuthorDate: Fri Apr 10 15:10:15 2026 +0800
[fix](cloud) Add predecessor instance id (#62276)
When a rollback exists, the predecessor instance is not the same as the
source instance. This change separates the two semantics into distinct
fields for clarity.
---
cloud/src/resource-manager/resource_manager.cpp | 15 ++++++++-------
gensrc/proto/cloud.proto | 7 ++++++-
2 files changed, 14 insertions(+), 8 deletions(-)
diff --git a/cloud/src/resource-manager/resource_manager.cpp b/cloud/src/resource-manager/resource_manager.cpp
index 82abc09f86a..fd634fdcff2 100644
--- a/cloud/src/resource-manager/resource_manager.cpp
+++ b/cloud/src/resource-manager/resource_manager.cpp
@@ -1414,18 +1414,19 @@ std::pair<MetaServiceCode, std::string> ResourceManager::refresh_instance(
void ResourceManager::refresh_instance(const std::string& instance_id,
const InstanceInfoPB& instance) {
bool is_successor_instance = instance.has_original_instance_id();
- std::string source_instance_id = is_successor_instance ? instance.source_instance_id() : "";
+ std::string predecessor_instance_id =
+ is_successor_instance ? instance.predecessor_instance_id() : "";
std::lock_guard l(mtx_);
for (auto i = node_info_.begin(); i != node_info_.end();) {
- // erase all nodes not belong to this instance_id
- if (i->second.instance_id != instance_id &&
- // ... or, if is_successor_instance, erase nodes belong to source_instance_id
- (!is_successor_instance || i->second.instance_id != source_instance_id)) {
+ // erase all nodes belong to this instance_id
+ if (i->second.instance_id == instance_id ||
+ // ... or, if is_successor_instance, erase nodes belong to predecessor_instance_id
+ (is_successor_instance && i->second.instance_id == predecessor_instance_id)) {
+ i = node_info_.erase(i);
+ } else {
++i;
- continue;
}
- i = node_info_.erase(i);
}
// If successor_instance_id is set, it means this instance has a successor instance,
diff --git a/gensrc/proto/cloud.proto b/gensrc/proto/cloud.proto
index 6e2c46672cd..6e0d268f14a 100644
--- a/gensrc/proto/cloud.proto
+++ b/gensrc/proto/cloud.proto
@@ -129,7 +129,7 @@ message InstanceInfoPB {
// For snapshot
optional MultiVersionStatus multi_version_status = 110;
optional SnapshotSwitchStatus snapshot_switch_status = 111;
- optional string source_instance_id = 112; // The instance cloned from.
+ optional string source_instance_id = 112; // The instance cloned from (the snapshot instance id).
optional string source_snapshot_id = 113; // The snapshot cloned from.
// Inherited from which instance (only used during rollback, the earliest instance id).
@@ -147,6 +147,11 @@ message InstanceInfoPB {
optional int64 snapshot_retained_data_size = 121;
optional int64 snapshot_billable_data_size = 122;
optional SnapshotCompactStatus snapshot_compact_status = 123;
+
+ // The instance that is being rolled back, only used during rollback.
+ // It is not always same as source_instance_id, because the source instance may inherit from another
+ // instance during rollback, and the predecessor instance is the real instance which to execute the rollback.
+ optional string predecessor_instance_id = 124;
}
message StagePB {
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@doris.apache.org
For additional commands, e-mail: commits-help@doris.apache.org