From 177c0c1523ad8b1004070f16807ee225fa577523 Mon Sep 17 00:00:00 2001 From: Nathan Roberts Date: Tue, 30 May 2017 16:10:33 -0500 Subject: [PATCH] YARN-6649. RollingLevelDBTimelineServer throws RuntimeException if object decoding ever fails runtime exception. Contributed by Jon Eagles. --- .../timeline/RollingLevelDBTimelineStore.java | 29 +++++++++++++++---- 1 file changed, 23 insertions(+), 6 deletions(-) diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-applicationhistoryservice/src/main/java/org/apache/hadoop/yarn/server/timeline/RollingLevelDBTimelineStore.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-applicationhistoryservice/src/main/java/org/apache/hadoop/yarn/server/timeline/RollingLevelDBTimelineStore.java index 20e0379ac62..d1393465122 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-applicationhistoryservice/src/main/java/org/apache/hadoop/yarn/server/timeline/RollingLevelDBTimelineStore.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-applicationhistoryservice/src/main/java/org/apache/hadoop/yarn/server/timeline/RollingLevelDBTimelineStore.java @@ -473,9 +473,16 @@ public class RollingLevelDBTimelineStore extends AbstractService implements } } else if (key[prefixlen] == OTHER_INFO_COLUMN[0]) { if (otherInfo) { - entity.addOtherInfo( - parseRemainingKey(key, prefixlen + OTHER_INFO_COLUMN.length), - fstConf.asObject(iterator.peekNext().getValue())); + Object o = null; + String keyStr = parseRemainingKey(key, + prefixlen + OTHER_INFO_COLUMN.length); + try { + o = fstConf.asObject(iterator.peekNext().getValue()); + entity.addOtherInfo(keyStr, o); + } catch (Exception e) { + LOG.warn("Error while decoding " + + entityId + ":otherInfo:" + keyStr, e); + } } } else if (key[prefixlen] == RELATED_ENTITIES_COLUMN[0]) { if (relatedEntities) { @@ -1338,7 +1345,12 @@ public class RollingLevelDBTimelineStore extends AbstractService implements TimelineEvent event = new TimelineEvent(); event.setTimestamp(ts); event.setEventType(tstype); - Object o = fstConf.asObject(value); + Object o = null; + try { + o = fstConf.asObject(value); + } catch (Exception e) { + LOG.warn("Error while decoding " + tstype, e); + } if (o == null) { event.setEventInfo(null); } else if (o instanceof Map) { @@ -1362,8 +1374,13 @@ public class RollingLevelDBTimelineStore extends AbstractService implements KeyParser kp = new KeyParser(key, offset); String name = kp.getNextString(); byte[] bytes = kp.getRemainingBytes(); - Object value = fstConf.asObject(bytes); - entity.addPrimaryFilter(name, value); + Object value = null; + try { + value = fstConf.asObject(bytes); + entity.addPrimaryFilter(name, value); + } catch (Exception e) { + LOG.warn("Error while decoding " + name, e); + } } /**