Repository: hadoop Updated Branches: refs/heads/branch-2 b963ca84b -> 09639ac6b
YARN-3882. AggregatedLogFormat should close aclScanner and ownerScanner after create them. Contributed by zhihai xu (cherry picked from commit 688617d6d7e6377a37682b5676b805cc6e8cf3f0) Project: http://git-wip-us.apache.org/repos/asf/hadoop/repo Commit: http://git-wip-us.apache.org/repos/asf/hadoop/commit/09639ac6 Tree: http://git-wip-us.apache.org/repos/asf/hadoop/tree/09639ac6 Diff: http://git-wip-us.apache.org/repos/asf/hadoop/diff/09639ac6 Branch: refs/heads/branch-2 Commit: 09639ac6b40e20e2e8adf852327211945d7ec4a0 Parents: b963ca8 Author: Xuan <[email protected]> Authored: Sat Jul 4 21:51:58 2015 -0700 Committer: Xuan <[email protected]> Committed: Sat Jul 4 21:54:22 2015 -0700 ---------------------------------------------------------------------- hadoop-yarn-project/CHANGES.txt | 3 + .../logaggregation/AggregatedLogFormat.java | 83 +++++++++++--------- 2 files changed, 49 insertions(+), 37 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/hadoop/blob/09639ac6/hadoop-yarn-project/CHANGES.txt ---------------------------------------------------------------------- diff --git a/hadoop-yarn-project/CHANGES.txt b/hadoop-yarn-project/CHANGES.txt index ea9cc68..bd32edc 100644 --- a/hadoop-yarn-project/CHANGES.txt +++ b/hadoop-yarn-project/CHANGES.txt @@ -541,6 +541,9 @@ Release 2.8.0 - UNRELEASED YARN-3875. FSSchedulerNode#reserveResource() doesn't print Application Id properly in log. (Bibin A Chundatt via devaraj) + YARN-3882. AggregatedLogFormat should close aclScanner and ownerScanner + after create them. (zhihai xu via xgong) + Release 2.7.2 - UNRELEASED INCOMPATIBLE CHANGES http://git-wip-us.apache.org/repos/asf/hadoop/blob/09639ac6/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/logaggregation/AggregatedLogFormat.java ---------------------------------------------------------------------- diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/logaggregation/AggregatedLogFormat.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/logaggregation/AggregatedLogFormat.java index debe770..c9453b3 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/logaggregation/AggregatedLogFormat.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/logaggregation/AggregatedLogFormat.java @@ -489,18 +489,23 @@ public class AggregatedLogFormat { * @throws IOException */ public String getApplicationOwner() throws IOException { - TFile.Reader.Scanner ownerScanner = reader.createScanner(); - LogKey key = new LogKey(); - while (!ownerScanner.atEnd()) { - TFile.Reader.Scanner.Entry entry = ownerScanner.entry(); - key.readFields(entry.getKeyStream()); - if (key.toString().equals(APPLICATION_OWNER_KEY.toString())) { - DataInputStream valueStream = entry.getValueStream(); - return valueStream.readUTF(); + TFile.Reader.Scanner ownerScanner = null; + try { + ownerScanner = reader.createScanner(); + LogKey key = new LogKey(); + while (!ownerScanner.atEnd()) { + TFile.Reader.Scanner.Entry entry = ownerScanner.entry(); + key.readFields(entry.getKeyStream()); + if (key.toString().equals(APPLICATION_OWNER_KEY.toString())) { + DataInputStream valueStream = entry.getValueStream(); + return valueStream.readUTF(); + } + ownerScanner.advance(); } - ownerScanner.advance(); + return null; + } finally { + IOUtils.cleanup(LOG, ownerScanner); } - return null; } /** @@ -513,38 +518,42 @@ public class AggregatedLogFormat { public Map<ApplicationAccessType, String> getApplicationAcls() throws IOException { // TODO Seek directly to the key once a comparator is specified. - TFile.Reader.Scanner aclScanner = reader.createScanner(); - LogKey key = new LogKey(); - Map<ApplicationAccessType, String> acls = - new HashMap<ApplicationAccessType, String>(); - while (!aclScanner.atEnd()) { - TFile.Reader.Scanner.Entry entry = aclScanner.entry(); - key.readFields(entry.getKeyStream()); - if (key.toString().equals(APPLICATION_ACL_KEY.toString())) { - DataInputStream valueStream = entry.getValueStream(); - while (true) { - String appAccessOp = null; - String aclString = null; - try { - appAccessOp = valueStream.readUTF(); - } catch (EOFException e) { - // Valid end of stream. - break; - } - try { - aclString = valueStream.readUTF(); - } catch (EOFException e) { - throw new YarnRuntimeException("Error reading ACLs", e); + TFile.Reader.Scanner aclScanner = null; + try { + aclScanner = reader.createScanner(); + LogKey key = new LogKey(); + Map<ApplicationAccessType, String> acls = + new HashMap<ApplicationAccessType, String>(); + while (!aclScanner.atEnd()) { + TFile.Reader.Scanner.Entry entry = aclScanner.entry(); + key.readFields(entry.getKeyStream()); + if (key.toString().equals(APPLICATION_ACL_KEY.toString())) { + DataInputStream valueStream = entry.getValueStream(); + while (true) { + String appAccessOp = null; + String aclString = null; + try { + appAccessOp = valueStream.readUTF(); + } catch (EOFException e) { + // Valid end of stream. + break; + } + try { + aclString = valueStream.readUTF(); + } catch (EOFException e) { + throw new YarnRuntimeException("Error reading ACLs", e); + } + acls.put(ApplicationAccessType.valueOf(appAccessOp), aclString); } - acls.put(ApplicationAccessType.valueOf(appAccessOp), aclString); } - + aclScanner.advance(); } - aclScanner.advance(); + return acls; + } finally { + IOUtils.cleanup(LOG, aclScanner); } - return acls; } - + /** * Read the next key and return the value-stream. *
