diff --git a/hadoop-mapreduce-project/CHANGES.txt b/hadoop-mapreduce-project/CHANGES.txt index bf447f8057e..d08a1a29935 100644 --- a/hadoop-mapreduce-project/CHANGES.txt +++ b/hadoop-mapreduce-project/CHANGES.txt @@ -406,6 +406,9 @@ Release 2.8.0 - UNRELEASED MAPREDUCE-6614. Remove unnecessary code in TestMapreduceConfigFields. (Kai Sasaki via aajisaka) + MAPREDUCE-6610. JobHistoryEventHandler should not swallow timeline response + (Li Lu via jianhe) + Release 2.7.3 - UNRELEASED INCOMPATIBLE CHANGES diff --git a/hadoop-mapreduce-project/hadoop-mapreduce-client/hadoop-mapreduce-client-app/src/main/java/org/apache/hadoop/mapreduce/jobhistory/JobHistoryEventHandler.java b/hadoop-mapreduce-project/hadoop-mapreduce-client/hadoop-mapreduce-client-app/src/main/java/org/apache/hadoop/mapreduce/jobhistory/JobHistoryEventHandler.java index 26649e8f3ec..1031e38ee53 100644 --- a/hadoop-mapreduce-project/hadoop-mapreduce-client/hadoop-mapreduce-client-app/src/main/java/org/apache/hadoop/mapreduce/jobhistory/JobHistoryEventHandler.java +++ b/hadoop-mapreduce-project/hadoop-mapreduce-client/hadoop-mapreduce-client-app/src/main/java/org/apache/hadoop/mapreduce/jobhistory/JobHistoryEventHandler.java @@ -23,6 +23,7 @@ import java.util.Collections; import java.util.EnumSet; import java.util.HashMap; import java.util.Iterator; +import java.util.List; import java.util.Map; import java.util.Timer; import java.util.TimerTask; @@ -63,6 +64,7 @@ import org.apache.hadoop.service.AbstractService; import org.apache.hadoop.util.StringUtils; import org.apache.hadoop.yarn.api.records.timeline.TimelineEntity; import org.apache.hadoop.yarn.api.records.timeline.TimelineEvent; +import org.apache.hadoop.yarn.api.records.timeline.TimelinePutResponse; import org.apache.hadoop.yarn.client.api.TimelineClient; import org.apache.hadoop.yarn.conf.YarnConfiguration; import org.apache.hadoop.yarn.event.EventHandler; @@ -1013,7 +1015,21 @@ public class JobHistoryEventHandler extends AbstractService } try { - timelineClient.putEntities(tEntity); + TimelinePutResponse response = timelineClient.putEntities(tEntity); + List errors = response.getErrors(); + if (errors.size() == 0) { + if (LOG.isDebugEnabled()) { + LOG.debug("Timeline entities are successfully put in event " + event + .getEventType()); + } + } else { + for (TimelinePutResponse.TimelinePutError error : errors) { + LOG.error( + "Error when publishing entity [" + error.getEntityType() + "," + + error.getEntityId() + "], server side error code: " + + error.getErrorCode()); + } + } } catch (IOException ex) { LOG.error("Error putting entity " + tEntity.getEntityId() + " to Timeline" + "Server", ex);