From a718004788caad7832e55d7f982dc47f3fd26160 Mon Sep 17 00:00:00 2001 From: zhangliang Date: Thu, 18 Sep 2025 15:55:32 +0800 Subject: [PATCH 1/3] Add StorageContainerConfigurationOption.isSupportDockerEntrypoint() --- .../StorageContainerConfigurationOption.java | 27 ++++++++++++++++ ...veStorageContainerConfigurationOption.java | 17 +++++++++- .../type/docker/DockerStorageContainer.java | 31 +++++++++++++++++-- .../container/atomic/util/SQLScriptUtils.java | 11 +++++++ 4 files changed, 83 insertions(+), 3 deletions(-) diff --git a/test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/container/atomic/storage/option/StorageContainerConfigurationOption.java b/test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/container/atomic/storage/option/StorageContainerConfigurationOption.java index cfdc238b278e3..2a5dfe8d97eeb 100644 --- a/test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/container/atomic/storage/option/StorageContainerConfigurationOption.java +++ b/test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/container/atomic/storage/option/StorageContainerConfigurationOption.java @@ -102,4 +102,31 @@ public interface StorageContainerConfigurationOption extends DatabaseTypedSPI { * @return container startup timeout seconds */ long getStartupTimeoutSeconds(); + + /** + * Whether support docker entrypoint. + * + * @return is support docker entrypoint or not + */ + default boolean isSupportDockerEntrypoint() { + return true; + } + + /** + * Get default user when unsupported docker entrypoint. + * + * @return default user + */ + default Optional getDefaultUserWhenUnsupportedDockerEntrypoint() { + return Optional.empty(); + } + + /** + * Get default password when unsupported docker entrypoint. + * + * @return default password + */ + default Optional getDefaultPasswordWhenUnsupportedDockerEntrypoint() { + return Optional.empty(); + } } diff --git a/test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/container/atomic/storage/option/dialect/HiveStorageContainerConfigurationOption.java b/test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/container/atomic/storage/option/dialect/HiveStorageContainerConfigurationOption.java index 903fb38e18b3a..b31d009c59be6 100644 --- a/test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/container/atomic/storage/option/dialect/HiveStorageContainerConfigurationOption.java +++ b/test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/container/atomic/storage/option/dialect/HiveStorageContainerConfigurationOption.java @@ -77,7 +77,7 @@ public boolean withPrivilegedMode() { @Override public Optional getDefaultDatabaseName(final int majorVersion) { - return Optional.empty(); + return Optional.of("default"); } @Override @@ -85,6 +85,21 @@ public long getStartupTimeoutSeconds() { return 180L; } + @Override + public boolean isSupportDockerEntrypoint() { + return false; + } + + @Override + public Optional getDefaultUserWhenUnsupportedDockerEntrypoint() { + return Optional.of(""); + } + + @Override + public Optional getDefaultPasswordWhenUnsupportedDockerEntrypoint() { + return Optional.of(""); + } + @Override public String getDatabaseType() { return "Hive"; 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 63d5fbdbad511..0d423dcbc0db4 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 @@ -17,9 +17,11 @@ package org.apache.shardingsphere.test.e2e.env.container.atomic.storage.type.docker; +import com.github.dockerjava.api.command.InspectContainerResponse; import com.google.common.base.Preconditions; import com.google.common.base.Strings; import lombok.Getter; +import lombok.SneakyThrows; import org.apache.shardingsphere.database.connector.core.spi.DatabaseTypedSPILoader; import org.apache.shardingsphere.database.connector.core.type.DatabaseType; import org.apache.shardingsphere.test.e2e.env.container.atomic.DockerITContainer; @@ -29,6 +31,7 @@ import org.apache.shardingsphere.test.e2e.env.container.atomic.storage.mount.MountSQLResourceGenerator; import org.apache.shardingsphere.test.e2e.env.container.atomic.storage.option.StorageContainerConfigurationOption; import org.apache.shardingsphere.test.e2e.env.container.atomic.util.DockerImageVersion; +import org.apache.shardingsphere.test.e2e.env.container.atomic.util.SQLScriptUtils; 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.datasource.DataSourceEnvironment; @@ -36,7 +39,9 @@ import org.apache.shardingsphere.test.e2e.env.runtime.scenario.path.ScenarioDataPath.Type; import javax.sql.DataSource; +import java.sql.Connection; import java.sql.DriverManager; +import java.sql.SQLException; import java.time.Duration; import java.util.Collection; import java.util.Collections; @@ -81,10 +86,17 @@ protected final void configure() { setCommands(); addEnvironments(); mapResources(new MountConfigurationResourceGenerator(option).generate(majorVersion, scenario)); - mapResources(new MountSQLResourceGenerator(option).generate(majorVersion, scenario)); + if (option.isSupportDockerEntrypoint()) { + mapResources(new MountSQLResourceGenerator(option).generate(majorVersion, scenario)); + } setPrivilegedMode(); withExposedPorts(getExposedPort()); - setWaitStrategy(new JdbcConnectionWaitStrategy(() -> DriverManager.getConnection(getURL(), StorageContainerConstants.CHECK_READY_USER, StorageContainerConstants.CHECK_READY_PASSWORD))); + if (option.isSupportDockerEntrypoint()) { + setWaitStrategy(new JdbcConnectionWaitStrategy(() -> DriverManager.getConnection(getURL(), StorageContainerConstants.CHECK_READY_USER, StorageContainerConstants.CHECK_READY_PASSWORD))); + } else { + setWaitStrategy(new JdbcConnectionWaitStrategy(() -> DriverManager.getConnection(getURL(), + option.getDefaultUserWhenUnsupportedDockerEntrypoint().orElse(""), option.getDefaultPasswordWhenUnsupportedDockerEntrypoint().orElse("")))); + } withStartupTimeout(Duration.ofSeconds(option.getStartupTimeoutSeconds())); } @@ -112,6 +124,21 @@ private String getURL() { .orElseGet(() -> dataSourceEnvironment.getURL("localhost", getFirstMappedPort())); } + @SneakyThrows({SQLException.class, InterruptedException.class}) + @Override + protected final void containerIsStarted(final InspectContainerResponse containerInfo) { + if (option.isSupportDockerEntrypoint()) { + return; + } + Thread.sleep(10000L); + try (Connection connection = DriverManager.getConnection(DatabaseTypedSPILoader.getService(DataSourceEnvironment.class, option.getType()).getURL("localhost", getFirstMappedPort()), + option.getDefaultUserWhenUnsupportedDockerEntrypoint().orElse(""), option.getDefaultPasswordWhenUnsupportedDockerEntrypoint().orElse(""))) { + for (String each : new MountSQLResourceGenerator(option).generate(majorVersion, scenario).keySet()) { + SQLScriptUtils.execute(connection, each); + } + } + } + @Override protected void postStart() { actualDataSourceMap.putAll(createAccessDataSources(getDataSourceNames(getDataSourceNameAndTypeMap(Type.ACTUAL)))); diff --git a/test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/container/atomic/util/SQLScriptUtils.java b/test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/container/atomic/util/SQLScriptUtils.java index 6fb40980fd67f..e24d6d0a0fc92 100644 --- a/test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/container/atomic/util/SQLScriptUtils.java +++ b/test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/container/atomic/util/SQLScriptUtils.java @@ -61,6 +61,17 @@ public static void execute(final DataSource dataSource, final String scriptFileP } } + /** + * Execute SQL script. + * + * @param connection connection + * @param scriptFilePath script file path + */ + @SneakyThrows({SQLException.class, IOException.class}) + public static void execute(final Connection connection, final String scriptFilePath) { + executeBatch(connection, readSQLs(scriptFilePath)); + } + private static Collection readSQLs(final String scriptFilePath) throws IOException { Collection result = new LinkedList<>(); try ( From 349e31d7418cf795ba5e67b9368e203b5f3d6d57 Mon Sep 17 00:00:00 2001 From: zhangliang Date: Thu, 18 Sep 2025 16:05:25 +0800 Subject: [PATCH 2/3] Add StorageContainerConfigurationOption.isSupportDockerEntrypoint() --- .../hive/init-sql/99-common-check-ready.sql | 17 ----------------- 1 file changed, 17 deletions(-) delete mode 100644 test/e2e/env/src/test/resources/container/hive/init-sql/99-common-check-ready.sql diff --git a/test/e2e/env/src/test/resources/container/hive/init-sql/99-common-check-ready.sql b/test/e2e/env/src/test/resources/container/hive/init-sql/99-common-check-ready.sql deleted file mode 100644 index 6173b933aacd5..0000000000000 --- a/test/e2e/env/src/test/resources/container/hive/init-sql/99-common-check-ready.sql +++ /dev/null @@ -1,17 +0,0 @@ --- --- Licensed to the Apache Software Foundation (ASF) under one or more --- contributor license agreements. See the NOTICE file distributed with --- The ASF licenses this file to You under the Apache License, Version 2.0 --- (the "License"); you may not use this file except in compliance with --- the License. You may obtain a copy of the License at --- --- http://www.apache.org/licenses/LICENSE-2.0 --- --- Unless required by applicable law or agreed to in writing, software --- distributed under the License is distributed on an "AS IS" BASIS, --- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. --- See the License for the specific language governing permissions and --- limitations under the License. --- - -CREATE USER 'ready_user' PASSWORD 'Ready@123'; From 638fbf92a8ce1a1a05ee9644f9fefeb14b8572dd Mon Sep 17 00:00:00 2001 From: zhangliang Date: Thu, 18 Sep 2025 16:07:27 +0800 Subject: [PATCH 3/3] Add StorageContainerConfigurationOption.isSupportDockerEntrypoint() --- .../atomic/storage/type/docker/DockerStorageContainer.java | 5 +++-- 1 file changed, 3 insertions(+), 2 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 0d423dcbc0db4..652f59fd9ae36 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 @@ -131,8 +131,9 @@ protected final void containerIsStarted(final InspectContainerResponse container return; } Thread.sleep(10000L); - try (Connection connection = DriverManager.getConnection(DatabaseTypedSPILoader.getService(DataSourceEnvironment.class, option.getType()).getURL("localhost", getFirstMappedPort()), - option.getDefaultUserWhenUnsupportedDockerEntrypoint().orElse(""), option.getDefaultPasswordWhenUnsupportedDockerEntrypoint().orElse(""))) { + try ( + Connection connection = DriverManager.getConnection(DatabaseTypedSPILoader.getService(DataSourceEnvironment.class, option.getType()).getURL("localhost", getFirstMappedPort()), + option.getDefaultUserWhenUnsupportedDockerEntrypoint().orElse(""), option.getDefaultPasswordWhenUnsupportedDockerEntrypoint().orElse(""))) { for (String each : new MountSQLResourceGenerator(option).generate(majorVersion, scenario).keySet()) { SQLScriptUtils.execute(connection, each); }