From 1c518c51a1ac136d7c82663ceb6120dac190a50c Mon Sep 17 00:00:00 2001 From: Yongqiang YANG Date: Wed, 16 Apr 2025 14:10:38 +0800 Subject: [PATCH 1/2] [fix](replica) skip missing version should care catchup (#49999) --- .../java/org/apache/doris/catalog/Tablet.java | 21 ++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/fe/fe-core/src/main/java/org/apache/doris/catalog/Tablet.java b/fe/fe-core/src/main/java/org/apache/doris/catalog/Tablet.java index 80d1e640ef794f..0d7211e1f3680a 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/catalog/Tablet.java +++ b/fe/fe-core/src/main/java/org/apache/doris/catalog/Tablet.java @@ -280,23 +280,29 @@ public Multimap getNormalReplicaBackendPathMap() { return map; } + // When a BE reports a missing version, lastFailedVersion is set. When a write fails on a replica, + // lastFailedVersion is set. // for query public List getQueryableReplicas(long visibleVersion, Map> backendAlivePathHashs, - boolean allowFailedVersion) { + boolean allowMissingVersion) { List allQueryableReplica = Lists.newArrayListWithCapacity(replicas.size()); List auxiliaryReplica = Lists.newArrayListWithCapacity(replicas.size()); List deadPathReplica = Lists.newArrayList(); + List mayMissingVersionReplica = Lists.newArrayList(); + List notCatchupReplica = Lists.newArrayList(); + for (Replica replica : replicas) { if (replica.isBad()) { continue; } - // Skip the missing version replica - if (replica.getLastFailedVersion() > 0 && !allowFailedVersion) { + if (replica.getLastFailedVersion() > 0) { + mayMissingVersionReplica.add(replica); continue; } if (!replica.checkVersionCatchUp(visibleVersion, false)) { + notCatchupReplica.add(replica); continue; } @@ -322,6 +328,15 @@ public List getQueryableReplicas(long visibleVersion, Map 1) { long minVersionCount = allQueryableReplica.stream().mapToLong(Replica::getVisibleVersionCount) .filter(count -> count != -1).min().orElse(Long.MAX_VALUE); From ee2727d5bf9a3116668a187067e048c49f4b4530 Mon Sep 17 00:00:00 2001 From: Yongqiang YANG Date: Mon, 21 Apr 2025 14:26:23 +0800 Subject: [PATCH 2/2] [fix](missing version) not catchup is worse than lastFailed (#50094) --- .../src/main/java/org/apache/doris/catalog/Tablet.java | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/fe/fe-core/src/main/java/org/apache/doris/catalog/Tablet.java b/fe/fe-core/src/main/java/org/apache/doris/catalog/Tablet.java index 0d7211e1f3680a..26418dd4e809af 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/catalog/Tablet.java +++ b/fe/fe-core/src/main/java/org/apache/doris/catalog/Tablet.java @@ -295,16 +295,14 @@ public List getQueryableReplicas(long visibleVersion, Map 0) { - mayMissingVersionReplica.add(replica); - continue; - } - if (!replica.checkVersionCatchUp(visibleVersion, false)) { notCatchupReplica.add(replica); continue; } + if (replica.getLastFailedVersion() > 0) { + mayMissingVersionReplica.add(replica); + continue; + } Set thisBeAlivePaths = backendAlivePathHashs.get(replica.getBackendId()); ReplicaState state = replica.getState();