From e4df745c139ba4540c73ffcf78c86387951c9d95 Mon Sep 17 00:00:00 2001 From: Szilard Nemeth Date: Sat, 31 Jul 2021 14:54:51 +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 f8f0aed44c8..5c2d39962c8 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 @@ -774,10 +774,11 @@ public class EntityGroupFSTimelineStore extends CompositeService 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 61da3c89308..13224d1e854 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 @@ -224,6 +224,31 @@ public class TestEntityGroupFSTimelineStore extends TimelineStoreTestUtils { } } + @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 =