diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-timelineservice/src/main/java/org/apache/hadoop/yarn/server/timelineservice/reader/TimelineParserForCompareExpr.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-timelineservice/src/main/java/org/apache/hadoop/yarn/server/timelineservice/reader/TimelineParserForCompareExpr.java index 1b020d93f0c..a582956f26f 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-timelineservice/src/main/java/org/apache/hadoop/yarn/server/timelineservice/reader/TimelineParserForCompareExpr.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-timelineservice/src/main/java/org/apache/hadoop/yarn/server/timelineservice/reader/TimelineParserForCompareExpr.java @@ -282,7 +282,12 @@ abstract class TimelineParserForCompareExpr implements TimelineParser { parseValue(expr.substring(kvStartOffset, offset))); } if (filterList == null || filterList.getFilterList().isEmpty()) { - filterList = new TimelineFilterList(currentFilter); + if (currentFilter == null) { + throw new TimelineParseException( + "Invalid expression provided for " + exprName); + } else { + filterList = new TimelineFilterList(currentFilter); + } } else if (currentFilter != null) { filterList.addFilter(currentFilter); } diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-timelineservice/src/main/java/org/apache/hadoop/yarn/server/timelineservice/reader/TimelineParserForEqualityExpr.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-timelineservice/src/main/java/org/apache/hadoop/yarn/server/timelineservice/reader/TimelineParserForEqualityExpr.java index 74517133c6d..2bdce38585d 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-timelineservice/src/main/java/org/apache/hadoop/yarn/server/timelineservice/reader/TimelineParserForEqualityExpr.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-timelineservice/src/main/java/org/apache/hadoop/yarn/server/timelineservice/reader/TimelineParserForEqualityExpr.java @@ -325,7 +325,12 @@ abstract class TimelineParserForEqualityExpr implements TimelineParser { } } if (filterList == null || filterList.getFilterList().isEmpty()) { - filterList = new TimelineFilterList(currentFilter); + if (currentFilter == null) { + throw new TimelineParseException( + "Invalid expression provided for " + exprName); + } else { + filterList = new TimelineFilterList(currentFilter); + } } else if (currentFilter != null) { filterList.addFilter(currentFilter); } diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-timelineservice/src/test/java/org/apache/hadoop/yarn/server/timelineservice/reader/TestTimelineReaderWebServicesUtils.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-timelineservice/src/test/java/org/apache/hadoop/yarn/server/timelineservice/reader/TestTimelineReaderWebServicesUtils.java index b2837c20c98..1455d1785ab 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-timelineservice/src/test/java/org/apache/hadoop/yarn/server/timelineservice/reader/TestTimelineReaderWebServicesUtils.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-timelineservice/src/test/java/org/apache/hadoop/yarn/server/timelineservice/reader/TestTimelineReaderWebServicesUtils.java @@ -31,6 +31,7 @@ import org.apache.hadoop.yarn.server.timelineservice.reader.filter.TimelineFilte import org.apache.hadoop.yarn.server.timelineservice.reader.filter.TimelineKeyValueFilter; import org.apache.hadoop.yarn.server.timelineservice.reader.filter.TimelineKeyValuesFilter; import org.apache.hadoop.yarn.server.timelineservice.reader.filter.TimelinePrefixFilter; +import org.junit.Assert; import org.junit.Test; import com.google.common.collect.Sets; @@ -520,6 +521,30 @@ public class TestTimelineReaderWebServicesUtils { ); verifyFilterList(expr, TimelineReaderWebServicesUtils. parseKVFilters(expr, false), expectedList); + + expr = "abdeq"; + try { + TimelineReaderWebServicesUtils.parseKVFilters(expr, false); + Assert.fail("Expression valuation should throw exception."); + } catch (TimelineParseException e) { + // expected: do nothing + } + + expr = "abc gt 234 AND defeq"; + try { + TimelineReaderWebServicesUtils.parseKVFilters(expr, false); + Assert.fail("Expression valuation should throw exception."); + } catch (TimelineParseException e) { + // expected: do nothing + } + + expr = "((key11 ne 234 AND key12 eq val12) AND (key13eq OR key14 eq va14))"; + try { + TimelineReaderWebServicesUtils.parseKVFilters(expr, false); + Assert.fail("Expression valuation should throw exception."); + } catch (TimelineParseException e) { + // expected: do nothing + } } @Test