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

xxyu pushed a commit to branch kylin5
in repository https://gitbox.apache.org/repos/asf/kylin.git

commit becc65b6c9be26d2865198aa6d4b4847b5c031ff
Author: Yinghao Lin <39019287+yhca...@users.noreply.github.com>
AuthorDate: Thu Jun 8 23:45:12 2023 +0800

    KYLIN-5714 job event log diag dump for model or project config
---
 .../org/apache/kylin/tool/JobDiagInfoTool.java     | 26 +++++++++++++----
 .../org/apache/kylin/tool/JobDiagInfoToolTest.java | 33 ++++++++++++++++++++++
 2 files changed, 53 insertions(+), 6 deletions(-)

diff --git a/src/tool/src/main/java/org/apache/kylin/tool/JobDiagInfoTool.java 
b/src/tool/src/main/java/org/apache/kylin/tool/JobDiagInfoTool.java
index 1c9c47489f..c0a529864e 100644
--- a/src/tool/src/main/java/org/apache/kylin/tool/JobDiagInfoTool.java
+++ b/src/tool/src/main/java/org/apache/kylin/tool/JobDiagInfoTool.java
@@ -30,27 +30,28 @@ import java.util.Locale;
 import java.util.Map;
 import java.util.stream.Collectors;
 
-import org.apache.kylin.guava30.shaded.common.collect.Sets;
 import org.apache.commons.cli.Option;
 import org.apache.commons.io.FileUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.kylin.common.KylinConfig;
 import org.apache.kylin.common.exception.KylinRuntimeException;
+import org.apache.kylin.common.util.OptionBuilder;
 import org.apache.kylin.common.util.OptionsHelper;
+import org.apache.kylin.guava30.shaded.common.annotations.VisibleForTesting;
+import org.apache.kylin.guava30.shaded.common.collect.Sets;
 import org.apache.kylin.job.execution.AbstractExecutable;
 import org.apache.kylin.job.execution.DefaultExecutable;
 import org.apache.kylin.job.execution.JobTypeEnum;
 import org.apache.kylin.job.execution.NExecutableManager;
-import org.apache.kylin.metadata.project.ProjectInstance;
-import org.apache.kylin.common.util.OptionBuilder;
+import org.apache.kylin.metadata.cube.model.IndexPlan;
+import org.apache.kylin.metadata.cube.model.NIndexPlanManager;
 import org.apache.kylin.metadata.project.NProjectManager;
+import org.apache.kylin.metadata.project.ProjectInstance;
 import org.apache.kylin.tool.snapshot.SnapshotSourceTableStatsTool;
 import org.apache.kylin.tool.util.DiagnosticFilesChecker;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import org.apache.kylin.guava30.shaded.common.annotations.VisibleForTesting;
-
 import lombok.val;
 
 public class JobDiagInfoTool extends AbstractInfoExtractorTool {
@@ -238,7 +239,8 @@ public class JobDiagInfoTool extends 
AbstractInfoExtractorTool {
             if (job instanceof DefaultExecutable) {
                 recordTaskStartTime(JOB_EVENTLOGS);
                 val appIds = NExecutableManager.getInstance(getKylinConfig(), 
project).getYarnApplicationJobs(jobId);
-                Map<String, String> sparkConf = 
getKylinConfig().getSparkConfigOverride();
+                KylinConfig config = 
getConfigForModelOrProjectLevel(job.getTargetModelId(), project);
+                Map<String, String> sparkConf = 
config.getSparkConfigOverride();
                 KylinLogTool.extractJobEventLogs(exportDir, appIds, sparkConf);
                 recordTaskExecutorTimeToFile(JOB_EVENTLOGS, recordTime);
             }
@@ -268,4 +270,16 @@ public class JobDiagInfoTool extends 
AbstractInfoExtractorTool {
         }
         return null;
     }
+
+    protected KylinConfig getConfigForModelOrProjectLevel(String modelId, 
String project) {
+        KylinConfig config = null;
+        IndexPlan indexPlan = NIndexPlanManager.getInstance(getKylinConfig(), 
project).getIndexPlan(modelId);
+        if (indexPlan != null) {
+            config = indexPlan.getConfig();
+        }
+        if (config == null) {
+            config = NProjectManager.getProjectConfig(project);
+        }
+        return config;
+    }
 }
