Skip to content

Commit 50696ab

Browse files
guptashailesh92Shailesh Gupta
authored andcommitted
YARN-11093: fix for reading files in timeline server in chronological order in case of fs-support-append to false
1 parent 2beb729 commit 50696ab

File tree

2 files changed

+27
-1
lines changed

2 files changed

+27
-1
lines changed

hadoop-yarn-project/hadoop-yarn/hadoop-yarn-api/src/main/java/org/apache/hadoop/yarn/conf/YarnConfiguration.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3275,7 +3275,9 @@ public static boolean isAclEnabled(Configuration conf) {
32753275
public static final String TIMELINE_SERVICE_ENTITYFILE_FS_SUPPORT_APPEND
32763276
= TIMELINE_SERVICE_PREFIX
32773277
+ "entity-file.fs-support-append";
3278-
3278+
public static final boolean TIMELINE_SERVICE_ENTITYFILE_FS_SUPPORT_APPEND_DEFAULT
3279+
= true;
3280+
32793281
public static final String
32803282
TIMELINE_SERVICE_ENTITYGROUP_FS_STORE_WITH_USER_DIR =
32813283
TIMELINE_SERVICE_ENTITYGROUP_FS_STORE_PREFIX + "with-user-dir";

hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-timeline-pluginstorage/src/main/java/org/apache/hadoop/yarn/server/timeline/EntityGroupFSTimelineStore.java

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,9 +76,11 @@
7676
import java.util.Arrays;
7777
import java.util.Collection;
7878
import java.util.Collections;
79+
import java.util.Comparator;
7980
import java.util.EnumSet;
8081
import java.util.HashMap;
8182
import java.util.HashSet;
83+
import java.util.Iterator;
8284
import java.util.LinkedHashMap;
8385
import java.util.LinkedList;
8486
import java.util.List;
@@ -141,6 +143,7 @@ public class EntityGroupFSTimelineStore extends CompositeService
141143
private long unknownActiveMillis;
142144
private int appCacheMaxSize = 0;
143145
private boolean recoveryEnabled;
146+
private boolean isAppendSupported;
144147
private Path checkpointFile;
145148
private ConcurrentMap<String, Pair<Long, Long>> recoveredLogs =
146149
new ConcurrentHashMap<String, Pair<Long, Long>>();
@@ -223,6 +226,10 @@ protected boolean removeEldestEntry(
223226
YarnConfiguration.TIMELINE_SERVICE_ENTITYGROUP_FS_STORE_RECOVERY_ENABLED,
224227
YarnConfiguration.TIMELINE_SERVICE_ENTITYGROUP_FS_STORE_RECOVERY_ENABLED_DEFAULT);
225228

229+
isAppendSupported = conf.getBoolean(
230+
YarnConfiguration.TIMELINE_SERVICE_ENTITYFILE_FS_SUPPORT_APPEND,
231+
YarnConfiguration.TIMELINE_SERVICE_ENTITYFILE_FS_SUPPORT_APPEND_DEFAULT);
232+
226233
aclsEnabled = conf.getBoolean(YarnConfiguration.YARN_ACL_ENABLE,
227234
YarnConfiguration.DEFAULT_YARN_ACL_ENABLE);
228235
CallerContext.setCurrent(
@@ -842,11 +849,28 @@ long scanForLogs() throws IOException {
842849
}
843850
String attemptDirName = statAttempt.getPath().getName();
844851
RemoteIterator<FileStatus> iterCache = list(statAttempt.getPath());
852+
List<FileStatus> files = new ArrayList<>();
845853
while (iterCache.hasNext()) {
846854
FileStatus statCache = iterCache.next();
847855
if (!statCache.isFile()) {
848856
continue;
849857
}
858+
files.add(statCache);
859+
}
860+
if (isAppendSupported) {
861+
Collections.sort(files, new Comparator<FileStatus>() {
862+
@Override
863+
public int compare(FileStatus o1, FileStatus o2) {
864+
String[] ts1 = o1.getPath().getName().split("_");
865+
String[] ts2 = o2.getPath().getName().split("_");
866+
return (Integer.parseInt(ts1[ts1.length - 1]) - Integer.parseInt(ts2[ts2.length - 1]));
867+
}
868+
});
869+
}
870+
Iterator<FileStatus> fileIterator = files.iterator();
871+
872+
while (fileIterator.hasNext()) {
873+
FileStatus statCache = fileIterator.next();
850874
String filename = statCache.getPath().getName();
851875
String owner = statCache.getOwner();
852876
//YARN-10884:Owner of File is set to Null on WASB Append Operation.ATS fails to read such

0 commit comments

Comments
 (0)