diff --git a/fe/src/main/java/org/apache/doris/catalog/Catalog.java b/fe/src/main/java/org/apache/doris/catalog/Catalog.java index 0cc9aa638ae7e4..26330385e36b6f 100644 --- a/fe/src/main/java/org/apache/doris/catalog/Catalog.java +++ b/fe/src/main/java/org/apache/doris/catalog/Catalog.java @@ -4227,6 +4227,7 @@ private void unprotectUpdateReplica(ReplicaPersistInfo info) { Replica replica = tablet.getReplicaByBackendId(info.getBackendId()); Preconditions.checkNotNull(replica, info); replica.updateVersionInfo(info.getVersion(), info.getVersionHash(), info.getDataSize(), info.getRowCount()); + replica.setBad(false); } public void replayAddReplica(ReplicaPersistInfo info) { diff --git a/fe/src/main/java/org/apache/doris/catalog/TabletInvertedIndex.java b/fe/src/main/java/org/apache/doris/catalog/TabletInvertedIndex.java index b87a5f3d69e307..a6006620554bff 100644 --- a/fe/src/main/java/org/apache/doris/catalog/TabletInvertedIndex.java +++ b/fe/src/main/java/org/apache/doris/catalog/TabletInvertedIndex.java @@ -349,11 +349,17 @@ private boolean needSync(Replica replicaInFe, TTabletInfo backendTabletInfo) { } long versionInFe = replicaInFe.getVersion(); long versionHashInFe = replicaInFe.getVersionHash(); + if (backendTabletInfo.getVersion() > versionInFe - || (versionInFe == backendTabletInfo.getVersion() - && versionHashInFe != backendTabletInfo.getVersion_hash())) { + || (versionInFe == backendTabletInfo.getVersion() && versionHashInFe != backendTabletInfo.getVersion_hash())) { + // backend replica's version is larger or newer than replica in FE, sync it. + return true; + } else if (versionInFe == backendTabletInfo.getVersion() && versionHashInFe == backendTabletInfo.getVersion_hash() + && replicaInFe.isBad()) { + // backend replica's version is equal to replica in FE, but replica in FE is bad, while backend replica is good, sync it return true; } + return false; } diff --git a/fe/src/main/java/org/apache/doris/master/ReportHandler.java b/fe/src/main/java/org/apache/doris/master/ReportHandler.java index a040ad70a70d35..462ddde216144e 100644 --- a/fe/src/main/java/org/apache/doris/master/ReportHandler.java +++ b/fe/src/main/java/org/apache/doris/master/ReportHandler.java @@ -436,7 +436,8 @@ private static void sync(Map backendTablets, ListMultimap backendTablets, ListMultimap