From 62619e88fb26c409ba009497dc79e2b05ca38b09 Mon Sep 17 00:00:00 2001 From: Jarvis Date: Tue, 8 Oct 2024 12:08:14 +0800 Subject: [PATCH] [Hotfix][Zeta] Fix hazelcast client should overwrite cluster address by system env (#7790) --- docs/en/start-v2/docker/docker.md | 22 +++++++++------ docs/zh/start-v2/docker/docker.md | 22 +++++++++------ .../seatunnel-engine-client/pom.xml | 6 +++++ .../engine/client/SeaTunnelClientTest.java | 10 +++++++ .../engine/common/config/ConfigProvider.java | 4 +++ .../seatunnel-engine-server/pom.xml | 6 +++++ .../engine/server/CoordinatorServiceTest.java | 27 +++++++++++++++++++ 7 files changed, 81 insertions(+), 16 deletions(-) diff --git a/docs/en/start-v2/docker/docker.md b/docs/en/start-v2/docker/docker.md index fa3b5898bb2..dbb1f589896 100644 --- a/docs/en/start-v2/docker/docker.md +++ b/docs/en/start-v2/docker/docker.md @@ -173,18 +173,20 @@ run this command to get the pod ip. - start worker node ```shell +# you need update yourself master container ip to `ST_DOCKER_MEMBER_LIST` docker run -d --name seatunnel_worker_1 \ --network seatunnel-network \ --rm \ - -e ST_DOCKER_MEMBER_LIST=172.18.0.2:5801 \ # set master container ip to here + -e ST_DOCKER_MEMBER_LIST=172.18.0.2:5801 \ apache/seatunnel \ ./bin/seatunnel-cluster.sh -r worker ## start worker2 -docker run -d --name seatunnel_worker_2 \ +# you need update yourself master container ip to `ST_DOCKER_MEMBER_LIST` +docker run -d --name seatunnel_worker_2 \ --network seatunnel-network \ --rm \ - -e ST_DOCKER_MEMBER_LIST=172.18.0.2:5801 \ # set master container ip to here + -e ST_DOCKER_MEMBER_LIST=172.18.0.2:5801 \ apache/seatunnel \ ./bin/seatunnel-cluster.sh -r worker @@ -194,20 +196,22 @@ docker run -d --name seatunnel_worker_2 \ run this command to start master node. ```shell +# you need update yourself master container ip to `ST_DOCKER_MEMBER_LIST` docker run -d --name seatunnel_master \ --network seatunnel-network \ --rm \ - -e ST_DOCKER_MEMBER_LIST=172.18.0.2:5801 \ # set exist master container ip to here + -e ST_DOCKER_MEMBER_LIST=172.18.0.2:5801 \ apache/seatunnel \ ./bin/seatunnel-cluster.sh -r master ``` run this command to start worker node. ```shell +# you need update yourself master container ip to `ST_DOCKER_MEMBER_LIST` docker run -d --name seatunnel_worker_1 \ --network seatunnel-network \ --rm \ - -e ST_DOCKER_MEMBER_LIST=172.18.0.2:5801 \ # set master container ip to here + -e ST_DOCKER_MEMBER_LIST=172.18.0.2:5801 \ apache/seatunnel \ ./bin/seatunnel-cluster.sh -r worker ``` @@ -371,21 +375,23 @@ and run `docker-compose up -d` command, the new worker node will start, and the #### use docker as a client - submit job : ```shell +# you need update yourself master container ip to `ST_DOCKER_MEMBER_LIST` docker run --name seatunnel_client \ --network seatunnel-network \ + -e ST_DOCKER_MEMBER_LIST=172.18.0.2:5801 \ --rm \ apache/seatunnel \ - -e ST_DOCKER_MEMBER_LIST=172.18.0.2:5801 \ # set it as master node container ip - ./bin/seatunnel.sh -c config/v2.batch.config.template # this is an default config, if you need submit your self config, you can mount config file. + ./bin/seatunnel.sh -c config/v2.batch.config.template ``` - list job ```shell +# you need update yourself master container ip to `ST_DOCKER_MEMBER_LIST` docker run --name seatunnel_client \ --network seatunnel-network \ + -e ST_DOCKER_MEMBER_LIST=172.18.0.2:5801 \ --rm \ apache/seatunnel \ - -e ST_DOCKER_MEMBER_LIST=172.18.0.2:5801 \ # set it as master node container ip ./bin/seatunnel.sh -l ``` diff --git a/docs/zh/start-v2/docker/docker.md b/docs/zh/start-v2/docker/docker.md index 6b9f5d55a2d..25c344c9ffe 100644 --- a/docs/zh/start-v2/docker/docker.md +++ b/docs/zh/start-v2/docker/docker.md @@ -176,17 +176,20 @@ docker inspect master-1 - 启动worker节点 ```shell +# 将ST_DOCKER_MEMBER_LIST设置为master容器的ip docker run -d --name seatunnel_worker_1 \ --network seatunnel-network \ --rm \ - -e ST_DOCKER_MEMBER_LIST=172.18.0.2:5801 \ # 设置为刚刚启动的master容器ip + -e ST_DOCKER_MEMBER_LIST=172.18.0.2:5801 \ apache/seatunnel \ ./bin/seatunnel-cluster.sh -r worker -docker run -d --name seatunnel_worker_2 \ +## 启动第二个worker节点 +# 将ST_DOCKER_MEMBER_LIST设置为master容器的ip +docker run -d --name seatunnel_worker_2 \ --network seatunnel-network \ --rm \ - -e ST_DOCKER_MEMBER_LIST=172.18.0.2:5801 \ # 设置为刚刚启动的master容器ip + -e ST_DOCKER_MEMBER_LIST=172.18.0.2:5801 \ apache/seatunnel \ ./bin/seatunnel-cluster.sh -r worker @@ -195,21 +198,22 @@ docker run -d --name seatunnel_worker_2 \ #### 集群扩容 ```shell -## start master and export 5801 port +# 将ST_DOCKER_MEMBER_LIST设置为已经启动的master容器的ip docker run -d --name seatunnel_master \ --network seatunnel-network \ --rm \ - -e ST_DOCKER_MEMBER_LIST=172.18.0.2:5801 \ # 设置为已启动的master容器ip + -e ST_DOCKER_MEMBER_LIST=172.18.0.2:5801 \ apache/seatunnel \ ./bin/seatunnel-cluster.sh -r master ``` 运行这个命令创建一个worker节点 ```shell +# 将ST_DOCKER_MEMBER_LIST设置为master容器的ip docker run -d --name seatunnel_worker_1 \ --network seatunnel-network \ --rm \ - -e ST_DOCKER_MEMBER_LIST=172.18.0.2:5801 \ # 设置为已启动的master容器ip + -e ST_DOCKER_MEMBER_LIST=172.18.0.2:5801 \ apache/seatunnel \ ./bin/seatunnel-cluster.sh -r worker ``` @@ -363,21 +367,23 @@ networks: #### 使用docker container作为客户端 - 提交任务 ```shell +# 将ST_DOCKER_MEMBER_LIST设置为master容器的ip docker run --name seatunnel_client \ --network seatunnel-network \ + -e ST_DOCKER_MEMBER_LIST=172.18.0.2:5801 \ --rm \ apache/seatunnel \ - -e ST_DOCKER_MEMBER_LIST=172.18.0.2:5801 \ # set it as master node container ip ./bin/seatunnel.sh -c config/v2.batch.config.template ``` - 查看作业列表 ```shell +# 将ST_DOCKER_MEMBER_LIST设置为master容器的ip docker run --name seatunnel_client \ --network seatunnel-network \ + -e ST_DOCKER_MEMBER_LIST=172.18.0.2:5801 \ --rm \ apache/seatunnel \ - -e ST_DOCKER_MEMBER_LIST=172.18.0.2:5801 \ # set it as master node container ip ./bin/seatunnel.sh -l ``` diff --git a/seatunnel-engine/seatunnel-engine-client/pom.xml b/seatunnel-engine/seatunnel-engine-client/pom.xml index 975c557303c..dcad2e4f184 100644 --- a/seatunnel-engine/seatunnel-engine-client/pom.xml +++ b/seatunnel-engine/seatunnel-engine-client/pom.xml @@ -99,5 +99,11 @@ awaitility test + + org.junit-pioneer + junit-pioneer + 1.9.1 + test + diff --git a/seatunnel-engine/seatunnel-engine-client/src/test/java/org/apache/seatunnel/engine/client/SeaTunnelClientTest.java b/seatunnel-engine/seatunnel-engine-client/src/test/java/org/apache/seatunnel/engine/client/SeaTunnelClientTest.java index 513b4eb29a8..b125e2dadbb 100644 --- a/seatunnel-engine/seatunnel-engine-client/src/test/java/org/apache/seatunnel/engine/client/SeaTunnelClientTest.java +++ b/seatunnel-engine/seatunnel-engine-client/src/test/java/org/apache/seatunnel/engine/client/SeaTunnelClientTest.java @@ -44,6 +44,7 @@ import org.junit.jupiter.api.Test; import org.junit.jupiter.api.condition.DisabledOnOs; import org.junit.jupiter.api.condition.OS; +import org.junitpioneer.jupiter.SetEnvironmentVariable; import com.hazelcast.client.config.ClientConfig; import com.hazelcast.core.HazelcastInstance; @@ -745,6 +746,15 @@ public void testGetMultiTableJobMetrics() { } } + @Test + @SetEnvironmentVariable( + key = "ST_DOCKER_MEMBER_LIST", + value = "127.0.0.1,127.0.0.2,127.0.0.3,127.0.0.4") + public void testDockerEnvOverwrite() { + ClientConfig clientConfig = ConfigProvider.locateAndGetClientConfig(); + Assertions.assertEquals(4, clientConfig.getNetworkConfig().getAddresses().size()); + } + @AfterAll public static void after() { INSTANCE.shutdown(); diff --git a/seatunnel-engine/seatunnel-engine-common/src/main/java/org/apache/seatunnel/engine/common/config/ConfigProvider.java b/seatunnel-engine/seatunnel-engine-common/src/main/java/org/apache/seatunnel/engine/common/config/ConfigProvider.java index 98311db25e4..92ebac2abb5 100644 --- a/seatunnel-engine/seatunnel-engine-common/src/main/java/org/apache/seatunnel/engine/common/config/ConfigProvider.java +++ b/seatunnel-engine/seatunnel-engine-common/src/main/java/org/apache/seatunnel/engine/common/config/ConfigProvider.java @@ -113,6 +113,10 @@ public static SeaTunnelConfig locateAndGetSeaTunnelConfigFromString(String sourc yamlConfigLocator.locateDefault(); config = new YamlClientConfigBuilder(yamlConfigLocator.getIn()).build(); } + String stDockerMemberList = System.getenv("ST_DOCKER_MEMBER_LIST"); + if (stDockerMemberList != null) { + config.getNetworkConfig().setAddresses(Arrays.asList(stDockerMemberList.split(","))); + } return config; } diff --git a/seatunnel-engine/seatunnel-engine-server/pom.xml b/seatunnel-engine/seatunnel-engine-server/pom.xml index abd296cb1e3..445e54211ba 100644 --- a/seatunnel-engine/seatunnel-engine-server/pom.xml +++ b/seatunnel-engine/seatunnel-engine-server/pom.xml @@ -103,6 +103,12 @@ 2.7.5 test + + org.junit-pioneer + junit-pioneer + 1.9.1 + test + diff --git a/seatunnel-engine/seatunnel-engine-server/src/test/java/org/apache/seatunnel/engine/server/CoordinatorServiceTest.java b/seatunnel-engine/seatunnel-engine-server/src/test/java/org/apache/seatunnel/engine/server/CoordinatorServiceTest.java index 68fca7e9ae5..2053ca01a8f 100644 --- a/seatunnel-engine/seatunnel-engine-server/src/test/java/org/apache/seatunnel/engine/server/CoordinatorServiceTest.java +++ b/seatunnel-engine/seatunnel-engine-server/src/test/java/org/apache/seatunnel/engine/server/CoordinatorServiceTest.java @@ -18,6 +18,8 @@ package org.apache.seatunnel.engine.server; import org.apache.seatunnel.engine.common.Constant; +import org.apache.seatunnel.engine.common.config.ConfigProvider; +import org.apache.seatunnel.engine.common.config.SeaTunnelConfig; import org.apache.seatunnel.engine.common.exception.SeaTunnelEngineException; import org.apache.seatunnel.engine.core.dag.logical.LogicalDag; import org.apache.seatunnel.engine.core.job.JobImmutableInformation; @@ -27,6 +29,7 @@ import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; +import org.junitpioneer.jupiter.SetEnvironmentVariable; import com.hazelcast.instance.impl.HazelcastInstanceImpl; import com.hazelcast.internal.serialization.Data; @@ -238,4 +241,28 @@ public void testJobRestoreWhenMasterNodeSwitch() throws InterruptedException { server2.getCoordinatorService().getJobStatus(jobId))); instance2.shutdown(); } + + @Test + @SetEnvironmentVariable( + key = "ST_DOCKER_MEMBER_LIST", + value = "127.0.0.1,127.0.0.2,127.0.0.3,127.0.0.4") + public void testDockerEnvOverwrite() { + SeaTunnelConfig seaTunnelConfig = ConfigProvider.locateAndGetSeaTunnelConfig(); + if (seaTunnelConfig + .getHazelcastConfig() + .getNetworkConfig() + .getJoin() + .getTcpIpConfig() + .isEnabled()) { + Assertions.assertEquals( + 4, + seaTunnelConfig + .getHazelcastConfig() + .getNetworkConfig() + .getJoin() + .getTcpIpConfig() + .getMembers() + .size()); + } + } }