This is an automated email from the ASF dual-hosted git repository.

wanghailin pushed a commit to branch dev
in repository https://gitbox.apache.org/repos/asf/seatunnel.git


The following commit(s) were added to refs/heads/dev by this push:
     new 150d30db74 [Fix][Zeta] Set `AsyncLogger.ThreadNameStrategy=UNCACHED` 
to avoid thread name cache (#8215)
150d30db74 is described below

commit 150d30db742a5511cc7dfd5de8ec6ffeba16eeab
Author: Jia Fan <fanjiaemi...@qq.com>
AuthorDate: Fri Dec 6 13:06:52 2024 +0800

    [Fix][Zeta] Set `AsyncLogger.ThreadNameStrategy=UNCACHED` to avoid thread 
name cache (#8215)
---
 pom.xml                                            |  2 +-
 .../src/main/bin/seatunnel-cluster.cmd             |  2 +-
 .../src/main/bin/seatunnel-cluster.sh              |  2 +-
 .../seatunnel/command/ServerExecuteCommand.java    | 37 ++++++++++++++++++++++
 .../command/ServerExecuteCommandTest.java          | 37 ++++++++++++++++++++++
 tools/dependencies/known-dependencies.txt          |  2 +-
 6 files changed, 78 insertions(+), 4 deletions(-)

diff --git a/pom.xml b/pom.xml
index 24b5e029fb..ee528ff743 100644
--- a/pom.xml
+++ b/pom.xml
@@ -103,7 +103,7 @@
         <elasticsearch6.client.version>6.3.1</elasticsearch6.client.version>
         <elasticsearch7.client.version>7.5.1</elasticsearch7.client.version>
         
<flink-shaded-hadoop-2.version>2.7.5-7.0</flink-shaded-hadoop-2.version>
-        <commons-lang3.version>3.5</commons-lang3.version>
+        <commons-lang3.version>3.8</commons-lang3.version>
         <commons-io.version>2.11.0</commons-io.version>
         <commons-collections4.version>4.4</commons-collections4.version>
         <commons-csv.version>1.10.0</commons-csv.version>
diff --git 
a/seatunnel-core/seatunnel-starter/src/main/bin/seatunnel-cluster.cmd 
b/seatunnel-core/seatunnel-starter/src/main/bin/seatunnel-cluster.cmd
index 89327e8e38..8abe993107 100644
--- a/seatunnel-core/seatunnel-starter/src/main/bin/seatunnel-cluster.cmd
+++ b/seatunnel-core/seatunnel-starter/src/main/bin/seatunnel-cluster.cmd
@@ -47,7 +47,7 @@ set "JAVA_OPTS=%JvmOption%"
 set "SEATUNNEL_CONFIG=%CONF_DIR%\seatunnel.yaml"
 
 set "JAVA_OPTS=%JAVA_OPTS% 
-Dlog4j2.contextSelector=org.apache.logging.log4j.core.async.AsyncLoggerContextSelector"
-set "JAVA_OPTS=%JAVA_OPTS% -Dlog4j2.isThreadContextMapInheritable=true"
+set "JAVA_OPTS=%JAVA_OPTS% -Dlog4j2.isThreadContextMapInheritable=true 
-DAsyncLogger.ThreadNameStrategy=UNCACHED"
 
 REM Server Debug Config
 REM Usage instructions:
diff --git a/seatunnel-core/seatunnel-starter/src/main/bin/seatunnel-cluster.sh 
b/seatunnel-core/seatunnel-starter/src/main/bin/seatunnel-cluster.sh
index 565644db22..ed90ddd846 100755
--- a/seatunnel-core/seatunnel-starter/src/main/bin/seatunnel-cluster.sh
+++ b/seatunnel-core/seatunnel-starter/src/main/bin/seatunnel-cluster.sh
@@ -83,7 +83,7 @@ done
 
 # Log4j2 Config
 JAVA_OPTS="${JAVA_OPTS} 
-Dlog4j2.contextSelector=org.apache.logging.log4j.core.async.AsyncLoggerContextSelector"
-JAVA_OPTS="${JAVA_OPTS} -Dlog4j2.isThreadContextMapInheritable=true"
+JAVA_OPTS="${JAVA_OPTS} -Dlog4j2.isThreadContextMapInheritable=true 
-DAsyncLogger.ThreadNameStrategy=UNCACHED"
 if [ -e "${CONF_DIR}/log4j2.properties" ]; then
   JAVA_OPTS="${JAVA_OPTS} -Dhazelcast.logging.type=log4j2 
-Dlog4j2.configurationFile=${CONF_DIR}/log4j2.properties"
   JAVA_OPTS="${JAVA_OPTS} -Dseatunnel.logs.path=${APP_DIR}/logs"
diff --git 
a/seatunnel-core/seatunnel-starter/src/main/java/org/apache/seatunnel/core/starter/seatunnel/command/ServerExecuteCommand.java
 
b/seatunnel-core/seatunnel-starter/src/main/java/org/apache/seatunnel/core/starter/seatunnel/command/ServerExecuteCommand.java
index 7c47617ce8..8a9d049a21 100644
--- 
a/seatunnel-core/seatunnel-starter/src/main/java/org/apache/seatunnel/core/starter/seatunnel/command/ServerExecuteCommand.java
+++ 
b/seatunnel-core/seatunnel-starter/src/main/java/org/apache/seatunnel/core/starter/seatunnel/command/ServerExecuteCommand.java
@@ -25,9 +25,17 @@ import 
org.apache.seatunnel.engine.common.config.SeaTunnelConfig;
 import org.apache.seatunnel.engine.common.exception.SeaTunnelEngineException;
 import org.apache.seatunnel.engine.server.SeaTunnelServerStarter;
 
+import org.apache.commons.lang3.JavaVersion;
 import org.apache.commons.lang3.StringUtils;
+import org.apache.commons.lang3.SystemUtils;
+
+import lombok.extern.slf4j.Slf4j;
+
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
 
 /** This command is used to execute the SeaTunnel engine job by SeaTunnel API. 
*/
+@Slf4j
 public class ServerExecuteCommand implements Command<ServerCommandArgs> {
 
     private final ServerCommandArgs serverCommandArgs;
@@ -38,6 +46,7 @@ public class ServerExecuteCommand implements 
Command<ServerCommandArgs> {
 
     @Override
     public void execute() {
+        checkEnvironment();
         SeaTunnelConfig seaTunnelConfig = 
ConfigProvider.locateAndGetSeaTunnelConfig();
         String clusterRole = this.serverCommandArgs.getClusterRole();
         if (StringUtils.isNotBlank(clusterRole)) {
@@ -60,4 +69,32 @@ public class ServerExecuteCommand implements 
Command<ServerCommandArgs> {
         SeaTunnelServerStarter.createHazelcastInstance(
                 seaTunnelConfig, Thread.currentThread().getName());
     }
+
+    private void checkEnvironment() {
+        if (isAllocatingThreadGetName()) {
+            log.warn(
+                    "The current JDK version is not recommended. Please 
upgrade to JDK 1.8.0_102 or higher. "
+                            + "The current version will affect the performance 
of log printing. "
+                            + "For details, please refer to 
https://issues.apache.org/jira/browse/LOG4J2-2052";);
+        }
+    }
+
+    static boolean isAllocatingThreadGetName() {
+        // LOG4J2-2052, LOG4J2-2635 JDK 8u102 ("1.8.0_102") removed the String 
allocation in
+        // Thread.getName()
+        if (SystemUtils.IS_JAVA_1_8) {
+            try {
+                Pattern javaVersionPattern = 
Pattern.compile("(\\d+)\\.(\\d+)\\.(\\d+)_(\\d+)");
+                Matcher m = 
javaVersionPattern.matcher(System.getProperty("java.version"));
+                if (m.matches()) {
+                    return Integer.parseInt(m.group(3)) == 0 && 
Integer.parseInt(m.group(4)) < 102;
+                }
+                return true;
+            } catch (Exception e) {
+                return true;
+            }
+        } else {
+            return !SystemUtils.isJavaVersionAtLeast(JavaVersion.JAVA_1_8);
+        }
+    }
 }
diff --git 
a/seatunnel-core/seatunnel-starter/src/test/java/org/apache/seatunnel/core/starter/seatunnel/command/ServerExecuteCommandTest.java
 
b/seatunnel-core/seatunnel-starter/src/test/java/org/apache/seatunnel/core/starter/seatunnel/command/ServerExecuteCommandTest.java
new file mode 100644
index 0000000000..0962ed5ada
--- /dev/null
+++ 
b/seatunnel-core/seatunnel-starter/src/test/java/org/apache/seatunnel/core/starter/seatunnel/command/ServerExecuteCommandTest.java
@@ -0,0 +1,37 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * 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.
+ */
+
+package org.apache.seatunnel.core.starter.seatunnel.command;
+
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.condition.DisabledOnJre;
+import org.junit.jupiter.api.condition.JRE;
+
+public class ServerExecuteCommandTest {
+
+    @Test
+    @DisabledOnJre(value = JRE.JAVA_11, disabledReason = "the test case only 
works on Java 8")
+    public void testJavaVersionCheck() {
+        String realVersion = System.getProperty("java.version");
+        System.setProperty("java.version", "1.8.0_191");
+        
Assertions.assertFalse(ServerExecuteCommand.isAllocatingThreadGetName());
+        System.setProperty("java.version", "1.8.0_60");
+        
Assertions.assertTrue(ServerExecuteCommand.isAllocatingThreadGetName());
+        System.setProperty("java.version", realVersion);
+    }
+}
diff --git a/tools/dependencies/known-dependencies.txt 
b/tools/dependencies/known-dependencies.txt
index 62924093d1..ce7d25b445 100755
--- a/tools/dependencies/known-dependencies.txt
+++ b/tools/dependencies/known-dependencies.txt
@@ -2,7 +2,7 @@ commons-codec-1.13.jar
 commons-collections4-4.4.jar
 commons-compress-1.20.jar
 commons-io-2.11.0.jar
-commons-lang3-3.5.jar
+commons-lang3-3.8.jar
 commons-csv-1.10.0.jar
 config-1.3.3.jar
 disruptor-3.4.4.jar

Reply via email to