Skip to content

Commit 20daad1

Browse files
authored
Refactor DockerStorageContainer and remove useless impl (#36565)
* Refactor DockerStorageContainer and remove useless impl * Refactor DockerStorageContainer and remove useless impl * Refactor DockerStorageContainer and remove useless impl
1 parent 92d16f4 commit 20daad1

File tree

8 files changed

+39
-170
lines changed

8 files changed

+39
-170
lines changed

test/e2e/agent/engine/src/test/java/org/apache/shardingsphere/test/e2e/agent/engine/env/AgentE2ETestEnvironment.java

Lines changed: 17 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@
4040
import org.apache.shardingsphere.test.e2e.env.container.atomic.governance.GovernanceContainerFactory;
4141
import org.apache.shardingsphere.test.e2e.env.container.atomic.storage.config.StorageContainerConfigurationFactory;
4242
import org.apache.shardingsphere.test.e2e.env.container.atomic.storage.config.option.StorageContainerConfigurationOptionFactory;
43-
import org.apache.shardingsphere.test.e2e.env.container.atomic.storage.type.docker.impl.MySQLContainer;
43+
import org.apache.shardingsphere.test.e2e.env.container.atomic.storage.type.docker.DockerStorageContainer;
4444
import org.awaitility.Awaitility;
4545
import org.testcontainers.containers.output.OutputFrame;
4646

@@ -99,9 +99,9 @@ public void init() {
9999
}
100100
Optional<DockerITContainer> agentPluginContainer = TypedSPILoader.findService(AgentPluginContainerFactory.class, testConfig.getPluginType()).map(AgentPluginContainerFactory::create);
101101
if (AdapterType.PROXY.getValue().equalsIgnoreCase(testConfig.getAdapter())) {
102-
createProxyEnvironment(agentPluginContainer);
102+
createProxyEnvironment(agentPluginContainer.orElse(null));
103103
} else if (AdapterType.JDBC.getValue().equalsIgnoreCase(testConfig.getAdapter())) {
104-
createJDBCEnvironment(agentPluginContainer);
104+
createJDBCEnvironment(agentPluginContainer.orElse(null));
105105
}
106106
log.info("Waiting to collect data ...");
107107
long collectDataWaitSeconds = testConfig.getCollectDataWaitSeconds();
@@ -112,20 +112,21 @@ public void init() {
112112
initialized = true;
113113
}
114114

115-
@SuppressWarnings("OptionalUsedAsFieldOrParameterType")
116-
private void createProxyEnvironment(final Optional<DockerITContainer> agentPluginContainer) {
115+
private void createProxyEnvironment(final DockerITContainer agentPluginContainer) {
117116
containers = new ITContainers();
118117
ShardingSphereProxyClusterContainer proxyContainer = new ShardingSphereProxyClusterContainer(databaseType, getAdaptorContainerConfiguration());
119118
proxyContainer.withLogConsumer(testConfig.isLogEnabled() ? this::collectLogs : null);
120-
MySQLContainer storageContainer = new MySQLContainer(
119+
DockerStorageContainer storageContainer = new DockerStorageContainer(databaseType,
121120
imageConfig.getMysqlImage(), StorageContainerConfigurationFactory.newInstance(StorageContainerConfigurationOptionFactory.newInstance(databaseType), databaseType, null));
122121
proxyContainer.dependsOn(storageContainer);
123122
containers.registerContainer(storageContainer);
124123
GovernanceContainer governanceContainer = GovernanceContainerFactory.newInstance("ZooKeeper");
125124
proxyContainer.dependsOn(governanceContainer);
126125
containers.registerContainer(governanceContainer);
127-
agentPluginContainer.ifPresent(proxyContainer::dependsOn);
128-
agentPluginContainer.ifPresent(optional -> containers.registerContainer(optional));
126+
if (null != agentPluginContainer) {
127+
proxyContainer.dependsOn(agentPluginContainer);
128+
containers.registerContainer(agentPluginContainer);
129+
}
129130
containers.registerContainer(proxyContainer);
130131
containers.start();
131132
try {
@@ -145,16 +146,17 @@ private AdaptorContainerConfiguration getAdaptorContainerConfiguration() {
145146
return new AdaptorContainerConfiguration("sharding_db", Collections.emptyList(), mountedResources, imageConfig.getProxyImage(), "");
146147
}
147148

148-
@SuppressWarnings("OptionalUsedAsFieldOrParameterType")
149-
private void createJDBCEnvironment(final Optional<DockerITContainer> agentPluginContainer) {
149+
private void createJDBCEnvironment(final DockerITContainer agentPluginContainer) {
150150
containers = new ITContainers();
151-
MySQLContainer storageContainer = new MySQLContainer(imageConfig.getMysqlImage(),
152-
StorageContainerConfigurationFactory.newInstance(StorageContainerConfigurationOptionFactory.newInstance(databaseType), databaseType, null));
151+
DockerStorageContainer storageContainer = new DockerStorageContainer(databaseType,
152+
imageConfig.getMysqlImage(), StorageContainerConfigurationFactory.newInstance(StorageContainerConfigurationOptionFactory.newInstance(databaseType), databaseType, null));
153153
ShardingSphereJdbcAgentContainer jdbcAgentContainer = new ShardingSphereJdbcAgentContainer(
154154
imageConfig.getJdbcProjectImage(), testConfig.getPluginType(), testConfig.isLogEnabled() ? this::collectLogs : null);
155155
jdbcAgentContainer.dependsOn(storageContainer);
156-
agentPluginContainer.ifPresent(jdbcAgentContainer::dependsOn);
157-
agentPluginContainer.ifPresent(optional -> containers.registerContainer(optional));
156+
if (null != agentPluginContainer) {
157+
jdbcAgentContainer.dependsOn(agentPluginContainer);
158+
containers.registerContainer(agentPluginContainer);
159+
}
158160
containers.registerContainer(storageContainer);
159161
containers.registerContainer(jdbcAgentContainer);
160162
containers.start();
@@ -167,7 +169,7 @@ private void collectLogs(final OutputFrame outputFrame) {
167169
}
168170

169171
/**
170-
* Destroy environment.
172+
* Destroy the environment.
171173
*/
172174
public void destroy() {
173175
if (!AgentE2ETestConfiguration.getInstance().containsTestParameter()) {

test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/container/atomic/DockerITContainer.java

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@
2020
import lombok.Getter;
2121
import lombok.Setter;
2222
import lombok.extern.slf4j.Slf4j;
23-
import org.apache.shardingsphere.test.e2e.env.container.atomic.util.DockerImageVersion;
2423
import org.testcontainers.containers.BindMode;
2524
import org.testcontainers.containers.GenericContainer;
2625
import org.testcontainers.containers.wait.strategy.DockerHealthcheckWaitStrategy;
@@ -43,12 +42,9 @@ public abstract class DockerITContainer extends GenericContainer<DockerITContain
4342

4443
private String name;
4544

46-
private final int majorVersion;
47-
4845
protected DockerITContainer(final String name, final String containerImage) {
4946
super(new RemoteDockerImage(DockerImageName.parse(containerImage)));
5047
this.name = name;
51-
majorVersion = new DockerImageVersion(containerImage).getMajorVersion();
5248
}
5349

5450
protected final void mapResources(final Map<String, String> resources) {

test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/container/atomic/storage/StorageContainerFactory.java

Lines changed: 6 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -21,12 +21,9 @@
2121
import lombok.NoArgsConstructor;
2222
import org.apache.shardingsphere.database.connector.core.type.DatabaseType;
2323
import org.apache.shardingsphere.test.e2e.env.container.atomic.storage.config.StorageContainerConfiguration;
24-
import org.apache.shardingsphere.test.e2e.env.container.atomic.storage.type.embedded.impl.H2Container;
24+
import org.apache.shardingsphere.test.e2e.env.container.atomic.storage.type.docker.DockerStorageContainer;
2525
import org.apache.shardingsphere.test.e2e.env.container.atomic.storage.type.docker.impl.HiveContainer;
26-
import org.apache.shardingsphere.test.e2e.env.container.atomic.storage.type.docker.impl.MariaDBContainer;
27-
import org.apache.shardingsphere.test.e2e.env.container.atomic.storage.type.docker.impl.MySQLContainer;
28-
import org.apache.shardingsphere.test.e2e.env.container.atomic.storage.type.docker.impl.OpenGaussContainer;
29-
import org.apache.shardingsphere.test.e2e.env.container.atomic.storage.type.docker.impl.PostgreSQLContainer;
26+
import org.apache.shardingsphere.test.e2e.env.container.atomic.storage.type.embedded.impl.H2Container;
3027
import org.apache.shardingsphere.test.e2e.env.runtime.E2ETestEnvironment;
3128

3229
/**
@@ -59,17 +56,14 @@ public static StorageContainer newInstance(final DatabaseType databaseType, fina
5956
public static StorageContainer newInstance(final DatabaseType databaseType, final String storageContainerImage, final StorageContainerConfiguration storageContainerConfig) {
6057
switch (databaseType.getType()) {
6158
case "MySQL":
62-
return new MySQLContainer(storageContainerImage, storageContainerConfig);
6359
case "PostgreSQL":
64-
return new PostgreSQLContainer(storageContainerImage, storageContainerConfig);
6560
case "openGauss":
66-
return new OpenGaussContainer(storageContainerImage, storageContainerConfig);
67-
case "H2":
68-
return new H2Container(storageContainerConfig);
61+
case "MariaDB":
62+
return new DockerStorageContainer(databaseType, storageContainerImage, storageContainerConfig);
6963
case "Hive":
7064
return new HiveContainer(storageContainerImage, storageContainerConfig);
71-
case "MariaDB":
72-
return new MariaDBContainer(storageContainerImage, storageContainerConfig);
65+
case "H2":
66+
return new H2Container(storageContainerConfig);
7367
default:
7468
throw new RuntimeException(String.format("Database `%s` is unknown.", databaseType.getType()));
7569
}

test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/container/atomic/storage/type/docker/DockerStorageContainer.java

Lines changed: 16 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
import org.apache.shardingsphere.test.e2e.env.container.atomic.storage.config.StorageContainerConfiguration;
2727
import org.apache.shardingsphere.test.e2e.env.container.atomic.storage.config.mount.MountConfigurationResourceGenerator;
2828
import org.apache.shardingsphere.test.e2e.env.container.atomic.storage.config.mount.MountSQLResourceGenerator;
29+
import org.apache.shardingsphere.test.e2e.env.container.atomic.util.DockerImageVersion;
2930
import org.apache.shardingsphere.test.e2e.env.container.atomic.util.StorageContainerUtils;
3031
import org.apache.shardingsphere.test.e2e.env.container.wait.JdbcConnectionWaitStrategy;
3132
import org.apache.shardingsphere.test.e2e.env.runtime.DataSourceEnvironment;
@@ -45,30 +46,38 @@
4546
/**
4647
* Docker storage container.
4748
*/
48-
public abstract class DockerStorageContainer extends DockerITContainer implements StorageContainer {
49+
public class DockerStorageContainer extends DockerITContainer implements StorageContainer {
4950

5051
private final DatabaseType databaseType;
5152

5253
private final StorageContainerConfiguration storageContainerConfig;
5354

55+
@Getter
56+
private final int majorVersion;
57+
5458
@Getter
5559
private final Map<String, DataSource> actualDataSourceMap = new LinkedHashMap<>();
5660

5761
@Getter
5862
private final Map<String, DataSource> expectedDataSourceMap = new LinkedHashMap<>();
5963

60-
protected DockerStorageContainer(final DatabaseType databaseType, final String containerImage, final StorageContainerConfiguration storageContainerConfig) {
61-
super(databaseType.getType().toLowerCase(), Strings.isNullOrEmpty(containerImage) ? storageContainerConfig.getConfigurationOption().getDefaultImageName() : containerImage);
64+
public DockerStorageContainer(final DatabaseType databaseType, final String containerImage, final StorageContainerConfiguration storageContainerConfig) {
65+
super(databaseType.getType().toLowerCase(), getContainerImage(containerImage, storageContainerConfig));
6266
this.databaseType = databaseType;
6367
this.storageContainerConfig = storageContainerConfig;
68+
majorVersion = new DockerImageVersion(getContainerImage(containerImage, storageContainerConfig)).getMajorVersion();
69+
}
70+
71+
private static String getContainerImage(final String containerImage, final StorageContainerConfiguration storageContainerConfig) {
72+
return Strings.isNullOrEmpty(containerImage) ? storageContainerConfig.getConfigurationOption().getDefaultImageName() : containerImage;
6473
}
6574

6675
@Override
6776
protected final void configure() {
6877
setCommands();
6978
addEnvironments();
70-
mapResources(new MountConfigurationResourceGenerator(storageContainerConfig.getConfigurationOption(), databaseType).generate(getMajorVersion(), storageContainerConfig.getScenario()));
71-
mapResources(new MountSQLResourceGenerator(storageContainerConfig.getConfigurationOption(), databaseType).generate(getMajorVersion(), storageContainerConfig.getScenario()));
79+
mapResources(new MountConfigurationResourceGenerator(storageContainerConfig.getConfigurationOption(), databaseType).generate(majorVersion, storageContainerConfig.getScenario()));
80+
mapResources(new MountSQLResourceGenerator(storageContainerConfig.getConfigurationOption(), databaseType).generate(majorVersion, storageContainerConfig.getScenario()));
7281
setPrivilegedMode();
7382
withExposedPorts(getExposedPort());
7483
withStartupTimeout(Duration.of(storageContainerConfig.getConfigurationOption().getStartupTimeoutSeconds(), ChronoUnit.SECONDS));
@@ -93,7 +102,7 @@ private void setPrivilegedMode() {
93102
}
94103

95104
private String getURL() {
96-
return storageContainerConfig.getConfigurationOption().getDefaultDatabaseName(getMajorVersion())
105+
return storageContainerConfig.getConfigurationOption().getDefaultDatabaseName(majorVersion)
97106
.map(optional -> DataSourceEnvironment.getURL(databaseType, "localhost", getFirstMappedPort(), optional))
98107
.orElseGet(() -> DataSourceEnvironment.getURL(databaseType, "localhost", getFirstMappedPort()));
99108
}
@@ -130,7 +139,7 @@ public final DataSource createAccessDataSource(final String dataSourceName) {
130139
*/
131140
public final String getJdbcUrl(final String dataSourceName) {
132141
return DataSourceEnvironment.getURL(databaseType, getHost(), getMappedPort(),
133-
Strings.isNullOrEmpty(dataSourceName) ? storageContainerConfig.getConfigurationOption().getDefaultDatabaseName(getMajorVersion()).orElse("") : dataSourceName);
142+
Strings.isNullOrEmpty(dataSourceName) ? storageContainerConfig.getConfigurationOption().getDefaultDatabaseName(majorVersion).orElse("") : dataSourceName);
134143
}
135144

136145
/**

test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/container/atomic/storage/type/docker/impl/MariaDBContainer.java

Lines changed: 0 additions & 33 deletions
This file was deleted.

test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/container/atomic/storage/type/docker/impl/MySQLContainer.java

Lines changed: 0 additions & 33 deletions
This file was deleted.

test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/container/atomic/storage/type/docker/impl/OpenGaussContainer.java

Lines changed: 0 additions & 33 deletions
This file was deleted.

test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/container/atomic/storage/type/docker/impl/PostgreSQLContainer.java

Lines changed: 0 additions & 33 deletions
This file was deleted.

0 commit comments

Comments
 (0)