HIVE-18827: useless dynamic value exceptions strike back (Jason Dere, reviewed by Sergey Shelukhin)
Project: http://git-wip-us.apache.org/repos/asf/hive/repo Commit: http://git-wip-us.apache.org/repos/asf/hive/commit/f94ae7fe Tree: http://git-wip-us.apache.org/repos/asf/hive/tree/f94ae7fe Diff: http://git-wip-us.apache.org/repos/asf/hive/diff/f94ae7fe Branch: refs/heads/storage-branch-2.6 Commit: f94ae7fec93978b9a798af30aabc99027e0fab69 Parents: 29a8690 Author: Jason Dere <jd...@hortonworks.com> Authored: Wed Apr 25 14:59:48 2018 -0700 Committer: Jason Dere <jd...@hortonworks.com> Committed: Wed Apr 25 14:59:48 2018 -0700 ---------------------------------------------------------------------- .../ql/exec/tez/DynamicValueRegistryTez.java | 2 +- .../hadoop/hive/ql/io/orc/OrcInputFormat.java | 2 +- .../hadoop/hive/ql/plan/DynamicValue.java | 11 +------ .../hive/common/NoDynamicValuesException.java | 32 ++++++++++++++++++++ .../hive/ql/io/sarg/SearchArgumentImpl.java | 19 +++++++++--- 5 files changed, 50 insertions(+), 16 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/hive/blob/f94ae7fe/ql/src/java/org/apache/hadoop/hive/ql/exec/tez/DynamicValueRegistryTez.java ---------------------------------------------------------------------- diff --git a/ql/src/java/org/apache/hadoop/hive/ql/exec/tez/DynamicValueRegistryTez.java b/ql/src/java/org/apache/hadoop/hive/ql/exec/tez/DynamicValueRegistryTez.java index 2d99f50..e467742 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/exec/tez/DynamicValueRegistryTez.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/exec/tez/DynamicValueRegistryTez.java @@ -24,7 +24,7 @@ import org.apache.hadoop.hive.ql.exec.ExprNodeEvaluator; import org.apache.hadoop.hive.ql.exec.ExprNodeEvaluatorFactory; import org.apache.hadoop.hive.ql.parse.RuntimeValuesInfo; import org.apache.hadoop.hive.ql.plan.BaseWork; -import org.apache.hadoop.hive.ql.plan.DynamicValue.NoDynamicValuesException; +import org.apache.hadoop.hive.common.NoDynamicValuesException; import org.apache.hadoop.hive.ql.plan.ExprNodeDesc; import org.apache.hadoop.hive.serde2.Deserializer; import org.apache.hadoop.hive.serde2.objectinspector.ObjectInspector; http://git-wip-us.apache.org/repos/asf/hive/blob/f94ae7fe/ql/src/java/org/apache/hadoop/hive/ql/io/orc/OrcInputFormat.java ---------------------------------------------------------------------- diff --git a/ql/src/java/org/apache/hadoop/hive/ql/io/orc/OrcInputFormat.java b/ql/src/java/org/apache/hadoop/hive/ql/io/orc/OrcInputFormat.java index dc6cc62..019682f 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/io/orc/OrcInputFormat.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/io/orc/OrcInputFormat.java @@ -18,7 +18,7 @@ package org.apache.hadoop.hive.ql.io.orc; -import org.apache.hadoop.hive.ql.plan.DynamicValue.NoDynamicValuesException; +import org.apache.hadoop.hive.common.NoDynamicValuesException; import org.apache.hadoop.fs.PathFilter; import org.apache.hadoop.hdfs.DistributedFileSystem; http://git-wip-us.apache.org/repos/asf/hive/blob/f94ae7fe/ql/src/java/org/apache/hadoop/hive/ql/plan/DynamicValue.java ---------------------------------------------------------------------- diff --git a/ql/src/java/org/apache/hadoop/hive/ql/plan/DynamicValue.java b/ql/src/java/org/apache/hadoop/hive/ql/plan/DynamicValue.java index 1f31ade..04129a6 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/plan/DynamicValue.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/plan/DynamicValue.java @@ -19,6 +19,7 @@ package org.apache.hadoop.hive.ql.plan; import org.apache.hadoop.conf.Configuration; +import org.apache.hadoop.hive.common.NoDynamicValuesException; import org.apache.hadoop.hive.conf.HiveConf; import org.apache.hadoop.hive.ql.exec.DynamicValueRegistry; import org.apache.hadoop.hive.ql.exec.ObjectCache; @@ -101,16 +102,6 @@ public class DynamicValue implements LiteralDelegate, Serializable { return objectInspector.getPrimitiveWritableObject(getValue()); } - /** - * An exception that indicates that the dynamic values are (intentionally) - * not available in this context. - */ - public static class NoDynamicValuesException extends RuntimeException { - public NoDynamicValuesException(String message) { - super(message); - } - } - public Object getValue() { if (initialized) { return val; http://git-wip-us.apache.org/repos/asf/hive/blob/f94ae7fe/storage-api/src/java/org/apache/hadoop/hive/common/NoDynamicValuesException.java ---------------------------------------------------------------------- diff --git a/storage-api/src/java/org/apache/hadoop/hive/common/NoDynamicValuesException.java b/storage-api/src/java/org/apache/hadoop/hive/common/NoDynamicValuesException.java new file mode 100644 index 0000000..a90d3f3 --- /dev/null +++ b/storage-api/src/java/org/apache/hadoop/hive/common/NoDynamicValuesException.java @@ -0,0 +1,32 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.hadoop.hive.common; + +/** + * An exception that indicates that the dynamic values are + * not available in this context. + */ +public class NoDynamicValuesException extends RuntimeException { + + private static final long serialVersionUID = 1L; + + public NoDynamicValuesException(String message) { + super(message); + } +} http://git-wip-us.apache.org/repos/asf/hive/blob/f94ae7fe/storage-api/src/java/org/apache/hadoop/hive/ql/io/sarg/SearchArgumentImpl.java ---------------------------------------------------------------------- diff --git a/storage-api/src/java/org/apache/hadoop/hive/ql/io/sarg/SearchArgumentImpl.java b/storage-api/src/java/org/apache/hadoop/hive/ql/io/sarg/SearchArgumentImpl.java index aa4b648..e720ad1 100644 --- a/storage-api/src/java/org/apache/hadoop/hive/ql/io/sarg/SearchArgumentImpl.java +++ b/storage-api/src/java/org/apache/hadoop/hive/ql/io/sarg/SearchArgumentImpl.java @@ -32,12 +32,18 @@ import java.util.Queue; import java.util.Set; import org.apache.hadoop.conf.Configuration; +import org.apache.hadoop.hive.common.NoDynamicValuesException; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; /** * The implementation of SearchArguments. Visible for testing only. */ public final class SearchArgumentImpl implements SearchArgument { + private static final Logger LOG = LoggerFactory.getLogger(SearchArgumentImpl.class); + public static final class PredicateLeafImpl implements PredicateLeaf { private final Operator operator; private final Type type; @@ -116,11 +122,16 @@ public final class SearchArgumentImpl implements SearchArgument { public List<Object> getLiteralList() { if (literalList != null && literalList.size() > 0 && literalList.get(0) instanceof LiteralDelegate) { List<Object> newLiteraList = new ArrayList<Object>(); - for (Object litertalObj : literalList) { - Object literal = ((LiteralDelegate) litertalObj).getLiteral(); - if (literal != null) { - newLiteraList.add(literal); + try { + for (Object litertalObj : literalList) { + Object literal = ((LiteralDelegate) litertalObj).getLiteral(); + if (literal != null) { + newLiteraList.add(literal); + } } + } catch (NoDynamicValuesException err) { + LOG.debug("Error while retrieving literalList, returning null", err); + return null; } return newLiteraList; }