This is an automated email from the ASF dual-hosted git repository.
duanzhengqiang 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 851c857 Refactor ComposedContainer (#15301)
851c857 is described below
commit 851c857e2bc7026b316d466e2d69f924741fb50b
Author: Liang Zhang <[email protected]>
AuthorDate: Wed Feb 9 07:11:18 2022 +0800
Refactor ComposedContainer (#15301)
---
.../framework/compose/ComposedContainer.java | 35 +++++++-------
.../compose/mode/ClusterComposedContainer.java | 4 +-
.../compose/mode/MemoryComposedContainer.java | 4 +-
.../container/ShardingSphereContainer.java | 27 +++++------
.../adapter/ShardingSphereAdapterContainer.java | 4 +-
.../storage/ShardingSphereStorageContainer.java | 54 +++++++++++-----------
6 files changed, 62 insertions(+), 66 deletions(-)
diff --git
a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/framework/compose/ComposedContainer.java
b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/framework/compose/ComposedContainer.java
index bf5158c..d52ece0 100644
---
a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/framework/compose/ComposedContainer.java
+++
b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/framework/compose/ComposedContainer.java
@@ -52,7 +52,8 @@ import java.util.function.Supplier;
@Getter(AccessLevel.PROTECTED)
public abstract class ComposedContainer extends ExternalResource implements
Closeable {
- private final String clusterName;
+ @Getter(AccessLevel.NONE)
+ private final String name;
private final ParameterizedArray parameterizedArray;
@@ -64,21 +65,6 @@ public abstract class ComposedContainer extends
ExternalResource implements Clos
private volatile boolean executed;
- protected ShardingSphereAdapterContainer createAdapterContainer() {
- Supplier<ShardingSphereAdapterContainer> supplier = () -> {
- switch (parameterizedArray.getAdapter()) {
- case "proxy":
- return new
ShardingSphereProxyContainer(parameterizedArray);
- case "jdbc":
- return new ShardingSphereJDBCContainer(parameterizedArray);
- default:
- throw new RuntimeException(String.format("Adapter[%s] is
unknown.", parameterizedArray.getAdapter()));
-
- }
- };
- return createContainer(supplier, "adapter");
- }
-
protected ShardingSphereStorageContainer createStorageContainer() {
Supplier<ShardingSphereStorageContainer> supplier = () -> {
switch (parameterizedArray.getDatabaseType().getName()) {
@@ -95,12 +81,27 @@ public abstract class ComposedContainer extends
ExternalResource implements Clos
return createContainer(supplier,
parameterizedArray.getDatabaseType().getName().toLowerCase() + "." +
parameterizedArray.getScenario() + ".host");
}
+ protected ShardingSphereAdapterContainer createAdapterContainer() {
+ Supplier<ShardingSphereAdapterContainer> supplier = () -> {
+ switch (parameterizedArray.getAdapter()) {
+ case "proxy":
+ return new
ShardingSphereProxyContainer(parameterizedArray);
+ case "jdbc":
+ return new ShardingSphereJDBCContainer(parameterizedArray);
+ default:
+ throw new RuntimeException(String.format("Adapter[%s] is
unknown.", parameterizedArray.getAdapter()));
+
+ }
+ };
+ return createContainer(supplier, "adapter");
+ }
+
protected final <T extends ShardingSphereContainer> T
createContainer(final Supplier<T> supplier, final String hostname) {
T result = supplier.get();
containers.add(result);
result.setNetwork(network);
result.setNetworkAliases(Collections.singletonList(hostname));
- result.withLogConsumer(ContainerLogs.newConsumer(String.join("-",
clusterName, result.getDockerName())));
+ result.withLogConsumer(ContainerLogs.newConsumer(String.join("-",
name, result.getName())));
return result;
}
diff --git
a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/framework/compose/mode/ClusterComposedContainer.java
b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/framework/compose/mode/ClusterComposedContainer.java
index aeecc76..b396fa9 100644
---
a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/framework/compose/mode/ClusterComposedContainer.java
+++
b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/framework/compose/mode/ClusterComposedContainer.java
@@ -46,8 +46,8 @@ public final class ClusterComposedContainer extends
ComposedContainer {
@Getter(AccessLevel.NONE)
private final ZookeeperContainer zookeeperContainer;
- public ClusterComposedContainer(final String clusterName, final
ParameterizedArray parameterizedArray) {
- super(clusterName, parameterizedArray);
+ public ClusterComposedContainer(final String name, final
ParameterizedArray parameterizedArray) {
+ super(name, parameterizedArray);
this.storageContainer = createStorageContainer();
this.adapterContainer = createAdapterContainer();
this.storageContainer.setNetworkAliases(Collections.singletonList(parameterizedArray.getDatabaseType().getName().toLowerCase()
+ ".sharding_governance.host"));
diff --git
a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/framework/compose/mode/MemoryComposedContainer.java
b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/framework/compose/mode/MemoryComposedContainer.java
index 115bf0a..db92b3e 100644
---
a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/framework/compose/mode/MemoryComposedContainer.java
+++
b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/framework/compose/mode/MemoryComposedContainer.java
@@ -33,8 +33,8 @@ public final class MemoryComposedContainer extends
ComposedContainer {
private final ShardingSphereAdapterContainer adapterContainer;
- public MemoryComposedContainer(final String clusterName, final
ParameterizedArray parameterizedArray) {
- super(clusterName, parameterizedArray);
+ public MemoryComposedContainer(final String name, final ParameterizedArray
parameterizedArray) {
+ super(name, parameterizedArray);
this.storageContainer = createStorageContainer();
this.adapterContainer = createAdapterContainer();
adapterContainer.dependsOn(storageContainer);
diff --git
a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/framework/container/ShardingSphereContainer.java
b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/framework/container/ShardingSphereContainer.java
index ac3cb03..c351e6e 100644
---
a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/framework/container/ShardingSphereContainer.java
+++
b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/framework/container/ShardingSphereContainer.java
@@ -37,33 +37,30 @@ import java.util.stream.Collectors;
public abstract class ShardingSphereContainer extends
GenericContainer<ShardingSphereContainer> {
@Getter
- private final boolean isFakeContainer;
+ private final String name;
- @Getter
- private final ParameterizedArray parameterizedArray;
+ private final boolean isFakedContainer;
@Getter
- private final String dockerName;
+ private final ParameterizedArray parameterizedArray;
- public ShardingSphereContainer(final String dockerName, final String
dockerImageName, final boolean isFakeContainer, final ParameterizedArray
parameterizedArray) {
- super(convertToDockerImage(dockerImageName, isFakeContainer));
- this.dockerName = dockerName;
- this.isFakeContainer = isFakeContainer;
+ public ShardingSphereContainer(final String name, final String
dockerImageName, final boolean isFakedContainer, final ParameterizedArray
parameterizedArray) {
+ super(getDockerImage(dockerImageName, isFakedContainer));
+ this.name = name;
+ this.isFakedContainer = isFakedContainer;
this.parameterizedArray = parameterizedArray;
}
- private static RemoteDockerImage convertToDockerImage(final String
dockerImageName, final boolean isFakeContainer) {
- if (isFakeContainer) {
- return new
RemoteDockerImage(DockerImageName.parse(dockerImageName)).withImagePullPolicy(dockerName
-> false);
- }
- return new RemoteDockerImage(DockerImageName.parse(dockerImageName));
+ private static RemoteDockerImage getDockerImage(final String imageName,
final boolean isFakedContainer) {
+ RemoteDockerImage result = new
RemoteDockerImage(DockerImageName.parse(imageName));
+ return isFakedContainer ? result.withImagePullPolicy(dockerName ->
false) : result;
}
@Override
public void start() {
configure();
startDependencies();
- if (!isFakeContainer) {
+ if (!isFakedContainer) {
super.start();
}
execute();
@@ -83,7 +80,7 @@ public abstract class ShardingSphereContainer extends
GenericContainer<ShardingS
// CHECKSTYLE:OFF
} catch (final Exception ex) {
// CHECKSTYLE:ON
- log.info("Failed to check container {} healthy.",
c.getDockerName(), ex);
+ log.info("Failed to check container {} healthy.",
c.getName(), ex);
return false;
}
})
diff --git
a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/framework/container/adapter/ShardingSphereAdapterContainer.java
b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/framework/container/adapter/ShardingSphereAdapterContainer.java
index b514c301..20b681d 100644
---
a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/framework/container/adapter/ShardingSphereAdapterContainer.java
+++
b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/framework/container/adapter/ShardingSphereAdapterContainer.java
@@ -47,8 +47,8 @@ public abstract class ShardingSphereAdapterContainer extends
ShardingSphereConta
}
@SneakyThrows
- public ShardingSphereAdapterContainer(final String dockerName, final
String dockerImageName, final boolean isFakeContainer, final ParameterizedArray
parameterizedArray) {
- super(dockerName, dockerImageName, isFakeContainer,
parameterizedArray);
+ public ShardingSphereAdapterContainer(final String name, final String
dockerImageName, final boolean isFakedContainer, final ParameterizedArray
parameterizedArray) {
+ super(name, dockerImageName, isFakedContainer, parameterizedArray);
this.authentication = loadAuthentication(parameterizedArray);
}
diff --git
a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/framework/container/storage/ShardingSphereStorageContainer.java
b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/framework/container/storage/ShardingSphereStorageContainer.java
index 1df39f4..02d2fe3 100644
---
a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/framework/container/storage/ShardingSphereStorageContainer.java
+++
b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/framework/container/storage/ShardingSphereStorageContainer.java
@@ -22,8 +22,8 @@ import com.zaxxer.hikari.HikariDataSource;
import lombok.Getter;
import lombok.SneakyThrows;
import org.apache.shardingsphere.infra.database.type.DatabaseType;
-import
org.apache.shardingsphere.test.integration.env.database.DatabaseEnvironmentManager;
import org.apache.shardingsphere.test.integration.env.DataSourceEnvironment;
+import
org.apache.shardingsphere.test.integration.env.database.DatabaseEnvironmentManager;
import
org.apache.shardingsphere.test.integration.framework.container.ShardingSphereContainer;
import
org.apache.shardingsphere.test.integration.framework.param.model.ParameterizedArray;
import org.testcontainers.containers.BindMode;
@@ -31,9 +31,10 @@ import
org.testcontainers.shaded.com.google.common.collect.ImmutableMap;
import
org.testcontainers.shaded.com.google.common.collect.ImmutableMap.Builder;
import javax.sql.DataSource;
+import javax.xml.bind.JAXBException;
+import java.io.IOException;
import java.util.Collection;
import java.util.Map;
-import java.util.Objects;
import java.util.Optional;
/**
@@ -42,19 +43,14 @@ import java.util.Optional;
public abstract class ShardingSphereStorageContainer extends
ShardingSphereContainer {
@Getter
- private final Collection<String> databases;
-
- private ImmutableMap<String, DataSource> dataSourceMap;
-
- @Getter
private final DatabaseType databaseType;
- @SneakyThrows
- public ShardingSphereStorageContainer(final String dockerName, final
String dockerImageName, final DatabaseType databaseType,
- final boolean isFakeContainer, final
ParameterizedArray parameterizedArray) {
- super(dockerName, dockerImageName, isFakeContainer,
parameterizedArray);
+ private Map<String, DataSource> dataSourceMap;
+
+ public ShardingSphereStorageContainer(final String name, final String
dockerImageName,
+ final DatabaseType databaseType,
final boolean isFakedContainer, final ParameterizedArray parameterizedArray) {
+ super(name, dockerImageName, isFakedContainer, parameterizedArray);
this.databaseType = databaseType;
- this.databases =
DatabaseEnvironmentManager.getDatabaseNames(getParameterizedArray().getScenario());
}
/**
@@ -68,32 +64,34 @@ public abstract class ShardingSphereStorageContainer
extends ShardingSphereConta
return this;
}
- protected DataSource createDataSource(final String dataSourceName) {
- HikariConfig config = new HikariConfig();
- config.setUsername(getUsername());
- config.setPassword(getPassword());
- config.setDriverClassName(getDriverClassName());
- config.setJdbcUrl(getUrl(dataSourceName));
- config.setMaximumPoolSize(4);
- config.setTransactionIsolation("TRANSACTION_READ_COMMITTED");
- getConnectionInitSQL().ifPresent(config::setConnectionInitSql);
- return new HikariDataSource(config);
- }
-
/**
- * Get DataSource Map.
+ * Get data source map.
*
- * @return DatabaseName and DataSource Map
+ * @return database name and data source map
*/
+ @SneakyThrows({IOException.class, JAXBException.class})
public synchronized Map<String, DataSource> getDataSourceMap() {
- if (Objects.isNull(dataSourceMap)) {
+ if (null == dataSourceMap) {
+ Collection<String> dataSourceNames =
DatabaseEnvironmentManager.getDatabaseNames(getParameterizedArray().getScenario());
Builder<String, DataSource> builder = ImmutableMap.builder();
- databases.forEach(e -> builder.put(e, createDataSource(e)));
+ dataSourceNames.forEach(each -> builder.put(each,
createDataSource(each)));
dataSourceMap = builder.build();
}
return dataSourceMap;
}
+ private DataSource createDataSource(final String dataSourceName) {
+ HikariConfig config = new HikariConfig();
+ config.setDriverClassName(getDriverClassName());
+ config.setJdbcUrl(getUrl(dataSourceName));
+ config.setUsername(getUsername());
+ config.setPassword(getPassword());
+ config.setMaximumPoolSize(4);
+ config.setTransactionIsolation("TRANSACTION_READ_COMMITTED");
+ getConnectionInitSQL().ifPresent(config::setConnectionInitSql);
+ return new HikariDataSource(config);
+ }
+
protected Optional<String> getConnectionInitSQL() {
return Optional.empty();
}