Skip to content

Commit

Permalink
Remove TransactionHolder.java (#20184)
Browse files Browse the repository at this point in the history
* remove TransactionHolder.java

* remove TransactionHolder.java

* remove TransactionHolder.java
  • Loading branch information
tuichenchuxin authored Aug 16, 2022
1 parent c12f35d commit 3bc99d5
Show file tree
Hide file tree
Showing 52 changed files with 276 additions and 295 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@
import org.apache.shardingsphere.infra.route.context.RouteContext;
import org.apache.shardingsphere.infra.route.context.RouteMapper;
import org.apache.shardingsphere.infra.route.context.RouteUnit;
import org.apache.shardingsphere.infra.session.ConnectionContext;

import java.util.Collection;
import java.util.Collections;
Expand All @@ -40,7 +41,8 @@
public final class DatabaseDiscoverySQLRouter implements SQLRouter<DatabaseDiscoveryRule> {

@Override
public RouteContext createRouteContext(final LogicSQL logicSQL, final ShardingSphereDatabase database, final DatabaseDiscoveryRule rule, final ConfigurationProperties props) {
public RouteContext createRouteContext(final LogicSQL logicSQL, final ShardingSphereDatabase database,
final DatabaseDiscoveryRule rule, final ConfigurationProperties props, final ConnectionContext connectionContext) {
RouteContext result = new RouteContext();
DatabaseDiscoveryDataSourceRule singleDataSourceRule = rule.getSingleDataSourceRule();
String dataSourceName = new DatabaseDiscoveryDataSourceRouter(singleDataSourceRule).route();
Expand All @@ -50,7 +52,8 @@ public RouteContext createRouteContext(final LogicSQL logicSQL, final ShardingSp

@Override
public void decorateRouteContext(final RouteContext routeContext,
final LogicSQL logicSQL, final ShardingSphereDatabase database, final DatabaseDiscoveryRule rule, final ConfigurationProperties props) {
final LogicSQL logicSQL, final ShardingSphereDatabase database, final DatabaseDiscoveryRule rule,
final ConfigurationProperties props, final ConnectionContext connectionContext) {
Collection<RouteUnit> toBeRemoved = new LinkedList<>();
Collection<RouteUnit> toBeAdded = new LinkedList<>();
for (RouteUnit each : routeContext.getRouteUnits()) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@
import org.apache.shardingsphere.infra.route.context.RouteContext;
import org.apache.shardingsphere.infra.route.context.RouteMapper;
import org.apache.shardingsphere.infra.route.context.RouteUnit;
import org.apache.shardingsphere.infra.session.ConnectionContext;
import org.apache.shardingsphere.schedule.core.ScheduleContextFactory;
import org.apache.shardingsphere.sql.parser.sql.common.statement.SQLStatement;
import org.apache.shardingsphere.test.mock.MockedDataSource;
Expand Down Expand Up @@ -98,7 +99,7 @@ public void assertCreateRouteContextToPrimaryWithoutRouteUnits() {
LogicSQL logicSQL = new LogicSQL(mock(SQLStatementContext.class), "", Collections.emptyList());
ShardingSphereDatabase database = new ShardingSphereDatabase(DefaultDatabase.LOGIC_NAME, mock(DatabaseType.class), mock(ShardingSphereResource.class, RETURNS_DEEP_STUBS),
new ShardingSphereRuleMetaData(Collections.singleton(rule)), Collections.emptyMap());
RouteContext actual = sqlRouter.createRouteContext(logicSQL, database, rule, new ConfigurationProperties(new Properties()));
RouteContext actual = sqlRouter.createRouteContext(logicSQL, database, rule, new ConfigurationProperties(new Properties()), new ConnectionContext());
Iterator<String> routedDataSourceNames = actual.getActualDataSourceNames().iterator();
assertThat(routedDataSourceNames.next(), is(PRIMARY_DATA_SOURCE));
}
Expand All @@ -109,7 +110,7 @@ public void assertDecorateRouteContextToPrimaryDataSource() {
LogicSQL logicSQL = new LogicSQL(mock(SQLStatementContext.class), "", Collections.emptyList());
ShardingSphereDatabase database = new ShardingSphereDatabase(DefaultDatabase.LOGIC_NAME, mock(DatabaseType.class), mock(ShardingSphereResource.class, RETURNS_DEEP_STUBS),
new ShardingSphereRuleMetaData(Collections.singleton(rule)), Collections.emptyMap());
sqlRouter.decorateRouteContext(actual, logicSQL, database, rule, new ConfigurationProperties(new Properties()));
sqlRouter.decorateRouteContext(actual, logicSQL, database, rule, new ConfigurationProperties(new Properties()), new ConnectionContext());
Iterator<String> routedDataSourceNames = actual.getActualDataSourceNames().iterator();
assertThat(routedDataSourceNames.next(), is(NONE_DB_DISCOVERY_DATA_SOURCE_NAME));
assertThat(routedDataSourceNames.next(), is(PRIMARY_DATA_SOURCE));
Expand All @@ -120,7 +121,7 @@ public void assertCreateRouteContextToPrimaryDataSourceWithLock() {
LogicSQL logicSQL = new LogicSQL(sqlStatementContext, "", Collections.emptyList());
ShardingSphereDatabase database = new ShardingSphereDatabase(DefaultDatabase.LOGIC_NAME, mock(DatabaseType.class), mock(ShardingSphereResource.class, RETURNS_DEEP_STUBS),
new ShardingSphereRuleMetaData(Collections.singleton(rule)), Collections.emptyMap());
RouteContext actual = sqlRouter.createRouteContext(logicSQL, database, rule, new ConfigurationProperties(new Properties()));
RouteContext actual = sqlRouter.createRouteContext(logicSQL, database, rule, new ConfigurationProperties(new Properties()), new ConnectionContext());
Iterator<String> routedDataSourceNames = actual.getActualDataSourceNames().iterator();
assertThat(routedDataSourceNames.next(), is(PRIMARY_DATA_SOURCE));
}
Expand All @@ -131,7 +132,7 @@ public void assertDecorateRouteContextToPrimaryDataSourceWithLock() {
LogicSQL logicSQL = new LogicSQL(sqlStatementContext, "", Collections.emptyList());
ShardingSphereDatabase database = new ShardingSphereDatabase(DefaultDatabase.LOGIC_NAME, mock(DatabaseType.class), mock(ShardingSphereResource.class, RETURNS_DEEP_STUBS),
new ShardingSphereRuleMetaData(Collections.singleton(rule)), Collections.emptyMap());
sqlRouter.decorateRouteContext(actual, logicSQL, database, rule, new ConfigurationProperties(new Properties()));
sqlRouter.decorateRouteContext(actual, logicSQL, database, rule, new ConfigurationProperties(new Properties()), new ConnectionContext());
Iterator<String> routedDataSourceNames = actual.getActualDataSourceNames().iterator();
assertThat(routedDataSourceNames.next(), is(NONE_DB_DISCOVERY_DATA_SOURCE_NAME));
assertThat(routedDataSourceNames.next(), is(PRIMARY_DATA_SOURCE));
Expand All @@ -142,7 +143,7 @@ public void assertCreateRouteContextToPrimaryDataSource() {
LogicSQL logicSQL = new LogicSQL(sqlStatementContext, "", Collections.emptyList());
ShardingSphereDatabase database = new ShardingSphereDatabase(DefaultDatabase.LOGIC_NAME, mock(DatabaseType.class), mock(ShardingSphereResource.class, RETURNS_DEEP_STUBS),
new ShardingSphereRuleMetaData(Collections.singleton(rule)), Collections.emptyMap());
RouteContext actual = sqlRouter.createRouteContext(logicSQL, database, rule, new ConfigurationProperties(new Properties()));
RouteContext actual = sqlRouter.createRouteContext(logicSQL, database, rule, new ConfigurationProperties(new Properties()), new ConnectionContext());
Iterator<String> routedDataSourceNames = actual.getActualDataSourceNames().iterator();
assertThat(routedDataSourceNames.next(), is(PRIMARY_DATA_SOURCE));
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
package org.apache.shardingsphere.readwritesplitting.spi;

import org.apache.shardingsphere.infra.config.algorithm.ShardingSphereAlgorithm;
import org.apache.shardingsphere.infra.session.transaction.TransactionConnectionContext;
import org.apache.shardingsphere.infra.util.spi.type.required.RequiredSPI;

import java.util.List;
Expand All @@ -33,7 +34,8 @@ public interface ReadQueryLoadBalanceAlgorithm extends ShardingSphereAlgorithm,
* @param name read query logic data source name
* @param writeDataSourceName name of write data source
* @param readDataSourceNames names of read data sources
* @param context context
* @return name of selected data source
*/
String getDataSource(String name, String writeDataSourceName, List<String> readDataSourceNames);
String getDataSource(String name, String writeDataSourceName, List<String> readDataSourceNames, TransactionConnectionContext context);
}
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@

package org.apache.shardingsphere.readwritesplitting.factory.fixture;

import org.apache.shardingsphere.infra.session.transaction.TransactionConnectionContext;
import org.apache.shardingsphere.readwritesplitting.spi.ReadQueryLoadBalanceAlgorithm;

import java.util.List;
Expand All @@ -25,7 +26,7 @@
public final class ReadQueryLoadBalanceAlgorithmFixture implements ReadQueryLoadBalanceAlgorithm {

@Override
public String getDataSource(final String name, final String writeDataSourceName, final List<String> readDataSourceNames) {
public String getDataSource(final String name, final String writeDataSourceName, final List<String> readDataSourceNames, final TransactionConnectionContext context) {
return null;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
package org.apache.shardingsphere.readwritesplitting.algorithm.loadbalance;

import lombok.Getter;
import org.apache.shardingsphere.infra.session.transaction.TransactionConnectionContext;
import org.apache.shardingsphere.readwritesplitting.spi.ReadQueryLoadBalanceAlgorithm;

import java.util.List;
Expand All @@ -37,7 +38,7 @@ public void init(final Properties props) {
}

@Override
public String getDataSource(final String name, final String writeDataSourceName, final List<String> readDataSourceNames) {
public String getDataSource(final String name, final String writeDataSourceName, final List<String> readDataSourceNames, final TransactionConnectionContext context) {
return writeDataSourceName;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,8 @@
package org.apache.shardingsphere.readwritesplitting.algorithm.loadbalance;

import lombok.Getter;
import org.apache.shardingsphere.infra.session.transaction.TransactionConnectionContext;
import org.apache.shardingsphere.readwritesplitting.spi.ReadQueryLoadBalanceAlgorithm;
import org.apache.shardingsphere.transaction.TransactionHolder;

import java.util.List;
import java.util.Properties;
Expand All @@ -39,12 +39,12 @@ public void init(final Properties props) {
}

@Override
public String getDataSource(final String name, final String writeDataSourceName, final List<String> readDataSourceNames) {
if (TransactionHolder.isTransaction()) {
if (null == TransactionHolder.getReadWriteSplitRoutedReplica()) {
TransactionHolder.setReadWriteSplitRoutedReplica(readDataSourceNames.get(ThreadLocalRandom.current().nextInt(readDataSourceNames.size())));
public String getDataSource(final String name, final String writeDataSourceName, final List<String> readDataSourceNames, final TransactionConnectionContext context) {
if (context.isInTransaction()) {
if (null == context.getReadWriteSplitReplicaRoute()) {
context.setReadWriteSplitReplicaRoute(readDataSourceNames.get(ThreadLocalRandom.current().nextInt(readDataSourceNames.size())));
}
return TransactionHolder.getReadWriteSplitRoutedReplica();
return context.getReadWriteSplitReplicaRoute();
}
return readDataSourceNames.get(ThreadLocalRandom.current().nextInt(readDataSourceNames.size()));
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,8 @@
package org.apache.shardingsphere.readwritesplitting.algorithm.loadbalance;

import lombok.Getter;
import org.apache.shardingsphere.infra.session.transaction.TransactionConnectionContext;
import org.apache.shardingsphere.readwritesplitting.spi.ReadQueryLoadBalanceAlgorithm;
import org.apache.shardingsphere.transaction.TransactionHolder;

import java.util.List;
import java.util.Properties;
Expand All @@ -41,12 +41,12 @@ public void init(final Properties props) {
}

@Override
public String getDataSource(final String name, final String writeDataSourceName, final List<String> readDataSourceNames) {
if (TransactionHolder.isTransaction()) {
if (null == TransactionHolder.getReadWriteSplitRoutedReplica()) {
TransactionHolder.setReadWriteSplitRoutedReplica(readDataSourceNames.get(Math.abs(count.getAndIncrement()) % readDataSourceNames.size()));
public String getDataSource(final String name, final String writeDataSourceName, final List<String> readDataSourceNames, final TransactionConnectionContext context) {
if (context.isInTransaction()) {
if (null == context.getReadWriteSplitReplicaRoute()) {
context.setReadWriteSplitReplicaRoute(readDataSourceNames.get(Math.abs(count.getAndIncrement()) % readDataSourceNames.size()));
}
return TransactionHolder.getReadWriteSplitRoutedReplica();
return context.getReadWriteSplitReplicaRoute();
}
return readDataSourceNames.get(Math.abs(count.getAndIncrement()) % readDataSourceNames.size());
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,8 @@
package org.apache.shardingsphere.readwritesplitting.algorithm.loadbalance;

import lombok.Getter;
import org.apache.shardingsphere.infra.session.transaction.TransactionConnectionContext;
import org.apache.shardingsphere.readwritesplitting.spi.ReadQueryLoadBalanceAlgorithm;
import org.apache.shardingsphere.transaction.TransactionHolder;

import java.util.Arrays;
import java.util.List;
Expand All @@ -45,14 +45,14 @@ public void init(final Properties props) {
}

@Override
public String getDataSource(final String name, final String writeDataSourceName, final List<String> readDataSourceNames) {
public String getDataSource(final String name, final String writeDataSourceName, final List<String> readDataSourceNames, final TransactionConnectionContext context) {
double[] weight = WEIGHT_MAP.containsKey(name) ? WEIGHT_MAP.get(name) : initWeight(readDataSourceNames);
WEIGHT_MAP.putIfAbsent(name, weight);
if (TransactionHolder.isTransaction()) {
if (null == TransactionHolder.getReadWriteSplitRoutedReplica()) {
TransactionHolder.setReadWriteSplitRoutedReplica(getDataSourceName(readDataSourceNames, weight));
if (context.isInTransaction()) {
if (null == context.getReadWriteSplitReplicaRoute()) {
context.setReadWriteSplitReplicaRoute(getDataSourceName(readDataSourceNames, weight));
}
return TransactionHolder.getReadWriteSplitRoutedReplica();
return context.getReadWriteSplitReplicaRoute();
}
return getDataSourceName(readDataSourceNames, weight);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,8 @@
package org.apache.shardingsphere.readwritesplitting.algorithm.loadbalance;

import lombok.Getter;
import org.apache.shardingsphere.infra.session.transaction.TransactionConnectionContext;
import org.apache.shardingsphere.readwritesplitting.spi.ReadQueryLoadBalanceAlgorithm;
import org.apache.shardingsphere.transaction.TransactionHolder;

import java.util.List;
import java.util.Properties;
Expand All @@ -39,8 +39,8 @@ public void init(final Properties props) {
}

@Override
public String getDataSource(final String name, final String writeDataSourceName, final List<String> readDataSourceNames) {
if (TransactionHolder.isTransaction()) {
public String getDataSource(final String name, final String writeDataSourceName, final List<String> readDataSourceNames, final TransactionConnectionContext context) {
if (context.isInTransaction()) {
return writeDataSourceName;
}
return readDataSourceNames.get(ThreadLocalRandom.current().nextInt(readDataSourceNames.size()));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,8 @@
package org.apache.shardingsphere.readwritesplitting.algorithm.loadbalance;

import lombok.Getter;
import org.apache.shardingsphere.infra.session.transaction.TransactionConnectionContext;
import org.apache.shardingsphere.readwritesplitting.spi.ReadQueryLoadBalanceAlgorithm;
import org.apache.shardingsphere.transaction.TransactionHolder;

import java.util.List;
import java.util.Properties;
Expand All @@ -41,8 +41,8 @@ public void init(final Properties props) {
}

@Override
public String getDataSource(final String name, final String writeDataSourceName, final List<String> readDataSourceNames) {
if (TransactionHolder.isTransaction()) {
public String getDataSource(final String name, final String writeDataSourceName, final List<String> readDataSourceNames, final TransactionConnectionContext context) {
if (context.isInTransaction()) {
return writeDataSourceName;
}
return readDataSourceNames.get(Math.abs(count.getAndIncrement()) % readDataSourceNames.size());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
package org.apache.shardingsphere.readwritesplitting.algorithm.loadbalance;

import lombok.Getter;
import org.apache.shardingsphere.infra.session.transaction.TransactionConnectionContext;
import org.apache.shardingsphere.readwritesplitting.spi.ReadQueryLoadBalanceAlgorithm;

import java.util.List;
Expand All @@ -38,7 +39,7 @@ public void init(final Properties props) {
}

@Override
public String getDataSource(final String name, final String writeDataSourceName, final List<String> readDataSourceNames) {
public String getDataSource(final String name, final String writeDataSourceName, final List<String> readDataSourceNames, final TransactionConnectionContext context) {
return readDataSourceNames.get(ThreadLocalRandom.current().nextInt(readDataSourceNames.size()));
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
package org.apache.shardingsphere.readwritesplitting.algorithm.loadbalance;

import lombok.Getter;
import org.apache.shardingsphere.infra.session.transaction.TransactionConnectionContext;
import org.apache.shardingsphere.readwritesplitting.spi.ReadQueryLoadBalanceAlgorithm;

import java.util.List;
Expand All @@ -40,7 +41,7 @@ public void init(final Properties props) {
}

@Override
public String getDataSource(final String name, final String writeDataSourceName, final List<String> readDataSourceNames) {
public String getDataSource(final String name, final String writeDataSourceName, final List<String> readDataSourceNames, final TransactionConnectionContext context) {
return readDataSourceNames.get(Math.abs(count.getAndIncrement()) % readDataSourceNames.size());
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
package org.apache.shardingsphere.readwritesplitting.algorithm.loadbalance;

import lombok.Getter;
import org.apache.shardingsphere.infra.session.transaction.TransactionConnectionContext;
import org.apache.shardingsphere.readwritesplitting.spi.ReadQueryLoadBalanceAlgorithm;

import java.util.Arrays;
Expand All @@ -44,7 +45,7 @@ public void init(final Properties props) {
}

@Override
public String getDataSource(final String name, final String writeDataSourceName, final List<String> readDataSourceNames) {
public String getDataSource(final String name, final String writeDataSourceName, final List<String> readDataSourceNames, final TransactionConnectionContext context) {
double[] weight = WEIGHT_MAP.containsKey(name) ? WEIGHT_MAP.get(name) : initWeight(readDataSourceNames);
WEIGHT_MAP.putIfAbsent(name, weight);
return getDataSourceName(readDataSourceNames, weight);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,8 @@
package org.apache.shardingsphere.readwritesplitting.algorithm.loadbalance;

import lombok.Getter;
import org.apache.shardingsphere.infra.session.transaction.TransactionConnectionContext;
import org.apache.shardingsphere.readwritesplitting.spi.ReadQueryLoadBalanceAlgorithm;
import org.apache.shardingsphere.transaction.TransactionHolder;

import java.util.Arrays;
import java.util.List;
Expand All @@ -45,8 +45,8 @@ public void init(final Properties props) {
}

@Override
public String getDataSource(final String name, final String writeDataSourceName, final List<String> readDataSourceNames) {
if (TransactionHolder.isTransaction()) {
public String getDataSource(final String name, final String writeDataSourceName, final List<String> readDataSourceNames, final TransactionConnectionContext context) {
if (context.isInTransaction()) {
return writeDataSourceName;
}
double[] weight = weightMap.containsKey(name) ? weightMap.get(name) : initWeight(readDataSourceNames);
Expand Down
Loading

0 comments on commit 3bc99d5

Please sign in to comment.