You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@doris.apache.org by "morningman (via GitHub)" <gi...@apache.org> on 2023/04/28 08:28:15 UTC

[GitHub] [doris] morningman commented on a diff in pull request #19167: [feature](table) implement the round robin selection be when create tablet

morningman commented on code in PR #19167:
URL: https://github.com/apache/doris/pull/19167#discussion_r1180078624


##########
fe/fe-core/src/main/java/org/apache/doris/datasource/InternalCatalog.java:
##########
@@ -2538,6 +2541,13 @@ private void createTablets(String clusterName, MaterializedIndex index, ReplicaS
         if (chooseBackendsArbitrary) {
             backendsPerBucketSeq = Maps.newHashMap();
         }
+
+        Map<Tag, Integer> nextIndexs = new HashMap<>();
+        for (Map.Entry<Tag, Short> entry : replicaAlloc.getAllocMap().entrySet()) {
+            // TODO: random roundrobin starting position
+            nextIndexs.put(entry.getKey(), 0);

Review Comment:
   If always starts with 0, it will causing the first node always has more tablets than others.
   If intro random start position, than it will be the same as previous implementation



##########
fe/fe-core/src/main/java/org/apache/doris/datasource/InternalCatalog.java:
##########
@@ -2538,6 +2541,13 @@ private void createTablets(String clusterName, MaterializedIndex index, ReplicaS
         if (chooseBackendsArbitrary) {
             backendsPerBucketSeq = Maps.newHashMap();
         }
+
+        Map<Tag, Integer> nextIndexs = new HashMap<>();
+        for (Map.Entry<Tag, Short> entry : replicaAlloc.getAllocMap().entrySet()) {
+            // TODO: random roundrobin starting position
+            nextIndexs.put(entry.getKey(), 0);

Review Comment:
   At very early time, Doris use RR to distribute tablets.
   There was a field `nextBEIdx` in `SystemInfoService`, to save the start position.
   
   But it is hard to maintain that value, because we have to consider `tag`, `storage_medium`, `cluster`, etc. So you have to maintain the `idx` for each combination.
   
   So we changed the distribution method to totally random.
   
   
   



##########
fe/fe-core/src/main/java/org/apache/doris/datasource/InternalCatalog.java:
##########
@@ -2538,6 +2541,13 @@ private void createTablets(String clusterName, MaterializedIndex index, ReplicaS
         if (chooseBackendsArbitrary) {
             backendsPerBucketSeq = Maps.newHashMap();
         }
+
+        Map<Tag, Integer> nextIndexs = new HashMap<>();
+        for (Map.Entry<Tag, Short> entry : replicaAlloc.getAllocMap().entrySet()) {
+            // TODO: random roundrobin starting position
+            nextIndexs.put(entry.getKey(), 0);

Review Comment:
   I think of an implementation, for reference:
   
   1. Select all candidate BE list according to the conditions (`tag`, `storage_medium`, etc.).
   2. In the list, select the BE with the least number of tablets as the starting node to start executing RoundRobin.
   
   This method should be logically clearer, which is to separate the step of "filtering BE by condition" from the "execution of RR".



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: commits-unsubscribe@doris.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@doris.apache.org
For additional commands, e-mail: commits-help@doris.apache.org