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

journey pushed a commit to branch dev
in repository https://gitbox.apache.org/repos/asf/incubator-dolphinscheduler.git


The following commit(s) were added to refs/heads/dev by this push:
     new 8213da5  [WIP] load balance #3054 (#3057)
8213da5 is described below

commit 8213da50d39ebea00d3d4dfdbcbca51107103157
Author: CalvinKirs <[email protected]>
AuthorDate: Sun Jun 28 10:20:59 2020 +0800

    [WIP] load balance #3054 (#3057)
    
    * Load balancing abstract
    
    * code
    smell
    
    * lower weight select
---
 ...undRobinSelector.java => AbstractSelector.java} | 25 ++++++++--------------
 .../host/assign/LowerWeightRoundRobin.java         |  4 ++--
 .../dispatch/host/assign/RandomSelector.java       | 15 ++-----------
 .../dispatch/host/assign/RoundRobinSelector.java   | 14 ++----------
 4 files changed, 15 insertions(+), 43 deletions(-)

diff --git 
a/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/master/dispatch/host/assign/RoundRobinSelector.java
 
b/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/master/dispatch/host/assign/AbstractSelector.java
similarity index 72%
copy from 
dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/master/dispatch/host/assign/RoundRobinSelector.java
copy to 
dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/master/dispatch/host/assign/AbstractSelector.java
index 1eb30c8..8560da9 100644
--- 
a/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/master/dispatch/host/assign/RoundRobinSelector.java
+++ 
b/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/master/dispatch/host/assign/AbstractSelector.java
@@ -16,23 +16,18 @@
  */
 package org.apache.dolphinscheduler.server.master.dispatch.host.assign;
 
-import org.springframework.stereotype.Service;
+import org.apache.dolphinscheduler.common.utils.CollectionUtils;
 
 import java.util.Collection;
-import java.util.concurrent.atomic.AtomicInteger;
 
 /**
- * round robin selector
- * @param <T> T
+ *  AbstractSelector
  */
-@Service
-public class RoundRobinSelector<T> implements Selector<T> {
-
-    private final AtomicInteger index = new AtomicInteger(0);
-
+public  abstract class AbstractSelector<T> implements Selector<T>{
     @Override
     public T select(Collection<T> source) {
-        if (source == null || source.size() == 0) {
+
+        if (CollectionUtils.isEmpty(source)) {
             throw new IllegalArgumentException("Empty source.");
         }
 
@@ -42,11 +37,9 @@ public class RoundRobinSelector<T> implements Selector<T> {
         if (source.size() == 1) {
             return (T)source.toArray()[0];
         }
-
-        int size = source.size();
-        /**
-         * round robin
-         */
-        return (T) source.toArray()[index.getAndIncrement() % size];
+        return doSelect(source);
     }
+
+    protected abstract T  doSelect(Collection<T> source);
+
 }
diff --git 
a/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/master/dispatch/host/assign/LowerWeightRoundRobin.java
 
b/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/master/dispatch/host/assign/LowerWeightRoundRobin.java
index bdf0f41..843397e 100644
--- 
a/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/master/dispatch/host/assign/LowerWeightRoundRobin.java
+++ 
b/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/master/dispatch/host/assign/LowerWeightRoundRobin.java
@@ -22,7 +22,7 @@ import java.util.Collection;
 /**
  *  lower weight round robin
  */
-public class LowerWeightRoundRobin implements Selector<HostWeight>{
+public class LowerWeightRoundRobin extends AbstractSelector<HostWeight>{
 
     /**
      * select
@@ -30,7 +30,7 @@ public class LowerWeightRoundRobin implements 
Selector<HostWeight>{
      * @return HostWeight
      */
     @Override
-    public HostWeight select(Collection<HostWeight> sources){
+    public HostWeight doSelect(Collection<HostWeight> sources){
         int totalWeight = 0;
         int lowWeight = 0;
         HostWeight lowerNode = null;
diff --git 
a/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/master/dispatch/host/assign/RandomSelector.java
 
b/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/master/dispatch/host/assign/RandomSelector.java
index be52fcb..e00d6f7 100644
--- 
a/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/master/dispatch/host/assign/RandomSelector.java
+++ 
b/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/master/dispatch/host/assign/RandomSelector.java
@@ -24,23 +24,12 @@ import java.util.Random;
  * random selector
  * @param <T> T
  */
-public class RandomSelector<T> implements Selector<T> {
+public class RandomSelector<T> extends AbstractSelector<T> {
 
     private final Random random = new Random();
 
     @Override
-    public T select(final Collection<T> source) {
-
-        if (source == null || source.size() == 0) {
-            throw new IllegalArgumentException("Empty source.");
-        }
-
-        /**
-         * if only one , return directly
-         */
-        if (source.size() == 1) {
-            return (T) source.toArray()[0];
-        }
+    public T doSelect(final Collection<T> source) {
 
         int size = source.size();
         /**
diff --git 
a/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/master/dispatch/host/assign/RoundRobinSelector.java
 
b/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/master/dispatch/host/assign/RoundRobinSelector.java
index 1eb30c8..06e469f 100644
--- 
a/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/master/dispatch/host/assign/RoundRobinSelector.java
+++ 
b/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/master/dispatch/host/assign/RoundRobinSelector.java
@@ -26,22 +26,12 @@ import java.util.concurrent.atomic.AtomicInteger;
  * @param <T> T
  */
 @Service
-public class RoundRobinSelector<T> implements Selector<T> {
+public class RoundRobinSelector<T> extends AbstractSelector<T> {
 
     private final AtomicInteger index = new AtomicInteger(0);
 
     @Override
-    public T select(Collection<T> source) {
-        if (source == null || source.size() == 0) {
-            throw new IllegalArgumentException("Empty source.");
-        }
-
-        /**
-         * if only one , return directly
-         */
-        if (source.size() == 1) {
-            return (T)source.toArray()[0];
-        }
+    public T doSelect(Collection<T> source) {
 
         int size = source.size();
         /**

Reply via email to