From ca105d1c8eb7563fcf7465ed48b8e7ec89eeee59 Mon Sep 17 00:00:00 2001 From: Haibo Chen Date: Fri, 6 Apr 2018 09:37:21 -0700 Subject: [PATCH] YARN-8107. Give an informative message when incorrect format is used in ATSv2 filter attributes. (Rohith Sharma K S via Haibo Chen) (cherry picked from commit 024d7c08704e6a5fcc1f53a8f56a44c84c8d5fa0) (cherry picked from commit b232dcab33c4f3e131b9699119167af8916879c4) --- .../reader/TimelineParserForCompareExpr.java | 7 +++++- .../reader/TimelineParserForEqualityExpr.java | 7 +++++- .../TestTimelineReaderWebServicesUtils.java | 25 +++++++++++++++++++ 3 files changed, 37 insertions(+), 2 deletions(-) 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 @@ public TimelineFilterList parse() throws TimelineParseException { 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 @@ public TimelineFilterList parse() throws TimelineParseException { } } 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.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 void testInfoFiltersParsing() throws Exception { ); 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