HIVE-16122: NPE Hive Druid split introduced by HIVE-15928 (Slim Bouguerra, reviewed by Jesus Camacho Rodriguez)
Project: http://git-wip-us.apache.org/repos/asf/hive/repo Commit: http://git-wip-us.apache.org/repos/asf/hive/commit/1d159ffd Tree: http://git-wip-us.apache.org/repos/asf/hive/tree/1d159ffd Diff: http://git-wip-us.apache.org/repos/asf/hive/diff/1d159ffd Branch: refs/heads/hive-14535 Commit: 1d159ffd3c5016b78ca2814b837c02ab3f4be1de Parents: 7f4a3e1 Author: Slim Bouguerra <[email protected]> Authored: Wed Mar 8 10:49:42 2017 +0000 Committer: Jesus Camacho Rodriguez <[email protected]> Committed: Wed Mar 8 10:49:42 2017 +0000 ---------------------------------------------------------------------- .../hadoop/hive/druid/io/HiveDruidSplit.java | 19 +++++++- .../hive/druid/io/TestHiveDruidSplit.java | 46 ++++++++++++++++++++ 2 files changed, 63 insertions(+), 2 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/hive/blob/1d159ffd/druid-handler/src/java/org/apache/hadoop/hive/druid/io/HiveDruidSplit.java ---------------------------------------------------------------------- diff --git a/druid-handler/src/java/org/apache/hadoop/hive/druid/io/HiveDruidSplit.java b/druid-handler/src/java/org/apache/hadoop/hive/druid/io/HiveDruidSplit.java index 58cb47a..5159b42 100644 --- a/druid-handler/src/java/org/apache/hadoop/hive/druid/io/HiveDruidSplit.java +++ b/druid-handler/src/java/org/apache/hadoop/hive/druid/io/HiveDruidSplit.java @@ -49,12 +49,22 @@ public class HiveDruidSplit extends FileSplit implements org.apache.hadoop.mapre public void write(DataOutput out) throws IOException { super.write(out); out.writeUTF(druidQuery); + out.writeInt(hosts.length); + for (String host : hosts) { + out.writeUTF(host); + } } @Override public void readFields(DataInput in) throws IOException { super.readFields(in); druidQuery = in.readUTF(); + int length = in.readInt(); + String[] listHosts = new String[length]; + for (int i = 0; i < length; i++) { + listHosts[i] = in.readUTF(); + } + hosts = listHosts; } public String getDruidQuery() { @@ -62,9 +72,14 @@ public class HiveDruidSplit extends FileSplit implements org.apache.hadoop.mapre } @Override + public String[] getLocations() throws IOException { + return hosts; + } + + @Override public String toString() { - return "HiveDruidSplit{" + druidQuery + ", " - + (hosts == null ? "empty hosts" : Arrays.toString(hosts)) + "}"; + return "HiveDruidSplit{" + druidQuery + ", " + + (hosts == null ? "empty hosts" : Arrays.toString(hosts)) + "}"; } } http://git-wip-us.apache.org/repos/asf/hive/blob/1d159ffd/druid-handler/src/test/org/apache/hadoop/hive/druid/io/TestHiveDruidSplit.java ---------------------------------------------------------------------- diff --git a/druid-handler/src/test/org/apache/hadoop/hive/druid/io/TestHiveDruidSplit.java b/druid-handler/src/test/org/apache/hadoop/hive/druid/io/TestHiveDruidSplit.java new file mode 100644 index 0000000..234c783 --- /dev/null +++ b/druid-handler/src/test/org/apache/hadoop/hive/druid/io/TestHiveDruidSplit.java @@ -0,0 +1,46 @@ +/* + * 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.druid.io; + +import org.apache.hadoop.fs.Path; +import org.junit.Assert; +import org.junit.Test; + +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.DataInputStream; +import java.io.DataOutput; +import java.io.DataOutputStream; +import java.io.IOException; + +public class TestHiveDruidSplit { + @Test + public void testSerDeser() throws IOException { + HiveDruidSplit hiveDruidSplit = new HiveDruidSplit("query string", new Path("test-path"), new String []{"host:8080", "host2:8090"}); + ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); + DataOutput dataOutput = new DataOutputStream(byteArrayOutputStream); + hiveDruidSplit.write(dataOutput); + ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(byteArrayOutputStream.toByteArray()); + HiveDruidSplit actualHiveDruidSplit = new HiveDruidSplit(); + actualHiveDruidSplit.readFields(new DataInputStream(byteArrayInputStream)); + Assert.assertEquals(actualHiveDruidSplit.getDruidQuery(), "query string"); + Assert.assertArrayEquals(actualHiveDruidSplit.getLocations(), new String []{"host:8080", "host2:8090"}); + } + +} \ No newline at end of file
