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 e303447d7cd Refactor DockerStorageContainer (#36571) e303447d7cd is described below commit e303447d7cd9dd08a66ab1867b7428a9b42a8ee6 Author: Liang Zhang <zhangli...@apache.org> AuthorDate: Mon Sep 15 19:02:39 2025 +0800 Refactor DockerStorageContainer (#36571) * Refactor DockerStorageContainer * Refactor DockerStorageContainer --- .../agent/engine/env/AgentE2ETestEnvironment.java | 7 ++-- .../atomic/storage/StorageContainerFactory.java | 6 ++-- .../type/docker/DockerStorageContainer.java | 40 ++++++++++++---------- .../storage/type/docker/impl/HiveContainer.java | 6 ++-- .../storage/type/embedded/impl/H2Container.java | 7 ++-- 5 files changed, 32 insertions(+), 34 deletions(-) diff --git a/test/e2e/agent/engine/src/test/java/org/apache/shardingsphere/test/e2e/agent/engine/env/AgentE2ETestEnvironment.java b/test/e2e/agent/engine/src/test/java/org/apache/shardingsphere/test/e2e/agent/engine/env/AgentE2ETestEnvironment.java index afaa4752463..0a60eb74e8d 100644 --- a/test/e2e/agent/engine/src/test/java/org/apache/shardingsphere/test/e2e/agent/engine/env/AgentE2ETestEnvironment.java +++ b/test/e2e/agent/engine/src/test/java/org/apache/shardingsphere/test/e2e/agent/engine/env/AgentE2ETestEnvironment.java @@ -38,7 +38,6 @@ import org.apache.shardingsphere.test.e2e.env.container.atomic.constants.ProxyCo import org.apache.shardingsphere.test.e2e.env.container.atomic.enums.AdapterType; import org.apache.shardingsphere.test.e2e.env.container.atomic.governance.GovernanceContainer; import org.apache.shardingsphere.test.e2e.env.container.atomic.governance.GovernanceContainerFactory; -import org.apache.shardingsphere.test.e2e.env.container.atomic.storage.config.StorageContainerConfiguration; import org.apache.shardingsphere.test.e2e.env.container.atomic.storage.config.option.StorageContainerConfigurationOptionFactory; import org.apache.shardingsphere.test.e2e.env.container.atomic.storage.type.docker.DockerStorageContainer; import org.awaitility.Awaitility; @@ -116,8 +115,7 @@ public final class AgentE2ETestEnvironment { containers = new ITContainers(); ShardingSphereProxyClusterContainer proxyContainer = new ShardingSphereProxyClusterContainer(databaseType, getAdaptorContainerConfiguration()); proxyContainer.withLogConsumer(testConfig.isLogEnabled() ? this::collectLogs : null); - DockerStorageContainer storageContainer = new DockerStorageContainer( - databaseType, imageConfig.getMysqlImage(), new StorageContainerConfiguration(null, StorageContainerConfigurationOptionFactory.newInstance(databaseType))); + DockerStorageContainer storageContainer = new DockerStorageContainer(databaseType, imageConfig.getMysqlImage(), StorageContainerConfigurationOptionFactory.newInstance(databaseType), null); proxyContainer.dependsOn(storageContainer); containers.registerContainer(storageContainer); GovernanceContainer governanceContainer = GovernanceContainerFactory.newInstance("ZooKeeper"); @@ -148,8 +146,7 @@ public final class AgentE2ETestEnvironment { private void createJDBCEnvironment(final DockerITContainer agentPluginContainer) { containers = new ITContainers(); - DockerStorageContainer storageContainer = new DockerStorageContainer( - databaseType, imageConfig.getMysqlImage(), new StorageContainerConfiguration(null, StorageContainerConfigurationOptionFactory.newInstance(databaseType))); + DockerStorageContainer storageContainer = new DockerStorageContainer(databaseType, imageConfig.getMysqlImage(), StorageContainerConfigurationOptionFactory.newInstance(databaseType), null); ShardingSphereJdbcAgentContainer jdbcAgentContainer = new ShardingSphereJdbcAgentContainer( imageConfig.getJdbcProjectImage(), testConfig.getPluginType(), testConfig.isLogEnabled() ? this::collectLogs : null); jdbcAgentContainer.dependsOn(storageContainer); diff --git a/test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/container/atomic/storage/StorageContainerFactory.java b/test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/container/atomic/storage/StorageContainerFactory.java index 6987bfdfcce..25b3db18285 100644 --- a/test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/container/atomic/storage/StorageContainerFactory.java +++ b/test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/container/atomic/storage/StorageContainerFactory.java @@ -59,11 +59,11 @@ public final class StorageContainerFactory { case "PostgreSQL": case "openGauss": case "MariaDB": - return new DockerStorageContainer(databaseType, storageContainerImage, storageContainerConfig); + return new DockerStorageContainer(databaseType, storageContainerImage, storageContainerConfig.getConfigurationOption(), storageContainerConfig.getScenario()); case "Hive": - return new HiveContainer(storageContainerImage, storageContainerConfig); + return new HiveContainer(storageContainerImage, storageContainerConfig.getConfigurationOption(), storageContainerConfig.getScenario()); case "H2": - return new H2Container(storageContainerConfig); + return new H2Container(storageContainerConfig.getScenario()); default: throw new RuntimeException(String.format("Database `%s` is unknown.", databaseType.getType())); } 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 a0aea6dd738..92040868545 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,9 +23,9 @@ 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.storage.config.mount.MountConfigurationResourceGenerator; import org.apache.shardingsphere.test.e2e.env.container.atomic.storage.config.mount.MountSQLResourceGenerator; +import org.apache.shardingsphere.test.e2e.env.container.atomic.storage.config.option.StorageContainerConfigurationOption; import org.apache.shardingsphere.test.e2e.env.container.atomic.util.DockerImageVersion; import org.apache.shardingsphere.test.e2e.env.container.atomic.util.StorageContainerUtils; import org.apache.shardingsphere.test.e2e.env.container.wait.JdbcConnectionWaitStrategy; @@ -52,7 +52,9 @@ public class DockerStorageContainer extends DockerITContainer implements Storage private final DatabaseType databaseType; - private final StorageContainerConfiguration storageContainerConfig; + private final StorageContainerConfigurationOption option; + + private final String scenario; @Getter private final int majorVersion; @@ -63,48 +65,49 @@ public class DockerStorageContainer extends DockerITContainer implements Storage @Getter private final Map<String, DataSource> expectedDataSourceMap = new LinkedHashMap<>(); - public DockerStorageContainer(final DatabaseType databaseType, final String containerImage, final StorageContainerConfiguration storageContainerConfig) { - super(databaseType.getType().toLowerCase(), getContainerImage(containerImage, storageContainerConfig)); + public DockerStorageContainer(final DatabaseType databaseType, final String containerImage, final StorageContainerConfigurationOption option, final String scenario) { + super(databaseType.getType().toLowerCase(), getContainerImage(containerImage, option)); this.databaseType = databaseType; - this.storageContainerConfig = storageContainerConfig; - majorVersion = new DockerImageVersion(getContainerImage(containerImage, storageContainerConfig)).getMajorVersion(); + this.option = option; + this.scenario = scenario; + majorVersion = new DockerImageVersion(getContainerImage(containerImage, option)).getMajorVersion(); } - private static String getContainerImage(final String containerImage, final StorageContainerConfiguration storageContainerConfig) { - return Strings.isNullOrEmpty(containerImage) ? storageContainerConfig.getConfigurationOption().getDefaultImageName() : containerImage; + private static String getContainerImage(final String containerImage, final StorageContainerConfigurationOption option) { + return Strings.isNullOrEmpty(containerImage) ? option.getDefaultImageName() : containerImage; } @Override protected final void configure() { setCommands(); addEnvironments(); - mapResources(new MountConfigurationResourceGenerator(storageContainerConfig.getConfigurationOption(), databaseType).generate(majorVersion, storageContainerConfig.getScenario())); - mapResources(new MountSQLResourceGenerator(storageContainerConfig.getConfigurationOption(), databaseType).generate(majorVersion, storageContainerConfig.getScenario())); + mapResources(new MountConfigurationResourceGenerator(option, databaseType).generate(majorVersion, scenario)); + mapResources(new MountSQLResourceGenerator(option, databaseType).generate(majorVersion, scenario)); setPrivilegedMode(); withExposedPorts(getExposedPort()); setWaitStrategy(new JdbcConnectionWaitStrategy(() -> DriverManager.getConnection(getURL(), StorageContainerConstants.CHECK_READY_USER, StorageContainerConstants.CHECK_READY_PASSWORD))); - withStartupTimeout(Duration.ofSeconds(storageContainerConfig.getConfigurationOption().getStartupTimeoutSeconds())); + withStartupTimeout(Duration.ofSeconds(option.getStartupTimeoutSeconds())); } private void setCommands() { - String command = storageContainerConfig.getConfigurationOption().getCommand(); + String command = option.getCommand(); if (!Strings.isNullOrEmpty(command)) { setCommand(command); } } private void addEnvironments() { - storageContainerConfig.getConfigurationOption().getEnvironments().forEach(this::addEnv); + option.getEnvironments().forEach(this::addEnv); } private void setPrivilegedMode() { - if (storageContainerConfig.getConfigurationOption().withPrivilegedMode()) { + if (option.withPrivilegedMode()) { withPrivilegedMode(true); } } private String getURL() { - return storageContainerConfig.getConfigurationOption().getDefaultDatabaseName(majorVersion) + return option.getDefaultDatabaseName(majorVersion) .map(optional -> DataSourceEnvironment.getURL(databaseType, "localhost", getFirstMappedPort(), optional)) .orElseGet(() -> DataSourceEnvironment.getURL(databaseType, "localhost", getFirstMappedPort())); } @@ -116,7 +119,7 @@ public class DockerStorageContainer extends DockerITContainer implements Storage } private Map<String, DatabaseType> getDataSourceNameAndTypeMap(final Type type) { - return null == storageContainerConfig.getScenario() ? Collections.emptyMap() : DatabaseEnvironmentManager.getDatabaseTypes(storageContainerConfig.getScenario(), databaseType, type); + return null == scenario ? Collections.emptyMap() : DatabaseEnvironmentManager.getDatabaseTypes(scenario, databaseType, type); } private Collection<String> getDataSourceNames(final Map<String, DatabaseType> dataSourceNameAndTypeMap) { @@ -144,8 +147,7 @@ public class DockerStorageContainer extends DockerITContainer implements Storage * @return JDBC URL */ public final String getJdbcUrl(final String dataSourceName) { - return DataSourceEnvironment.getURL(databaseType, getHost(), getMappedPort(), - Strings.isNullOrEmpty(dataSourceName) ? storageContainerConfig.getConfigurationOption().getDefaultDatabaseName(majorVersion).orElse("") : dataSourceName); + return DataSourceEnvironment.getURL(databaseType, getHost(), getMappedPort(), Strings.isNullOrEmpty(dataSourceName) ? option.getDefaultDatabaseName(majorVersion).orElse("") : dataSourceName); } /** @@ -154,7 +156,7 @@ public class DockerStorageContainer extends DockerITContainer implements Storage * @return exposed database container port */ public final int getExposedPort() { - return storageContainerConfig.getConfigurationOption().getPort(); + return option.getPort(); } /** 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 ef06ad3832d..e1488ae6f6b 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 @@ -20,7 +20,7 @@ package org.apache.shardingsphere.test.e2e.env.container.atomic.storage.type.doc import lombok.extern.slf4j.Slf4j; 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.config.option.StorageContainerConfigurationOption; import org.apache.shardingsphere.test.e2e.env.container.atomic.storage.type.docker.DockerStorageContainer; import java.io.IOException; @@ -31,8 +31,8 @@ import java.io.IOException; @Slf4j public final class HiveContainer extends DockerStorageContainer { - public HiveContainer(final String containerImage, final StorageContainerConfiguration storageContainerConfig) { - super(TypedSPILoader.getService(DatabaseType.class, "Hive"), containerImage, storageContainerConfig); + public HiveContainer(final String containerImage, final StorageContainerConfigurationOption option, final String scenario) { + super(TypedSPILoader.getService(DatabaseType.class, "Hive"), containerImage, option, scenario); } @Override diff --git a/test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/container/atomic/storage/type/embedded/impl/H2Container.java b/test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/container/atomic/storage/type/embedded/impl/H2Container.java index 401c9c45694..1eae01bc71d 100644 --- a/test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/container/atomic/storage/type/embedded/impl/H2Container.java +++ b/test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/container/atomic/storage/type/embedded/impl/H2Container.java @@ -20,7 +20,6 @@ package org.apache.shardingsphere.test.e2e.env.container.atomic.storage.type.emb import lombok.SneakyThrows; 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.embedded.EmbeddedStorageContainer; import org.apache.shardingsphere.test.e2e.env.runtime.scenario.path.ScenarioDataPath; import org.apache.shardingsphere.test.e2e.env.runtime.scenario.path.ScenarioDataPath.Type; @@ -41,9 +40,9 @@ public final class H2Container extends EmbeddedStorageContainer { private final ScenarioDataPath scenarioDataPath; - public H2Container(final StorageContainerConfiguration storageContainerConfig) { - super(TypedSPILoader.getService(DatabaseType.class, "H2"), storageContainerConfig.getScenario()); - scenarioDataPath = new ScenarioDataPath(storageContainerConfig.getScenario()); + public H2Container(final String scenario) { + super(TypedSPILoader.getService(DatabaseType.class, "H2"), scenario); + scenarioDataPath = new ScenarioDataPath(scenario); } @Override