diff --git 
a/src/tool/src/test/java/org/apache/kylin/tool/JobDiagInfoToolTest.java 
b/src/tool/src/test/java/org/apache/kylin/tool/JobDiagInfoToolTest.java
index 24176dec52..fcfe41942b 100644
--- a/src/tool/src/test/java/org/apache/kylin/tool/JobDiagInfoToolTest.java
+++ b/src/tool/src/test/java/org/apache/kylin/tool/JobDiagInfoToolTest.java
@@ -20,6 +20,7 @@ package org.apache.kylin.tool;
 import java.io.File;
 import java.io.IOException;
 import java.util.HashSet;
+import java.util.LinkedHashMap;
 import java.util.Objects;
 import java.util.concurrent.Executors;
 import java.util.concurrent.LinkedBlockingQueue;
@@ -37,6 +38,7 @@ import org.apache.kylin.common.util.ZipFileUtils;
 import org.apache.kylin.common.util.NLocalFileMetadataTestCase;
 import org.apache.kylin.job.execution.DefaultExecutable;
 import org.apache.kylin.job.execution.JobTypeEnum;
+import org.apache.kylin.metadata.cube.model.NIndexPlanManager;
 import org.apache.kylin.metadata.project.NProjectManager;
 import org.apache.kylin.tool.constant.SensitiveConfigKeysConstant;
 import org.apache.kylin.tool.obf.KylinConfObfuscatorTest;
@@ -234,4 +236,35 @@ public class JobDiagInfoToolTest extends 
NLocalFileMetadataTestCase {
             }
         }
     }
+
+    @Test
+    public void testGetDifferentConfigLevel() {
+        final String PROJECT = "default";
+        final String KYLIN_SPARK_EVENTLOG_DIR = 
"kylin.engine.spark-conf.spark.eventLog.dir";
+        final String SPARK_EVENTLOG_DIR = "spark.eventLog.dir";
+        JobDiagInfoTool tool = new JobDiagInfoTool();
+
+        // Update model config
+        NIndexPlanManager indexPlanManager = 
NIndexPlanManager.getInstance(KylinConfig.getInstanceFromEnv(), PROJECT);
+        
indexPlanManager.updateIndexPlan("82fa7671-a935-45f5-8779-85703601f49a", 
copyForWrite -> {
+            LinkedHashMap<String, String> overrideProps = new 
LinkedHashMap<>();
+            overrideProps.put(KYLIN_SPARK_EVENTLOG_DIR, "/path/to/dir1");
+            copyForWrite.setOverrideProps(overrideProps);
+        });
+        // Update project config
+        NProjectManager projectManager = 
NProjectManager.getInstance(KylinConfig.getInstanceFromEnv());
+        projectManager.updateProject(PROJECT, copyForWrite -> {
+            LinkedHashMap<String, String> overrideProps = new 
LinkedHashMap<>();
+            overrideProps.put(KYLIN_SPARK_EVENTLOG_DIR, "/path/to/dir2");
+            copyForWrite.setOverrideKylinProps(overrideProps);
+        });
+
+        // For jobs related to model: index build, index refresh etc.
+        KylinConfig modelConfig = 
tool.getConfigForModelOrProjectLevel("82fa7671-a935-45f5-8779-85703601f49a", 
PROJECT);
+        Assert.assertEquals("/path/to/dir1", 
modelConfig.getSparkConfigOverride().get(SPARK_EVENTLOG_DIR));
+
+        // For jobs without model: snapshot build, sampling etc.
+        KylinConfig projectConfig = 
tool.getConfigForModelOrProjectLevel("SSB.LINEORDER", PROJECT);
+        Assert.assertEquals("/path/to/dir2", 
projectConfig.getSparkConfigOverride().get(SPARK_EVENTLOG_DIR));
+    }
 }

Reply via email to