This is an automated email from the ASF dual-hosted git repository. zhangliang 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 cda8b6c3ebe Refactor DockerStorageContainer (#36541) cda8b6c3ebe is described below commit cda8b6c3ebe2012930221d3c40a6de7ba972ca08 Author: Liang Zhang <zhangli...@apache.org> AuthorDate: Fri Sep 12 18:24:14 2025 +0800 Refactor DockerStorageContainer (#36541) --- .../storage/type/docker/DockerStorageContainer.java | 10 +++++++++- .../storage/type/docker/impl/HiveContainer.java | 19 +++---------------- .../storage/type/docker/impl/MariaDBContainer.java | 18 +++--------------- .../storage/type/docker/impl/MySQLContainer.java | 13 +++---------- .../storage/type/docker/impl/OpenGaussContainer.java | 13 +++---------- .../storage/type/docker/impl/PostgreSQLContainer.java | 18 +++--------------- 6 files changed, 24 insertions(+), 67 deletions(-) diff --git a/test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/container/atomic/storage/type/docker/DockerStorageContainer.java b/test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/container/atomic/storage/type/docker/DockerStorageContainer.java index eee2a2e3bbb..4dc4711469d 100644 --- a/test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/container/atomic/storage/type/docker/DockerStorageContainer.java +++ b/test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/container/atomic/storage/type/docker/DockerStorageContainer.java @@ -23,6 +23,7 @@ import org.apache.shardingsphere.database.connector.core.type.DatabaseType; import org.apache.shardingsphere.test.e2e.env.container.atomic.DockerITContainer; import org.apache.shardingsphere.test.e2e.env.container.atomic.constants.StorageContainerConstants; import org.apache.shardingsphere.test.e2e.env.container.atomic.storage.StorageContainer; +import org.apache.shardingsphere.test.e2e.env.container.atomic.storage.config.StorageContainerConfiguration; import org.apache.shardingsphere.test.e2e.env.container.atomic.util.StorageContainerUtils; import org.apache.shardingsphere.test.e2e.env.container.wait.JdbcConnectionWaitStrategy; import org.apache.shardingsphere.test.e2e.env.runtime.DataSourceEnvironment; @@ -50,17 +51,24 @@ public abstract class DockerStorageContainer extends DockerITContainer implement private final DatabaseType databaseType; + private final StorageContainerConfiguration storageContainerConfig; + private final Map<String, DataSource> actualDataSourceMap = new LinkedHashMap<>(); private final Map<String, DataSource> expectedDataSourceMap = new LinkedHashMap<>(); - protected DockerStorageContainer(final DatabaseType databaseType, final String containerImage) { + protected DockerStorageContainer(final DatabaseType databaseType, final String containerImage, final StorageContainerConfiguration storageContainerConfig) { super(databaseType.getType().toLowerCase(), containerImage); this.databaseType = databaseType; + this.storageContainerConfig = storageContainerConfig; } @Override protected void configure() { + setCommands(storageContainerConfig.getCommand()); + addEnvs(storageContainerConfig.getEnvironments()); + mapResources(storageContainerConfig.getMountedConfigurationResources()); + mapResources(storageContainerConfig.getMountedSQLResources()); withExposedPorts(getExposedPort()); setWaitStrategy(new JdbcConnectionWaitStrategy(() -> DriverManager.getConnection(getURL(), CHECK_READY_USER, CHECK_READY_PASSWORD))); } diff --git a/test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/container/atomic/storage/type/docker/impl/HiveContainer.java b/test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/container/atomic/storage/type/docker/impl/HiveContainer.java index 8f88b5b19ca..c521c98da63 100644 --- a/test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/container/atomic/storage/type/docker/impl/HiveContainer.java +++ b/test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/container/atomic/storage/type/docker/impl/HiveContainer.java @@ -23,11 +23,8 @@ import org.apache.shardingsphere.database.connector.core.type.DatabaseType; import org.apache.shardingsphere.infra.spi.type.typed.TypedSPILoader; import org.apache.shardingsphere.test.e2e.env.container.atomic.storage.config.StorageContainerConfiguration; import org.apache.shardingsphere.test.e2e.env.container.atomic.storage.type.docker.DockerStorageContainer; -import org.apache.shardingsphere.test.e2e.env.container.wait.JdbcConnectionWaitStrategy; -import org.apache.shardingsphere.test.e2e.env.runtime.DataSourceEnvironment; import java.io.IOException; -import java.sql.DriverManager; import java.time.Duration; import java.time.temporal.ChronoUnit; import java.util.Collection; @@ -43,34 +40,24 @@ public final class HiveContainer extends DockerStorageContainer { public static final int EXPOSED_PORT = 10000; - private final StorageContainerConfiguration storageContainerConfig; - public HiveContainer(final String containerImage, final StorageContainerConfiguration storageContainerConfig) { - super(TypedSPILoader.getService(DatabaseType.class, "Hive"), Strings.isNullOrEmpty(containerImage) ? "apache/hive:4.0.1" : containerImage); - this.storageContainerConfig = storageContainerConfig; + super(TypedSPILoader.getService(DatabaseType.class, "Hive"), Strings.isNullOrEmpty(containerImage) ? "apache/hive:4.0.1" : containerImage, storageContainerConfig); } @Override protected void configure() { - setCommands(storageContainerConfig.getCommand()); - addEnvs(storageContainerConfig.getEnvironments()); - mapResources(storageContainerConfig.getMountedConfigurationResources()); - mapResources(storageContainerConfig.getMountedSQLResources()); - withExposedPorts(getExposedPort()); super.configure(); withStartupTimeout(Duration.of(180L, ChronoUnit.SECONDS)); - setWaitStrategy(new JdbcConnectionWaitStrategy( - () -> DriverManager.getConnection(DataSourceEnvironment.getURL(getDatabaseType(), "localhost", getFirstMappedPort()), getUsername(), getPassword()))); } @Override protected Collection<String> getDatabaseNames() { - return storageContainerConfig.getActualDatabaseTypes().entrySet().stream().filter(entry -> entry.getValue() == getDatabaseType()).map(Entry::getKey).collect(Collectors.toList()); + return getStorageContainerConfig().getActualDatabaseTypes().entrySet().stream().filter(entry -> entry.getValue() == getDatabaseType()).map(Entry::getKey).collect(Collectors.toList()); } @Override protected Collection<String> getExpectedDatabaseNames() { - return storageContainerConfig.getExpectedDatabaseTypes().entrySet().stream().filter(entry -> entry.getValue() == getDatabaseType()).map(Entry::getKey).collect(Collectors.toList()); + return getStorageContainerConfig().getExpectedDatabaseTypes().entrySet().stream().filter(entry -> entry.getValue() == getDatabaseType()).map(Entry::getKey).collect(Collectors.toList()); } @Override diff --git a/test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/container/atomic/storage/type/docker/impl/MariaDBContainer.java b/test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/container/atomic/storage/type/docker/impl/MariaDBContainer.java index 2bdb75ba31d..fb97ab286f4 100644 --- a/test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/container/atomic/storage/type/docker/impl/MariaDBContainer.java +++ b/test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/container/atomic/storage/type/docker/impl/MariaDBContainer.java @@ -35,30 +35,18 @@ public final class MariaDBContainer extends DockerStorageContainer { public static final int EXPOSED_PORT = 3306; - private final StorageContainerConfiguration storageContainerConfig; - public MariaDBContainer(final String containerImage, final StorageContainerConfiguration storageContainerConfig) { - super(TypedSPILoader.getService(DatabaseType.class, "MariaDB"), Strings.isNullOrEmpty(containerImage) ? "mariadb:11" : containerImage); - this.storageContainerConfig = storageContainerConfig; - } - - @Override - protected void configure() { - setCommands(storageContainerConfig.getCommand()); - addEnvs(storageContainerConfig.getEnvironments()); - mapResources(storageContainerConfig.getMountedConfigurationResources()); - mapResources(storageContainerConfig.getMountedSQLResources()); - super.configure(); + super(TypedSPILoader.getService(DatabaseType.class, "MariaDB"), Strings.isNullOrEmpty(containerImage) ? "mariadb:11" : containerImage, storageContainerConfig); } @Override protected Collection<String> getDatabaseNames() { - return storageContainerConfig.getActualDatabaseTypes().entrySet().stream().filter(entry -> entry.getValue() == getDatabaseType()).map(Entry::getKey).collect(Collectors.toList()); + return getStorageContainerConfig().getActualDatabaseTypes().entrySet().stream().filter(entry -> entry.getValue() == getDatabaseType()).map(Entry::getKey).collect(Collectors.toList()); } @Override protected Collection<String> getExpectedDatabaseNames() { - return storageContainerConfig.getExpectedDatabaseTypes().entrySet().stream().filter(entry -> entry.getValue() == getDatabaseType()).map(Entry::getKey).collect(Collectors.toList()); + return getStorageContainerConfig().getExpectedDatabaseTypes().entrySet().stream().filter(entry -> entry.getValue() == getDatabaseType()).map(Entry::getKey).collect(Collectors.toList()); } @Override diff --git a/test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/container/atomic/storage/type/docker/impl/MySQLContainer.java b/test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/container/atomic/storage/type/docker/impl/MySQLContainer.java index 5041efd2dbe..4554773ec0d 100644 --- a/test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/container/atomic/storage/type/docker/impl/MySQLContainer.java +++ b/test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/container/atomic/storage/type/docker/impl/MySQLContainer.java @@ -37,31 +37,24 @@ public final class MySQLContainer extends DockerStorageContainer { public static final int EXPOSED_PORT = 3306; - private final StorageContainerConfiguration storageContainerConfig; - public MySQLContainer(final String containerImage, final StorageContainerConfiguration storageContainerConfig) { - super(TypedSPILoader.getService(DatabaseType.class, "MySQL"), Strings.isNullOrEmpty(containerImage) ? "mysql:8.0.40" : containerImage); - this.storageContainerConfig = storageContainerConfig; + super(TypedSPILoader.getService(DatabaseType.class, "MySQL"), Strings.isNullOrEmpty(containerImage) ? "mysql:8.0.40" : containerImage, storageContainerConfig); } @Override protected void configure() { - setCommands(storageContainerConfig.getCommand()); - addEnvs(storageContainerConfig.getEnvironments()); - mapResources(storageContainerConfig.getMountedConfigurationResources()); - mapResources(storageContainerConfig.getMountedSQLResources()); super.configure(); withStartupTimeout(Duration.of(120L, ChronoUnit.SECONDS)); } @Override protected Collection<String> getDatabaseNames() { - return storageContainerConfig.getActualDatabaseTypes().entrySet().stream().filter(entry -> entry.getValue() == getDatabaseType()).map(Entry::getKey).collect(Collectors.toList()); + return getStorageContainerConfig().getActualDatabaseTypes().entrySet().stream().filter(entry -> entry.getValue() == getDatabaseType()).map(Entry::getKey).collect(Collectors.toList()); } @Override protected Collection<String> getExpectedDatabaseNames() { - return storageContainerConfig.getExpectedDatabaseTypes().entrySet().stream().filter(entry -> entry.getValue() == getDatabaseType()).map(Entry::getKey).collect(Collectors.toList()); + return getStorageContainerConfig().getExpectedDatabaseTypes().entrySet().stream().filter(entry -> entry.getValue() == getDatabaseType()).map(Entry::getKey).collect(Collectors.toList()); } @Override diff --git a/test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/container/atomic/storage/type/docker/impl/OpenGaussContainer.java b/test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/container/atomic/storage/type/docker/impl/OpenGaussContainer.java index 3bd41a64d4a..32a1e126fb3 100644 --- a/test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/container/atomic/storage/type/docker/impl/OpenGaussContainer.java +++ b/test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/container/atomic/storage/type/docker/impl/OpenGaussContainer.java @@ -39,19 +39,12 @@ public final class OpenGaussContainer extends DockerStorageContainer { public static final int EXPOSED_PORT = 5432; - private final StorageContainerConfiguration storageContainerConfig; - public OpenGaussContainer(final String containerImage, final StorageContainerConfiguration storageContainerConfig) { - super(TypedSPILoader.getService(DatabaseType.class, "openGauss"), Strings.isNullOrEmpty(containerImage) ? "opengauss/opengauss:3.1.0" : containerImage); - this.storageContainerConfig = storageContainerConfig; + super(TypedSPILoader.getService(DatabaseType.class, "openGauss"), Strings.isNullOrEmpty(containerImage) ? "opengauss/opengauss:3.1.0" : containerImage, storageContainerConfig); } @Override protected void configure() { - setCommands(storageContainerConfig.getCommand()); - addEnvs(storageContainerConfig.getEnvironments()); - mapResources(storageContainerConfig.getMountedConfigurationResources()); - mapResources(storageContainerConfig.getMountedSQLResources()); withPrivilegedMode(true); super.configure(); withStartupTimeout(Duration.of(120L, ChronoUnit.SECONDS)); @@ -59,12 +52,12 @@ public final class OpenGaussContainer extends DockerStorageContainer { @Override protected Collection<String> getDatabaseNames() { - return storageContainerConfig.getActualDatabaseTypes().entrySet().stream().filter(entry -> entry.getValue() == getDatabaseType()).map(Entry::getKey).collect(Collectors.toList()); + return getStorageContainerConfig().getActualDatabaseTypes().entrySet().stream().filter(entry -> entry.getValue() == getDatabaseType()).map(Entry::getKey).collect(Collectors.toList()); } @Override protected Collection<String> getExpectedDatabaseNames() { - return storageContainerConfig.getExpectedDatabaseTypes().entrySet().stream().filter(entry -> entry.getValue() == getDatabaseType()).map(Entry::getKey).collect(Collectors.toList()); + return getStorageContainerConfig().getExpectedDatabaseTypes().entrySet().stream().filter(entry -> entry.getValue() == getDatabaseType()).map(Entry::getKey).collect(Collectors.toList()); } @Override diff --git a/test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/container/atomic/storage/type/docker/impl/PostgreSQLContainer.java b/test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/container/atomic/storage/type/docker/impl/PostgreSQLContainer.java index c04bd1469e7..0f235c864ba 100644 --- a/test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/container/atomic/storage/type/docker/impl/PostgreSQLContainer.java +++ b/test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/container/atomic/storage/type/docker/impl/PostgreSQLContainer.java @@ -35,30 +35,18 @@ public final class PostgreSQLContainer extends DockerStorageContainer { public static final int EXPOSED_PORT = 5432; - private final StorageContainerConfiguration storageContainerConfig; - public PostgreSQLContainer(final String containerImage, final StorageContainerConfiguration storageContainerConfig) { - super(TypedSPILoader.getService(DatabaseType.class, "PostgreSQL"), Strings.isNullOrEmpty(containerImage) ? "postgres:12-alpine" : containerImage); - this.storageContainerConfig = storageContainerConfig; - } - - @Override - protected void configure() { - setCommands(storageContainerConfig.getCommand()); - addEnvs(storageContainerConfig.getEnvironments()); - mapResources(storageContainerConfig.getMountedConfigurationResources()); - mapResources(storageContainerConfig.getMountedSQLResources()); - super.configure(); + super(TypedSPILoader.getService(DatabaseType.class, "PostgreSQL"), Strings.isNullOrEmpty(containerImage) ? "postgres:12-alpine" : containerImage, storageContainerConfig); } @Override protected Collection<String> getDatabaseNames() { - return storageContainerConfig.getActualDatabaseTypes().entrySet().stream().filter(entry -> entry.getValue() == getDatabaseType()).map(Entry::getKey).collect(Collectors.toList()); + return getStorageContainerConfig().getActualDatabaseTypes().entrySet().stream().filter(entry -> entry.getValue() == getDatabaseType()).map(Entry::getKey).collect(Collectors.toList()); } @Override protected Collection<String> getExpectedDatabaseNames() { - return storageContainerConfig.getExpectedDatabaseTypes().entrySet().stream().filter(entry -> entry.getValue() == getDatabaseType()).map(Entry::getKey).collect(Collectors.toList()); + return getStorageContainerConfig().getExpectedDatabaseTypes().entrySet().stream().filter(entry -> entry.getValue() == getDatabaseType()).map(Entry::getKey).collect(Collectors.toList()); } @Override