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();
/**