From b652967c539dfe12f67fdac5ad115bd8955aa6c1 Mon Sep 17 00:00:00 2001 From: Rick Cheng Date: Mon, 18 Mar 2024 12:22:59 +0800 Subject: [PATCH] [Improvement-15719] Remove the useless methods in ProcessUtils (#15720) --- .../service/utils/ProcessUtils.java | 115 ------------------ .../service/utils/ProcessUtilsTest.java | 78 ------------ 2 files changed, 193 deletions(-) delete mode 100644 dolphinscheduler-service/src/test/java/org/apache/dolphinscheduler/service/utils/ProcessUtilsTest.java diff --git a/dolphinscheduler-service/src/main/java/org/apache/dolphinscheduler/service/utils/ProcessUtils.java b/dolphinscheduler-service/src/main/java/org/apache/dolphinscheduler/service/utils/ProcessUtils.java index 22d17d0fd3..e8349d0cf0 100644 --- a/dolphinscheduler-service/src/main/java/org/apache/dolphinscheduler/service/utils/ProcessUtils.java +++ b/dolphinscheduler-service/src/main/java/org/apache/dolphinscheduler/service/utils/ProcessUtils.java @@ -19,142 +19,27 @@ package org.apache.dolphinscheduler.service.utils; import org.apache.dolphinscheduler.common.constants.Constants; import org.apache.dolphinscheduler.common.utils.FileUtils; -import org.apache.dolphinscheduler.common.utils.OSUtils; -import org.apache.dolphinscheduler.common.utils.PropertyUtils; import org.apache.dolphinscheduler.plugin.task.api.TaskConstants; import org.apache.dolphinscheduler.plugin.task.api.TaskExecutionContext; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; -import org.apache.commons.lang3.SystemUtils; -import java.io.File; -import java.nio.charset.StandardCharsets; import java.nio.file.Paths; -import java.util.ArrayList; import java.util.Collections; import java.util.List; -import java.util.regex.Matcher; -import java.util.regex.Pattern; import javax.annotation.Nullable; import lombok.NonNull; import lombok.extern.slf4j.Slf4j; -import org.slf4j.Logger; - /** * mainly used to get the start command line of a process. */ @Slf4j public class ProcessUtils { - /** - * Initialization regularization, solve the problem of pre-compilation performance, - * avoid the thread safety problem of multi-thread operation - */ - private static final Pattern MACPATTERN = Pattern.compile("-[+|-]-\\s(\\d+)"); - - /** - * Expression of PID recognition in Windows scene - */ - private static final Pattern WINDOWSATTERN = Pattern.compile("\\w+\\((\\d+)\\)"); - - /** - * get kerberos init command - */ - static String getKerberosInitCommand() { - log.info("get kerberos init command"); - StringBuilder kerberosCommandBuilder = new StringBuilder(); - boolean hadoopKerberosState = - PropertyUtils.getBoolean(Constants.HADOOP_SECURITY_AUTHENTICATION_STARTUP_STATE, false); - if (hadoopKerberosState) { - kerberosCommandBuilder.append("export KRB5_CONFIG=") - .append(PropertyUtils.getString(Constants.JAVA_SECURITY_KRB5_CONF_PATH)) - .append("\n\n") - .append(String.format("kinit -k -t %s %s || true", - PropertyUtils.getString(Constants.LOGIN_USER_KEY_TAB_PATH), - PropertyUtils.getString(Constants.LOGIN_USER_KEY_TAB_USERNAME))) - .append("\n\n"); - log.info("kerberos init command: {}", kerberosCommandBuilder); - } - return kerberosCommandBuilder.toString(); - } - - /** - * build kill command for yarn application - * - * @param logger logger - * @param tenantCode tenant code - * @param appId app id - * @param commandFile command file - * @param cmd cmd - */ - private static void execYarnKillCommand(Logger logger, String tenantCode, String appId, String commandFile, - String cmd) { - try { - StringBuilder sb = new StringBuilder(); - sb.append("#!/bin/sh\n"); - sb.append("BASEDIR=$(cd `dirname $0`; pwd)\n"); - sb.append("cd $BASEDIR\n"); - if (CommonUtils.getSystemEnvPath() != null) { - sb.append("source ").append(CommonUtils.getSystemEnvPath()).append("\n"); - } - sb.append("\n\n"); - sb.append(cmd); - - File f = new File(commandFile); - - if (!f.exists()) { - org.apache.commons.io.FileUtils.writeStringToFile(new File(commandFile), sb.toString(), - StandardCharsets.UTF_8); - } - - String runCmd = String.format("%s %s", Constants.SH, commandFile); - runCmd = OSUtils.getSudoCmd(tenantCode, runCmd); - log.info("kill cmd:{}", runCmd); - OSUtils.exeCmd(runCmd); - } catch (Exception e) { - log.error(String.format("Kill yarn application app id [%s] failed: [%s]", appId, e.getMessage())); - } - } - - /** - * get pids str. - * - * @param processId process id - * @return pids pid String - * @throws Exception exception - */ - public static String getPidsStr(int processId) throws Exception { - List pidList = new ArrayList<>(); - Matcher mat = null; - // pstree pid get sub pids - if (SystemUtils.IS_OS_MAC) { - String pids = OSUtils.exeCmd(String.format("%s -sp %d", Constants.PSTREE, processId)); - if (null != pids) { - mat = MACPATTERN.matcher(pids); - } - } else { - String pids = OSUtils.exeCmd(String.format("%s -p %d", Constants.PSTREE, processId)); - if (null != pids) { - mat = WINDOWSATTERN.matcher(pids); - } - } - - if (null != mat) { - while (mat.find()) { - pidList.add(mat.group(1)); - } - } - - if (OSUtils.isSudoEnable() && !pidList.isEmpty()) { - pidList = pidList.subList(1, pidList.size()); - } - return String.join(" ", pidList).trim(); - } - /** * find logs and kill yarn tasks. * diff --git a/dolphinscheduler-service/src/test/java/org/apache/dolphinscheduler/service/utils/ProcessUtilsTest.java b/dolphinscheduler-service/src/test/java/org/apache/dolphinscheduler/service/utils/ProcessUtilsTest.java deleted file mode 100644 index 5fc7d0d69c..0000000000 --- a/dolphinscheduler-service/src/test/java/org/apache/dolphinscheduler/service/utils/ProcessUtilsTest.java +++ /dev/null @@ -1,78 +0,0 @@ -/* - * 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.dolphinscheduler.service.utils; - -import static org.mockito.ArgumentMatchers.anyString; - -import org.apache.dolphinscheduler.common.constants.Constants; -import org.apache.dolphinscheduler.common.utils.OSUtils; -import org.apache.dolphinscheduler.common.utils.PropertyUtils; - -import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.extension.ExtendWith; -import org.mockito.MockedStatic; -import org.mockito.Mockito; -import org.mockito.MockitoAnnotations; -import org.mockito.junit.jupiter.MockitoExtension; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -@ExtendWith(MockitoExtension.class) -public class ProcessUtilsTest { - - private static final Logger logger = LoggerFactory.getLogger(ProcessUtils.class); - - @BeforeEach - public void setUp() { - MockitoAnnotations.initMocks(this); - } - - @Test - public void getPidsStr() throws Exception { - int processId = 1; - - try (MockedStatic mockedStaticOSUtils = Mockito.mockStatic(OSUtils.class)) { - mockedStaticOSUtils.when(() -> OSUtils.exeCmd(anyString())).thenReturn(null); - String pidList = ProcessUtils.getPidsStr(processId); - Assertions.assertEquals("", pidList); - } - } - - @Test - public void testGetKerberosInitCommand() { - try (MockedStatic mockedStaticPropertyUtils = Mockito.mockStatic(PropertyUtils.class)) { - mockedStaticPropertyUtils - .when(() -> PropertyUtils.getBoolean(Constants.HADOOP_SECURITY_AUTHENTICATION_STARTUP_STATE, false)) - .thenReturn(true); - mockedStaticPropertyUtils.when(() -> PropertyUtils.getString(Constants.JAVA_SECURITY_KRB5_CONF_PATH)) - .thenReturn("/etc/krb5.conf"); - mockedStaticPropertyUtils.when(() -> PropertyUtils.getString(Constants.LOGIN_USER_KEY_TAB_PATH)) - .thenReturn("/etc/krb5.keytab"); - mockedStaticPropertyUtils.when(() -> PropertyUtils.getString(Constants.LOGIN_USER_KEY_TAB_USERNAME)) - .thenReturn("test@DS.COM"); - Assertions.assertNotEquals("", ProcessUtils.getKerberosInitCommand()); - mockedStaticPropertyUtils - .when(() -> PropertyUtils.getBoolean(Constants.HADOOP_SECURITY_AUTHENTICATION_STARTUP_STATE, false)) - .thenReturn(false); - Assertions.assertEquals("", ProcessUtils.getKerberosInitCommand()); - } - } - -}