This is an automated email from the ASF dual-hosted git repository.
panjuan pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/shardingsphere.git
The following commit(s) were added to refs/heads/master by this push:
new 33749b98a6d Refactor LoadBalanceAlgorithm (#24782)
33749b98a6d is described below
commit 33749b98a6de9c0fea46fecbda6ee89089c59cb7
Author: Liang Zhang <[email protected]>
AuthorDate: Thu Mar 23 19:19:44 2023 +0800
Refactor LoadBalanceAlgorithm (#24782)
---
.../api/transaction/TransactionReadQueryStrategy.java | 1 +
.../loadbalance/RandomReadQueryLoadBalanceAlgorithm.java | 12 +++++-------
.../RoundRobinReadQueryLoadBalanceAlgorithm.java | 14 ++++++--------
.../loadbalance/WeightReadQueryLoadBalanceAlgorithm.java | 11 ++++-------
.../transaction/TransactionReadQueryStrategyUtil.java | 5 ++++-
5 files changed, 20 insertions(+), 23 deletions(-)
diff --git
a/features/readwrite-splitting/api/src/main/java/org/apache/shardingsphere/readwritesplitting/api/transaction/TransactionReadQueryStrategy.java
b/features/readwrite-splitting/api/src/main/java/org/apache/shardingsphere/readwritesplitting/api/transaction/TransactionReadQueryStrategy.java
index 211dfa85681..ceb6c6cb88a 100644
---
a/features/readwrite-splitting/api/src/main/java/org/apache/shardingsphere/readwritesplitting/api/transaction/TransactionReadQueryStrategy.java
+++
b/features/readwrite-splitting/api/src/main/java/org/apache/shardingsphere/readwritesplitting/api/transaction/TransactionReadQueryStrategy.java
@@ -21,5 +21,6 @@ package
org.apache.shardingsphere.readwritesplitting.api.transaction;
* Transaction read query strategy.
*/
public enum TransactionReadQueryStrategy {
+
FIXED_PRIMARY, FIXED_REPLICA, DYNAMIC_REPLICA
}
diff --git
a/features/readwrite-splitting/core/src/main/java/org/apache/shardingsphere/readwritesplitting/algorithm/loadbalance/RandomReadQueryLoadBalanceAlgorithm.java
b/features/readwrite-splitting/core/src/main/java/org/apache/shardingsphere/readwritesplitting/algorithm/loadbalance/RandomReadQueryLoadBalanceAlgorithm.java
index 91e90283935..b0400b2d397 100644
---
a/features/readwrite-splitting/core/src/main/java/org/apache/shardingsphere/readwritesplitting/algorithm/loadbalance/RandomReadQueryLoadBalanceAlgorithm.java
+++
b/features/readwrite-splitting/core/src/main/java/org/apache/shardingsphere/readwritesplitting/algorithm/loadbalance/RandomReadQueryLoadBalanceAlgorithm.java
@@ -36,9 +36,7 @@ public final class RandomReadQueryLoadBalanceAlgorithm
implements ReadQueryLoadB
@Override
public void init(final Properties props) {
- transactionReadQueryStrategy =
props.containsKey(TRANSACTION_READ_QUERY_STRATEGY)
- ?
TransactionReadQueryStrategy.valueOf(props.getProperty(TRANSACTION_READ_QUERY_STRATEGY))
- : TransactionReadQueryStrategy.FIXED_PRIMARY;
+ transactionReadQueryStrategy =
TransactionReadQueryStrategy.valueOf(props.getProperty(TRANSACTION_READ_QUERY_STRATEGY,
TransactionReadQueryStrategy.FIXED_PRIMARY.name()));
}
@Override
@@ -50,12 +48,12 @@ public final class RandomReadQueryLoadBalanceAlgorithm
implements ReadQueryLoadB
}
@Override
- public String getType() {
- return "RANDOM";
+ public String getDataSourceName(final String name, final List<String>
readDataSourceNames) {
+ return
readDataSourceNames.get(ThreadLocalRandom.current().nextInt(readDataSourceNames.size()));
}
@Override
- public String getDataSourceName(final String name, final List<String>
readDataSourceNames) {
- return
readDataSourceNames.get(ThreadLocalRandom.current().nextInt(readDataSourceNames.size()));
+ public String getType() {
+ return "RANDOM";
}
}
diff --git
a/features/readwrite-splitting/core/src/main/java/org/apache/shardingsphere/readwritesplitting/algorithm/loadbalance/RoundRobinReadQueryLoadBalanceAlgorithm.java
b/features/readwrite-splitting/core/src/main/java/org/apache/shardingsphere/readwritesplitting/algorithm/loadbalance/RoundRobinReadQueryLoadBalanceAlgorithm.java
index 04bf63fb1ff..987b26ecd67 100644
---
a/features/readwrite-splitting/core/src/main/java/org/apache/shardingsphere/readwritesplitting/algorithm/loadbalance/RoundRobinReadQueryLoadBalanceAlgorithm.java
+++
b/features/readwrite-splitting/core/src/main/java/org/apache/shardingsphere/readwritesplitting/algorithm/loadbalance/RoundRobinReadQueryLoadBalanceAlgorithm.java
@@ -38,9 +38,7 @@ public final class RoundRobinReadQueryLoadBalanceAlgorithm
implements ReadQueryL
@Override
public void init(final Properties props) {
- transactionReadQueryStrategy =
props.containsKey(TRANSACTION_READ_QUERY_STRATEGY)
- ?
TransactionReadQueryStrategy.valueOf(props.getProperty(TRANSACTION_READ_QUERY_STRATEGY))
- : TransactionReadQueryStrategy.FIXED_PRIMARY;
+ transactionReadQueryStrategy =
TransactionReadQueryStrategy.valueOf(props.getProperty(TRANSACTION_READ_QUERY_STRATEGY,
TransactionReadQueryStrategy.FIXED_PRIMARY.name()));
}
@Override
@@ -51,6 +49,11 @@ public final class RoundRobinReadQueryLoadBalanceAlgorithm
implements ReadQueryL
return getDataSourceName(name, readDataSourceNames);
}
+ @Override
+ public String getDataSourceName(final String name, final List<String>
readDataSourceNames) {
+ return readDataSourceNames.get(Math.abs(count.getAndIncrement()) %
readDataSourceNames.size());
+ }
+
@Override
public String getType() {
return "ROUND_ROBIN";
@@ -60,9 +63,4 @@ public final class RoundRobinReadQueryLoadBalanceAlgorithm
implements ReadQueryL
public boolean isDefault() {
return true;
}
-
- @Override
- public String getDataSourceName(final String name, final List<String>
readDataSourceNames) {
- return readDataSourceNames.get(Math.abs(count.getAndIncrement()) %
readDataSourceNames.size());
- }
}
diff --git
a/features/readwrite-splitting/core/src/main/java/org/apache/shardingsphere/readwritesplitting/algorithm/loadbalance/WeightReadQueryLoadBalanceAlgorithm.java
b/features/readwrite-splitting/core/src/main/java/org/apache/shardingsphere/readwritesplitting/algorithm/loadbalance/WeightReadQueryLoadBalanceAlgorithm.java
index 5e3f2eefa77..92d2fb82fb9 100644
---
a/features/readwrite-splitting/core/src/main/java/org/apache/shardingsphere/readwritesplitting/algorithm/loadbalance/WeightReadQueryLoadBalanceAlgorithm.java
+++
b/features/readwrite-splitting/core/src/main/java/org/apache/shardingsphere/readwritesplitting/algorithm/loadbalance/WeightReadQueryLoadBalanceAlgorithm.java
@@ -56,13 +56,10 @@ public final class WeightReadQueryLoadBalanceAlgorithm
implements ReadQueryLoadB
@Override
public void init(final Properties props) {
this.props = props;
- if (props.containsKey(TRANSACTION_READ_QUERY_STRATEGY)) {
- transactionReadQueryStrategy =
TransactionReadQueryStrategy.valueOf(props.getProperty(TRANSACTION_READ_QUERY_STRATEGY));
- dataSourceNames = props.stringPropertyNames().stream().filter(each
-> !each.equals(TRANSACTION_READ_QUERY_STRATEGY)).collect(Collectors.toList());
- } else {
- transactionReadQueryStrategy =
TransactionReadQueryStrategy.FIXED_PRIMARY;
- dataSourceNames = props.stringPropertyNames();
- }
+ transactionReadQueryStrategy =
TransactionReadQueryStrategy.valueOf(props.getProperty(TRANSACTION_READ_QUERY_STRATEGY,
TransactionReadQueryStrategy.FIXED_PRIMARY.name()));
+ dataSourceNames = props.containsKey(TRANSACTION_READ_QUERY_STRATEGY)
+ ? props.stringPropertyNames().stream().filter(each ->
!each.equals(TRANSACTION_READ_QUERY_STRATEGY)).collect(Collectors.toList())
+ : props.stringPropertyNames();
}
@Override
diff --git
a/features/readwrite-splitting/core/src/main/java/org/apache/shardingsphere/readwritesplitting/transaction/TransactionReadQueryStrategyUtil.java
b/features/readwrite-splitting/core/src/main/java/org/apache/shardingsphere/readwritesplitting/transaction/TransactionReadQueryStrategyUtil.java
index 61857fefbd4..3b9c9ee09b9 100644
---
a/features/readwrite-splitting/core/src/main/java/org/apache/shardingsphere/readwritesplitting/transaction/TransactionReadQueryStrategyUtil.java
+++
b/features/readwrite-splitting/core/src/main/java/org/apache/shardingsphere/readwritesplitting/transaction/TransactionReadQueryStrategyUtil.java
@@ -17,6 +17,8 @@
package org.apache.shardingsphere.readwritesplitting.transaction;
+import lombok.AccessLevel;
+import lombok.NoArgsConstructor;
import
org.apache.shardingsphere.infra.context.transaction.TransactionConnectionContext;
import
org.apache.shardingsphere.readwritesplitting.api.transaction.TransactionReadQueryStrategy;
import
org.apache.shardingsphere.readwritesplitting.api.transaction.TransactionReadQueryStrategyAware;
@@ -26,7 +28,8 @@ import java.util.List;
/**
* Transaction read query strategy util.
*/
-public class TransactionReadQueryStrategyUtil {
+@NoArgsConstructor(access = AccessLevel.PRIVATE)
+public final class TransactionReadQueryStrategyUtil {
/**
* Get data source name in transaction.