This is an automated email from the ASF dual-hosted git repository.

morrysnow 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 16fb7a507ce [fix](colocate) bucket index cannot be set correctly when 
do colocate balance (#27741)
16fb7a507ce is described below

commit 16fb7a507ce532bb592bebd99b292ac41b24a057
Author: shee <[email protected]>
AuthorDate: Thu Nov 30 20:28:18 2023 +0800

    [fix](colocate) bucket index cannot be set correctly when do colocate 
balance (#27741)
    
    for (Partition partition : olapTable.getPartitions()) {
        short replicationNum = replicaAlloc.getTotalReplicaNum();
        long visibleVersion = partition.getVisibleVersion();
        // Here we only get VISIBLE indexes. All other indexes are not 
queryable.
        // So it does not matter if tablets of other indexes are not matched.
        for (MaterializedIndex index : 
partition.getMaterializedIndices(IndexExtState.VISIBLE)) {
            Preconditions.checkState(backendBucketsSeq.size() == 
index.getTablets().size(),
                    backendBucketsSeq.size() + " vs. " + 
index.getTablets().size());
            int idx = 0;
            for (Long tabletId : index.getTabletIdsInOrder()) {
                counter.totalTabletNum++;
                Set<Long> bucketsSeq = backendBucketsSeq.get(idx);
                Preconditions.checkState(bucketsSeq.size() == replicationNum,
                        bucketsSeq.size() + " vs. " + replicationNum);
                Tablet tablet = index.getTablet(tabletId);
                TabletStatus st = tablet.getColocateHealthStatus(
                        visibleVersion, replicaAlloc, bucketsSeq);
                if (st != TabletStatus.HEALTHY) {
                    counter.unhealthyTabletNum++;
                    unstableReason = String.format("get unhealthy tablet %d in 
colocate table."
                            + " status: %s", tablet.getId(), st);
                    LOG.debug(unstableReason);
    
                    if (!tablet.readyToBeRepaired(infoService, 
Priority.NORMAL)) {
                        counter.tabletNotReady++;
                        // 这里需要将  idx++ ,否则 bucketsSeq和 tablet replicas 
backends 对应不上
                        idx++;
                        continue;
                    }
    
                    TabletSchedCtx tabletCtx = new TabletSchedCtx(
                            TabletSchedCtx.Type.REPAIR,
                            db.getId(), tableId, partition.getId(), 
index.getId(), tablet.getId(),
                            replicaAlloc, System.currentTimeMillis());
                    // the tablet status will be set again when being scheduled
                    tabletCtx.setTabletStatus(st);
                    tabletCtx.setPriority(Priority.NORMAL);
                    tabletCtx.setTabletOrderIdx(idx);
    
                    AddResult res = tabletScheduler.addTablet(tabletCtx, false 
/* not force */);
                    if (res == AddResult.LIMIT_EXCEED || res == 
AddResult.DISABLED) {
                        // tablet in scheduler exceed limit, or scheduler is 
disabled,
                        // skip this group and check next one.
                        LOG.info("tablet scheduler return: {}. stop colocate 
table check", res.name());
                        break OUT;
                    } else if (res == AddResult.ADDED) {
                        counter.addToSchedulerTabletNum++;
                    }  else {
                        counter.tabletInScheduler++;
                    }
                }
                idx++;
            }
        }
    }
---
 .../org/apache/doris/clone/ColocateTableCheckerAndBalancer.java     | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

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 89259600530..3b4d9cf5e31 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
@@ -513,8 +513,9 @@ public class ColocateTableCheckerAndBalancer extends 
MasterDaemon {
                         for (MaterializedIndex index : 
partition.getMaterializedIndices(IndexExtState.VISIBLE)) {
                             Preconditions.checkState(backendBucketsSeq.size() 
== index.getTablets().size(),
                                     backendBucketsSeq.size() + " vs. " + 
index.getTablets().size());
-                            int idx = 0;
-                            for (Long tabletId : index.getTabletIdsInOrder()) {
+                            List<Long> tabletIdsInOrder = 
index.getTabletIdsInOrder();
+                            for (int idx = 0; idx < tabletIdsInOrder.size(); 
idx++) {
+                                Long tabletId = tabletIdsInOrder.get(idx);
                                 counter.totalTabletNum++;
                                 Set<Long> bucketsSeq = 
backendBucketsSeq.get(idx);
                                 Preconditions.checkState(bucketsSeq.size() == 
replicationNum,
@@ -554,7 +555,6 @@ public class ColocateTableCheckerAndBalancer extends 
MasterDaemon {
                                         counter.tabletInScheduler++;
                                     }
                                 }
-                                idx++;
                             }
                         }
                     }


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to