From 795ec7f6a4555047e3b5ce85cbfc1fff0407b745 Mon Sep 17 00:00:00 2001 From: "yuhang2.zhang" Date: Tue, 21 Jan 2025 16:56:11 +0800 Subject: [PATCH] [hotfix] Fix the issue related to mounting the Logback configuration file --- .../decorators/FlinkConfMountDecorator.java | 16 ++++----- .../flink/kubernetes/utils/Constants.java | 14 ++++++++ .../FlinkConfMountDecoratorTest.java | 34 +++++++++++++++++++ 3 files changed, 55 insertions(+), 9 deletions(-) diff --git a/flink-kubernetes/src/main/java/org/apache/flink/kubernetes/kubeclient/decorators/FlinkConfMountDecorator.java b/flink-kubernetes/src/main/java/org/apache/flink/kubernetes/kubeclient/decorators/FlinkConfMountDecorator.java index 3c3ee9a5154b7..c6a65ca8bb055 100644 --- a/flink-kubernetes/src/main/java/org/apache/flink/kubernetes/kubeclient/decorators/FlinkConfMountDecorator.java +++ b/flink-kubernetes/src/main/java/org/apache/flink/kubernetes/kubeclient/decorators/FlinkConfMountDecorator.java @@ -57,8 +57,7 @@ import java.util.Map; import java.util.stream.Collectors; -import static org.apache.flink.kubernetes.utils.Constants.CONFIG_FILE_LOG4J_NAME; -import static org.apache.flink.kubernetes.utils.Constants.CONFIG_FILE_LOGBACK_NAME; +import static org.apache.flink.kubernetes.utils.Constants.CONFIG_FILE_NAME_LIST; import static org.apache.flink.kubernetes.utils.Constants.CONFIG_MAP_PREFIX; import static org.apache.flink.kubernetes.utils.Constants.FLINK_CONF_VOLUME; import static org.apache.flink.util.Preconditions.checkNotNull; @@ -179,15 +178,14 @@ String getFlinkConfData(List confData) throws IOException { private List getLocalLogConfFiles() { final String confDir = kubernetesComponentConf.getConfigDirectory(); - final File logbackFile = new File(confDir, CONFIG_FILE_LOGBACK_NAME); - final File log4jFile = new File(confDir, CONFIG_FILE_LOG4J_NAME); List localLogConfFiles = new ArrayList<>(); - if (logbackFile.exists()) { - localLogConfFiles.add(logbackFile); - } - if (log4jFile.exists()) { - localLogConfFiles.add(log4jFile); + + for (String fileName : CONFIG_FILE_NAME_LIST) { + final File file = new File(confDir, fileName); + if (file.exists()) { + localLogConfFiles.add(file); + } } return localLogConfFiles; diff --git a/flink-kubernetes/src/main/java/org/apache/flink/kubernetes/utils/Constants.java b/flink-kubernetes/src/main/java/org/apache/flink/kubernetes/utils/Constants.java index ced7d73d5073f..21d36b66d11b5 100644 --- a/flink-kubernetes/src/main/java/org/apache/flink/kubernetes/utils/Constants.java +++ b/flink-kubernetes/src/main/java/org/apache/flink/kubernetes/utils/Constants.java @@ -18,6 +18,9 @@ package org.apache.flink.kubernetes.utils; +import java.util.Arrays; +import java.util.List; + /** Constants for kubernetes. */ public class Constants { @@ -30,6 +33,17 @@ public class Constants { public static final String CONFIG_FILE_LOGBACK_NAME = "logback-console.xml"; public static final String CONFIG_FILE_LOG4J_NAME = "log4j-console.properties"; + + public static final List CONFIG_FILE_NAME_LIST = + Arrays.asList( + "logback.xml", + "log4j.properties", + "logback-console.xml", + "log4j-console.properties", + "logback-session.xml", + "log4j-session.properties", + "log4j-cli.properties"); + public static final String ENV_FLINK_LOG_DIR = "FLINK_LOG_DIR"; public static final String MAIN_CONTAINER_NAME = "flink-main-container"; diff --git a/flink-kubernetes/src/test/java/org/apache/flink/kubernetes/kubeclient/decorators/FlinkConfMountDecoratorTest.java b/flink-kubernetes/src/test/java/org/apache/flink/kubernetes/kubeclient/decorators/FlinkConfMountDecoratorTest.java index 6ed09a75498d1..2b02b06d02cbe 100644 --- a/flink-kubernetes/src/test/java/org/apache/flink/kubernetes/kubeclient/decorators/FlinkConfMountDecoratorTest.java +++ b/flink-kubernetes/src/test/java/org/apache/flink/kubernetes/kubeclient/decorators/FlinkConfMountDecoratorTest.java @@ -38,6 +38,7 @@ import org.junit.jupiter.api.Test; import java.io.IOException; +import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.List; @@ -47,6 +48,7 @@ import static org.apache.flink.kubernetes.kubeclient.decorators.FlinkConfMountDecorator.getFlinkConfConfigMapName; import static org.apache.flink.kubernetes.utils.Constants.CONFIG_FILE_LOG4J_NAME; import static org.apache.flink.kubernetes.utils.Constants.CONFIG_FILE_LOGBACK_NAME; +import static org.apache.flink.kubernetes.utils.Constants.CONFIG_FILE_NAME_LIST; import static org.assertj.core.api.Assertions.assertThat; /** General tests for the {@link FlinkConfMountDecorator}. */ @@ -233,6 +235,38 @@ void testDecoratedFlinkPodWithLog4jAndLogback() throws IOException { .isEqualTo(expectedVolumes); } + @Test + void testDecoratedFlinkPodWithAllLog4jAndLogback() throws IOException { + for (String fileName : CONFIG_FILE_NAME_LIST) { + KubernetesTestUtils.createTemporyFile("some data", flinkConfDir, fileName); + } + + final FlinkPod resultFlinkPod = flinkConfMountDecorator.decorateFlinkPod(baseFlinkPod); + + final List expectedKeyToPaths = new ArrayList<>(); + for (String fileName : CONFIG_FILE_NAME_LIST) { + expectedKeyToPaths.add( + new KeyToPathBuilder().withKey(fileName).withPath(fileName).build()); + } + expectedKeyToPaths.add( + new KeyToPathBuilder() + .withKey(FLINK_CONF_FILENAME) + .withPath(FLINK_CONF_FILENAME) + .build()); + + final List expectedVolumes = + Collections.singletonList( + new VolumeBuilder() + .withName(Constants.FLINK_CONF_VOLUME) + .withNewConfigMap() + .withName(getFlinkConfConfigMapName(CLUSTER_ID)) + .withItems(expectedKeyToPaths) + .endConfigMap() + .build()); + assertThat(resultFlinkPod.getPodWithoutMainContainer().getSpec().getVolumes()) + .isEqualTo(expectedVolumes); + } + @Test void testDecoratedFlinkContainer() { final Container resultMainContainer =