diff --git druid-handler/src/java/org/apache/hadoop/hive/druid/io/HiveDruidSplit.java druid-handler/src/java/org/apache/hadoop/hive/druid/io/HiveDruidSplit.java index 58cb47a..7250c07 100644 --- druid-handler/src/java/org/apache/hadoop/hive/druid/io/HiveDruidSplit.java +++ druid-handler/src/java/org/apache/hadoop/hive/druid/io/HiveDruidSplit.java @@ -49,12 +49,22 @@ public HiveDruidSplit(String druidQuery, Path dummyPath, String hosts[]) { 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 String getDruidQuery() { } @Override + public String[] getLocations() throws IOException { + return hosts == null ? new String[0] : 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)) + "}"; } } diff --git druid-handler/src/test/org/apache/hadoop/hive/druid/io/HiveDruidSplitTest.java druid-handler/src/test/org/apache/hadoop/hive/druid/io/HiveDruidSplitTest.java new file mode 100644 index 0000000..7af0571 --- /dev/null +++ druid-handler/src/test/org/apache/hadoop/hive/druid/io/HiveDruidSplitTest.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 HiveDruidSplitTest { + @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