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 3e06c551461 Refactor ShardingSphereProxyEmbeddedContainer (#36642)
3e06c551461 is described below
commit 3e06c551461852c76d6c06e278aa6563595cf061
Author: Liang Zhang <[email protected]>
AuthorDate: Sat Sep 20 14:04:36 2025 +0800
Refactor ShardingSphereProxyEmbeddedContainer (#36642)
---
.../impl/ShardingSphereProxyEmbeddedContainer.java | 100 ++++++++++-----------
.../docker/PipelineDockerContainerComposer.java | 8 +-
2 files changed, 51 insertions(+), 57 deletions(-)
diff --git
a/test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/container/adapter/impl/ShardingSphereProxyEmbeddedContainer.java
b/test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/container/adapter/impl/ShardingSphereProxyEmbeddedContainer.java
index a7d9f184cae..88232f48544 100644
---
a/test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/container/adapter/impl/ShardingSphereProxyEmbeddedContainer.java
+++
b/test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/container/adapter/impl/ShardingSphereProxyEmbeddedContainer.java
@@ -17,6 +17,7 @@
package org.apache.shardingsphere.test.e2e.env.container.adapter.impl;
+import lombok.Getter;
import lombok.RequiredArgsConstructor;
import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j;
@@ -45,6 +46,7 @@ import org.testcontainers.containers.GenericContainer;
import org.testcontainers.lifecycle.Startable;
import org.testcontainers.utility.Base58;
+import javax.net.ssl.SSLException;
import javax.sql.DataSource;
import java.io.File;
import java.io.FileWriter;
@@ -53,13 +55,16 @@ import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
+import java.sql.SQLException;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Map.Entry;
+import java.util.Objects;
import java.util.Set;
import java.util.concurrent.atomic.AtomicReference;
+import java.util.stream.Collectors;
/**
* ShardingSphere proxy embedded container.
@@ -67,7 +72,7 @@ import java.util.concurrent.atomic.AtomicReference;
@RequiredArgsConstructor
@Slf4j
// TODO Reset static properties when closing the class., like
PipelineAPIFactory#GOVERNANCE_FACADE_MAP
-public final class ShardingSphereProxyEmbeddedContainer implements
AdapterContainer, EmbeddedITContainer {
+public final class ShardingSphereProxyEmbeddedContainer implements
EmbeddedITContainer, AdapterContainer {
private static final String OS_MAC_TMP_DIR = "/tmp";
@@ -79,10 +84,20 @@ public final class ShardingSphereProxyEmbeddedContainer
implements AdapterContai
private final AtomicReference<DataSource> targetDataSourceProvider = new
AtomicReference<>();
+ @Getter
private final Set<Startable> dependencies = new HashSet<>();
private ShardingSphereProxy proxy;
+ /**
+ * Depends on.
+ *
+ * @param dependencies dependencies
+ */
+ public void dependsOn(final Startable... dependencies) {
+ Collections.addAll(this.dependencies, dependencies);
+ }
+
@Override
public DataSource getTargetDataSource(final String serverLists) {
DataSource dataSource = targetDataSourceProvider.get();
@@ -99,33 +114,14 @@ public final class ShardingSphereProxyEmbeddedContainer
implements AdapterContai
return "proxy";
}
- @Override
- public Set<Startable> getDependencies() {
- return dependencies;
- }
-
- /**
- * Depends on.
- *
- * @param dependencies dependencies
- */
- public void dependsOn(final Startable... dependencies) {
- Collections.addAll(this.dependencies, dependencies);
- }
-
- private void startDependencies() {
- getDependencies().forEach(Startable::start);
- }
-
- @SneakyThrows
@Override
public void start() {
- startDependencies();
+ dependencies.forEach(Startable::start);
startInternalProxy();
new JdbcConnectCheckingWaitStrategy(() ->
getTargetDataSource(null).getConnection()).waitUntilReady(null);
}
- @SneakyThrows
+ @SneakyThrows({SQLException.class, IOException.class, SSLException.class,
InterruptedException.class})
private void startInternalProxy() {
YamlProxyConfiguration yamlConfig =
ProxyConfigurationLoader.load(getTempConfigDirectory().toString());
int port =
Integer.parseInt(ConfigurationPropertyKey.PROXY_DEFAULT_PORT.getDefaultValue());
@@ -141,7 +137,7 @@ public final class ShardingSphereProxyEmbeddedContainer
implements AdapterContai
Map<String, String> storageConnectionInfoMap =
getStorageConnectionInfoMap();
Path result = createTempDirectory().toPath();
for (Entry<String, String> each :
config.getMountedResources().entrySet()) {
- File file = new
File(ShardingSphereProxyEmbeddedContainer.class.getResource(each.getKey()).getFile());
+ File file = new
File(Objects.requireNonNull(ShardingSphereProxyEmbeddedContainer.class.getResource(each.getKey())).getFile());
if (file.isDirectory()) {
writeDirectoryToTempFile(each.getKey(), file,
networkAliasAndHostLinkMap, storageConnectionInfoMap, result);
} else {
@@ -153,8 +149,27 @@ public final class ShardingSphereProxyEmbeddedContainer
implements AdapterContai
return result;
}
- private void writeDirectoryToTempFile(final String originalKey, final File
file, final Map<String, String> aliasAndHostLinkMap, final Map<String, String>
storageConnectionInfoMap,
- final Path tempDirectory) throws
IOException {
+ private Map<String, String> getNetworkAliasAndHostLinkMap() {
+ Map<String, String> result = new HashMap<>();
+ for (Startable each : dependencies) {
+ if (each instanceof GenericContainer) {
+
result.putAll(getNetworkAliasAndHostLinkMap((GenericContainer<?>) each));
+ }
+ }
+ return result;
+ }
+
+ private Map<String, String> getNetworkAliasAndHostLinkMap(final
GenericContainer<?> genericContainer) {
+ Map<String, String> result = new HashMap<>();
+ for (String each : genericContainer.getNetworkAliases()) {
+ result.putAll(genericContainer.getExposedPorts().stream()
+ .collect(Collectors.toMap(exposedPort -> each + ":" +
exposedPort, exposedPort -> "127.0.0.1:" +
genericContainer.getMappedPort(exposedPort))));
+ }
+ return result;
+ }
+
+ private void writeDirectoryToTempFile(final String originalKey, final File
file,
+ final Map<String, String>
aliasAndHostLinkMap, final Map<String, String> storageConnectionInfoMap, final
Path tempDirectory) throws IOException {
for (File each : file.listFiles()) {
String content =
IOUtils.toString(Files.newInputStream(each.toPath()), StandardCharsets.UTF_8);
content = replaceContent(aliasAndHostLinkMap,
storageConnectionInfoMap, content);
@@ -184,12 +199,8 @@ public final class ShardingSphereProxyEmbeddedContainer
implements AdapterContai
private Map<String, String> getStorageConnectionInfoMap() {
Map<String, String> result = new HashMap<>();
for (Startable each : dependencies) {
- if (!(each instanceof NativeStorageContainer)) {
- continue;
- }
- NativeStorageContainer storageContainer = (NativeStorageContainer)
each;
- for (String network : storageContainer.getNetworkAliases()) {
- result.put(network + ":" + storageContainer.getExposedPort(),
E2ETestEnvironment.getInstance().getNativeStorageHost() + ":" +
E2ETestEnvironment.getInstance().getNativeStoragePort());
+ if (each instanceof NativeStorageContainer) {
+
result.putAll(getStorageConnectionInfoMap((NativeStorageContainer) each));
}
}
result.put("username: " + StorageContainerConstants.OPERATION_USER,
"username: " + E2ETestEnvironment.getInstance().getNativeStorageUsername());
@@ -197,32 +208,15 @@ public final class ShardingSphereProxyEmbeddedContainer
implements AdapterContai
return result;
}
- private Map<String, String> getNetworkAliasAndHostLinkMap() {
- Map<String, String> result = new HashMap<>();
- for (Startable each : dependencies) {
- if (each instanceof GenericContainer) {
-
result.putAll(getNetworkAliasAndHostLinkMap((GenericContainer<?>) each));
- }
- }
- return result;
- }
-
- private Map<String, String> getNetworkAliasAndHostLinkMap(final
GenericContainer<?> genericContainer) {
- Map<String, String> result = new HashMap<>();
- for (String each : genericContainer.getNetworkAliases()) {
- for (Integer exposedPort : genericContainer.getExposedPorts()) {
- result.put(each + ":" + exposedPort, "127.0.0.1:" +
genericContainer.getMappedPort(exposedPort));
- }
- }
- return result;
+ private Map<String, String> getStorageConnectionInfoMap(final
NativeStorageContainer container) {
+ return container.getNetworkAliases().stream().collect(Collectors.toMap(
+ each -> each + ":" + container.getExposedPort(), each ->
E2ETestEnvironment.getInstance().getNativeStorageHost() + ":" +
E2ETestEnvironment.getInstance().getNativeStoragePort()));
}
private File createTempDirectory() {
try {
- if (SystemUtils.IS_OS_MAC) {
- return Files.createTempDirectory(Paths.get(OS_MAC_TMP_DIR),
E2E_PROXY_CONFIG_TMP_DIR_PREFIX).toFile();
- }
- return
Files.createTempDirectory(E2E_PROXY_CONFIG_TMP_DIR_PREFIX).toFile();
+ Path result = SystemUtils.IS_OS_MAC ?
Files.createTempDirectory(Paths.get(OS_MAC_TMP_DIR),
E2E_PROXY_CONFIG_TMP_DIR_PREFIX) :
Files.createTempDirectory(E2E_PROXY_CONFIG_TMP_DIR_PREFIX);
+ return result.toFile();
} catch (final IOException ex) {
return new File(E2E_PROXY_CONFIG_TMP_DIR_PREFIX +
Base58.randomString(5));
}
diff --git
a/test/e2e/operation/pipeline/src/test/java/org/apache/shardingsphere/test/e2e/operation/pipeline/framework/container/compose/docker/PipelineDockerContainerComposer.java
b/test/e2e/operation/pipeline/src/test/java/org/apache/shardingsphere/test/e2e/operation/pipeline/framework/container/compose/docker/PipelineDockerContainerComposer.java
index b19f5d70568..3df786c5a84 100644
---
a/test/e2e/operation/pipeline/src/test/java/org/apache/shardingsphere/test/e2e/operation/pipeline/framework/container/compose/docker/PipelineDockerContainerComposer.java
+++
b/test/e2e/operation/pipeline/src/test/java/org/apache/shardingsphere/test/e2e/operation/pipeline/framework/container/compose/docker/PipelineDockerContainerComposer.java
@@ -65,18 +65,18 @@ public final class PipelineDockerContainerComposer extends
PipelineBaseContainer
}
AdaptorContainerConfiguration containerConfig =
PipelineProxyContainerConfigurationFactory.newInstance(databaseType);
DatabaseType proxyDatabaseType =
ProxyDatabaseTypeUtils.getProxyDatabaseType(databaseType);
- if (PipelineE2EEnvironment.getInstance().getItProxyType() ==
PipelineProxyTypeEnum.INTERNAL) {
+ if (PipelineProxyTypeEnum.INTERNAL ==
PipelineE2EEnvironment.getInstance().getItProxyType()) {
ShardingSphereProxyEmbeddedContainer proxyContainer = new
ShardingSphereProxyEmbeddedContainer(proxyDatabaseType, containerConfig);
for (DockerStorageContainer each : storageContainers) {
proxyContainer.dependsOn(governanceContainer, each);
}
getContainers().registerContainer(proxyContainer);
} else {
- ShardingSphereProxyDockerContainer proxyClusterContainer = new
ShardingSphereProxyDockerContainer(proxyDatabaseType, containerConfig);
+ ShardingSphereProxyDockerContainer proxyContainer = new
ShardingSphereProxyDockerContainer(proxyDatabaseType, containerConfig);
for (DockerStorageContainer each : storageContainers) {
- proxyClusterContainer.dependsOn(governanceContainer, each);
+ proxyContainer.dependsOn(governanceContainer, each);
}
- proxyContainer =
getContainers().registerContainer(proxyClusterContainer);
+ this.proxyContainer =
getContainers().registerContainer(proxyContainer);
}
}