diff --git a/fe/fe-core/src/main/java/org/apache/doris/planner/external/BackendPolicy.java b/fe/fe-core/src/main/java/org/apache/doris/planner/external/BackendPolicy.java index cdc436a83a..a7a7ba8cc3 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/planner/external/BackendPolicy.java +++ b/fe/fe-core/src/main/java/org/apache/doris/planner/external/BackendPolicy.java @@ -58,7 +58,7 @@ public class BackendPolicy { .needLoadAvailable() .addTags(tags) .preferComputeNode() - .assignCandidateNum(Config.backend_num_for_federation) + .assignExpectBeNum(Config.backend_num_for_federation) .build(); backends.addAll(policy.getCandidateBackends(Env.getCurrentSystemInfo().getIdToBackend().values())); if (backends.isEmpty()) { diff --git a/fe/fe-core/src/main/java/org/apache/doris/system/BeSelectionPolicy.java b/fe/fe-core/src/main/java/org/apache/doris/system/BeSelectionPolicy.java index 6c95f6ecfb..acd38f14bd 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/system/BeSelectionPolicy.java +++ b/fe/fe-core/src/main/java/org/apache/doris/system/BeSelectionPolicy.java @@ -47,7 +47,7 @@ public class BeSelectionPolicy { public boolean allowOnSameHost = false; public boolean preferComputeNode = false; - public int candidateNum = Integer.MAX_VALUE; + public int expectBeNum = 0; private BeSelectionPolicy() { @@ -105,8 +105,8 @@ public class BeSelectionPolicy { return this; } - public Builder assignCandidateNum(int candidateNum) { - policy.candidateNum = candidateNum; + public Builder assignExpectBeNum(int expectBeNum) { + policy.expectBeNum = expectBeNum; return this; } @@ -141,25 +141,21 @@ public class BeSelectionPolicy { public List getCandidateBackends(ImmutableCollection backends) { List filterBackends = backends.stream().filter(this::isMatch).collect(Collectors.toList()); - Collections.shuffle(filterBackends); List candidates = new ArrayList<>(); if (preferComputeNode) { int num = 0; // pick compute node first for (Backend backend : filterBackends) { if (backend.isComputeNode()) { - if (num >= candidateNum) { - break; - } candidates.add(backend); num++; } } // fill with some mix node. - if (num < candidateNum) { + if (num < expectBeNum) { for (Backend backend : filterBackends) { if (backend.isMixNode()) { - if (num >= candidateNum) { + if (num >= expectBeNum) { break; } candidates.add(backend); @@ -170,7 +166,7 @@ public class BeSelectionPolicy { } else { candidates.addAll(filterBackends); } - + Collections.shuffle(candidates); return candidates; } diff --git a/fe/fe-core/src/test/java/org/apache/doris/system/SystemInfoServiceTest.java b/fe/fe-core/src/test/java/org/apache/doris/system/SystemInfoServiceTest.java index 546449b79c..0afa019310 100644 --- a/fe/fe-core/src/test/java/org/apache/doris/system/SystemInfoServiceTest.java +++ b/fe/fe-core/src/test/java/org/apache/doris/system/SystemInfoServiceTest.java @@ -239,11 +239,11 @@ public class SystemInfoServiceTest { Assert.assertEquals(1, infoService.selectBackendIdsByPolicy(policy02, 1).size()); BeSelectionPolicy policy03 = new BeSelectionPolicy.Builder().addTags(Sets.newHashSet(taga)) - .setStorageMedium(TStorageMedium.HDD).preferComputeNode().assignCandidateNum(0).build(); - Assert.assertEquals(0, infoService.selectBackendIdsByPolicy(policy03, 1).size()); + .setStorageMedium(TStorageMedium.HDD).preferComputeNode().assignExpectBeNum(0).build(); + Assert.assertEquals(1, infoService.selectBackendIdsByPolicy(policy03, 1).size()); BeSelectionPolicy policy04 = new BeSelectionPolicy.Builder().addTags(Sets.newHashSet(taga)) - .setStorageMedium(TStorageMedium.HDD).preferComputeNode().assignCandidateNum(1).build(); + .setStorageMedium(TStorageMedium.HDD).preferComputeNode().assignExpectBeNum(1).build(); Assert.assertEquals(1, infoService.selectBackendIdsByPolicy(policy04, 1).size()); // one compute node and two mix node @@ -264,11 +264,11 @@ public class SystemInfoServiceTest { Assert.assertEquals(0, infoService.selectBackendIdsByPolicy(policy05, 3).size()); BeSelectionPolicy policy06 = new BeSelectionPolicy.Builder().addTags(Sets.newHashSet(taga)) - .setStorageMedium(TStorageMedium.HDD).preferComputeNode().assignCandidateNum(2).build(); + .setStorageMedium(TStorageMedium.HDD).preferComputeNode().assignExpectBeNum(2).build(); Assert.assertEquals(2, infoService.selectBackendIdsByPolicy(policy06, 2).size()); BeSelectionPolicy policy07 = new BeSelectionPolicy.Builder().addTags(Sets.newHashSet(taga)) - .setStorageMedium(TStorageMedium.HDD).preferComputeNode().assignCandidateNum(3).build(); + .setStorageMedium(TStorageMedium.HDD).preferComputeNode().assignExpectBeNum(3).build(); Assert.assertEquals(3, infoService.selectBackendIdsByPolicy(policy07, 3).size()); }