You are viewing a plain text version of this content. The canonical link for it is here.
Posted to common-commits@hadoop.apache.org by ha...@apache.org on 2018/01/03 21:32:03 UTC
[31/50] [abbrv] hadoop git commit: YARN-7687. ContainerLogAppender
Improvements. Contributed by BELUGA BEHR.
YARN-7687. ContainerLogAppender Improvements. Contributed by BELUGA BEHR.
Project: http://git-wip-us.apache.org/repos/asf/hadoop/repo
Commit: http://git-wip-us.apache.org/repos/asf/hadoop/commit/33ae2a4a
Tree: http://git-wip-us.apache.org/repos/asf/hadoop/tree/33ae2a4a
Diff: http://git-wip-us.apache.org/repos/asf/hadoop/diff/33ae2a4a
Branch: refs/heads/YARN-1011
Commit: 33ae2a4ae1a9a6561157d2ec8a1d80cb5c50ff2d
Parents: 5c28804
Author: Miklos Szegedi <sz...@apache.org>
Authored: Tue Jan 2 16:36:51 2018 -0800
Committer: Miklos Szegedi <sz...@apache.org>
Committed: Tue Jan 2 16:36:51 2018 -0800
----------------------------------------------------------------------
.../hadoop/yarn/ContainerLogAppender.java | 76 ++++++++++----------
1 file changed, 39 insertions(+), 37 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hadoop/blob/33ae2a4a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/ContainerLogAppender.java
----------------------------------------------------------------------
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/ContainerLogAppender.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/ContainerLogAppender.java
index c49a1ab..751d9af 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/ContainerLogAppender.java
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/ContainerLogAppender.java
@@ -20,8 +20,8 @@ package org.apache.hadoop.yarn;
import java.io.File;
import java.io.Flushable;
-import java.util.LinkedList;
-import java.util.Queue;
+import java.util.ArrayDeque;
+import java.util.Deque;
import org.apache.hadoop.classification.InterfaceAudience.Public;
import org.apache.hadoop.classification.InterfaceStability.Unstable;
@@ -30,49 +30,43 @@ import org.apache.log4j.spi.LoggingEvent;
/**
* A simple log4j-appender for container's logs.
- *
*/
@Public
@Unstable
public class ContainerLogAppender extends FileAppender
- implements Flushable
-{
+ implements Flushable {
+
private String containerLogDir;
private String containerLogFile;
- //so that log4j can configure it from the configuration(log4j.properties).
private int maxEvents;
- private Queue<LoggingEvent> tail = null;
- private boolean closing = false;
+ private Deque<LoggingEvent> eventBuffer;
+ private boolean closed = false;
@Override
- public void activateOptions() {
- synchronized (this) {
- if (maxEvents > 0) {
- tail = new LinkedList<LoggingEvent>();
- }
- setFile(new File(this.containerLogDir, containerLogFile).toString());
- setAppend(true);
- super.activateOptions();
+ public synchronized void activateOptions() {
+ if (maxEvents > 0) {
+ this.eventBuffer = new ArrayDeque<>();
}
+ setFile(new File(this.containerLogDir, containerLogFile).toString());
+ setAppend(true);
+ super.activateOptions();
}
-
+
@Override
- public void append(LoggingEvent event) {
- synchronized (this) {
- if (closing) { // When closing drop any new/transitive CLA appending
- return;
- }
- if (tail == null) {
- super.append(event);
- } else {
- if (tail.size() >= maxEvents) {
- tail.remove();
- }
- tail.add(event);
+ public synchronized void append(LoggingEvent event) {
+ if (closed) {
+ return;
+ }
+ if (eventBuffer != null) {
+ if (eventBuffer.size() == maxEvents) {
+ eventBuffer.removeFirst();
}
+ eventBuffer.addLast(event);
+ } else {
+ super.append(event);
}
}
-
+
@Override
public void flush() {
if (qw != null) {
@@ -82,13 +76,17 @@ public class ContainerLogAppender extends FileAppender
@Override
public synchronized void close() {
- closing = true;
- if (tail != null) {
- for (LoggingEvent event : tail) {
- super.append(event);
+ if (!closed) {
+ closed = true;
+ if (eventBuffer != null) {
+ for (LoggingEvent event : eventBuffer) {
+ super.append(event);
+ }
+ // let garbage collection do its work
+ eventBuffer = null;
}
+ super.close();
}
- super.close();
}
/**
@@ -111,13 +109,17 @@ public class ContainerLogAppender extends FileAppender
this.containerLogFile = containerLogFile;
}
- private static final int EVENT_SIZE = 100;
+ private static final long EVENT_SIZE = 100;
public long getTotalLogFileSize() {
return maxEvents * EVENT_SIZE;
}
+ /**
+ * Setter so that log4j can configure it from the
+ * configuration(log4j.properties).
+ */
public void setTotalLogFileSize(long logSize) {
- maxEvents = (int) logSize / EVENT_SIZE;
+ maxEvents = (int)(logSize / EVENT_SIZE);
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: common-commits-unsubscribe@hadoop.apache.org
For additional commands, e-mail: common-commits-help@hadoop.apache.org