From bdec9dfe34629ca03535d50eb1c96e7118336969 Mon Sep 17 00:00:00 2001 From: Mingyu Chen Date: Mon, 19 Sep 2022 08:34:50 +0800 Subject: [PATCH] [fix](colocation) fix decommission failure with 2 BEs and colocation table (#12644) This PR fix: 2 Backends. Create tables with colocation group, 1 replica. Decommission one of Backends. The tablet on decommissioned Backend is not reduced. This is a bug of ColocateTableCheckerAndBalancer. --- .../src/main/java/org/apache/doris/alter/SystemHandler.java | 2 +- .../apache/doris/clone/ColocateTableCheckerAndBalancer.java | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/fe/fe-core/src/main/java/org/apache/doris/alter/SystemHandler.java b/fe/fe-core/src/main/java/org/apache/doris/alter/SystemHandler.java index 9d2b49531a6e12..a6fe838fa8db1e 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/alter/SystemHandler.java +++ b/fe/fe-core/src/main/java/org/apache/doris/alter/SystemHandler.java @@ -96,7 +96,7 @@ private void runAlterJobV2() { } LOG.info("backend {} lefts {} replicas to decommission: {}", beId, backendTabletIds.size(), - backendTabletIds.size() <= 20 ? backendTabletIds : "too many"); + backendTabletIds.subList(0, Math.min(10, backendTabletIds.size()))); } } diff --git a/fe/fe-core/src/main/java/org/apache/doris/clone/ColocateTableCheckerAndBalancer.java b/fe/fe-core/src/main/java/org/apache/doris/clone/ColocateTableCheckerAndBalancer.java index 282d3619046498..c7848b39378f0b 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/clone/ColocateTableCheckerAndBalancer.java +++ b/fe/fe-core/src/main/java/org/apache/doris/clone/ColocateTableCheckerAndBalancer.java @@ -385,6 +385,7 @@ private boolean relocateAndBalance(GroupId groupId, Tag tag, Set unavailab if (!seqIndexes.isEmpty()) { srcBeId = beId; hasUnavailableBe = true; + LOG.info("find unavailable backend {} in colocate group: {}", beId, groupId); break; } } @@ -394,7 +395,7 @@ private boolean relocateAndBalance(GroupId groupId, Tag tag, Set unavailab unavailableBeIds, statistic, flatBackendsPerBucketSeq); // if there is only one available backend and no unavailable bucketId to relocate, end the outer loop - if (backendWithReplicaNum.size() <= 1) { + if (backendWithReplicaNum.size() <= 1 && !hasUnavailableBe) { break; }