From 0a0628b1cbaab3fb0a1c71781b77dd2c91ed0c73 Mon Sep 17 00:00:00 2001 From: Szilard Nemeth Date: Sat, 31 Jul 2021 14:53:30 +0200 Subject: [PATCH] YARN-6221. Entities missing from ATS when summary log file info got returned to the ATS before the domain log. Contributed by Xiaomin Zhang --- .../timeline/EntityGroupFSTimelineStore.java | 3 ++- .../TestEntityGroupFSTimelineStore.java | 25 +++++++++++++++++++ 2 files changed, 27 insertions(+), 1 deletion(-) diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-timeline-pluginstorage/src/main/java/org/apache/hadoop/yarn/server/timeline/EntityGroupFSTimelineStore.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-timeline-pluginstorage/src/main/java/org/apache/hadoop/yarn/server/timeline/EntityGroupFSTimelineStore.java index e9957c8a84..c2992b4e83 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-timeline-pluginstorage/src/main/java/org/apache/hadoop/yarn/server/timeline/EntityGroupFSTimelineStore.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-timeline-pluginstorage/src/main/java/org/apache/hadoop/yarn/server/timeline/EntityGroupFSTimelineStore.java @@ -808,10 +808,11 @@ private void addSummaryLog(String attemptDirName, LogInfo log; if (isDomainLog) { log = new DomainLogInfo(attemptDirName, filename, owner); + summaryLogs.add(0, log); } else { log = new EntityLogInfo(attemptDirName, filename, owner); + summaryLogs.add(log); } - summaryLogs.add(log); } private synchronized void addDetailLog(String attemptDirName, diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-timeline-pluginstorage/src/test/java/org/apache/hadoop/yarn/server/timeline/TestEntityGroupFSTimelineStore.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-timeline-pluginstorage/src/test/java/org/apache/hadoop/yarn/server/timeline/TestEntityGroupFSTimelineStore.java index 984e157971..7302ae130d 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-timeline-pluginstorage/src/test/java/org/apache/hadoop/yarn/server/timeline/TestEntityGroupFSTimelineStore.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-timeline-pluginstorage/src/test/java/org/apache/hadoop/yarn/server/timeline/TestEntityGroupFSTimelineStore.java @@ -226,6 +226,31 @@ store.new AppLogs(mainTestAppId, mainTestAppDirPath, } } + @Test + public void testAppLogsDomainLogLastlyScanned() throws Exception { + EntityGroupFSTimelineStore.AppLogs appLogs = + store.new AppLogs(mainTestAppId, mainTestAppDirPath, + AppState.COMPLETED); + Path attemptDirPath = new Path(new Path(testActiveDirPath, + mainTestAppId.toString()), + getAttemptDirName(mainTestAppId)); + //Delete the domain log from AppDirPath so first scan won't find it + fs.delete(new Path(attemptDirPath, TEST_DOMAIN_LOG_FILE_NAME), false); + appLogs.scanForLogs(); + List summaryLogs = appLogs.getSummaryLogs(); + assertEquals(1, summaryLogs.size()); + assertEquals(TEST_SUMMARY_LOG_FILE_NAME, summaryLogs.get(0).getFilename()); + + //Generate the domain log + FSDataOutputStream out = fs.create( + new Path(attemptDirPath, TEST_DOMAIN_LOG_FILE_NAME)); + out.close(); + + appLogs.scanForLogs(); + assertEquals(2, summaryLogs.size()); + assertEquals(TEST_DOMAIN_LOG_FILE_NAME, summaryLogs.get(0).getFilename()); + } + @Test public void testMoveToDone() throws Exception { EntityGroupFSTimelineStore.AppLogs appLogs =