DRILL-483: Fix NPE when scanning table region on node without drillbit
Project: http://git-wip-us.apache.org/repos/asf/incubator-drill/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-drill/commit/f8f12df9 Tree: http://git-wip-us.apache.org/repos/asf/incubator-drill/tree/f8f12df9 Diff: http://git-wip-us.apache.org/repos/asf/incubator-drill/diff/f8f12df9 Branch: refs/heads/master Commit: f8f12df99399fb0097ac4c1388d5ccce9a36d48d Parents: ed5d7c9 Author: Steven Phillips <[email protected]> Authored: Thu Apr 3 18:38:27 2014 -0700 Committer: Jacques Nadeau <[email protected]> Committed: Sat Apr 19 21:07:00 2014 -0700 ---------------------------------------------------------------------- .../drill/exec/store/hbase/HBaseGroupScan.java | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-drill/blob/f8f12df9/contrib/storage-hbase/src/main/java/org/apache/drill/exec/store/hbase/HBaseGroupScan.java ---------------------------------------------------------------------- diff --git a/contrib/storage-hbase/src/main/java/org/apache/drill/exec/store/hbase/HBaseGroupScan.java b/contrib/storage-hbase/src/main/java/org/apache/drill/exec/store/hbase/HBaseGroupScan.java index 8c05124..bb0adcc 100644 --- a/contrib/storage-hbase/src/main/java/org/apache/drill/exec/store/hbase/HBaseGroupScan.java +++ b/contrib/storage-hbase/src/main/java/org/apache/drill/exec/store/hbase/HBaseGroupScan.java @@ -119,11 +119,13 @@ public class HBaseGroupScan extends AbstractGroupScan { for (ServerName sn : regionsMap.values()) { String host = sn.getHostname(); DrillbitEndpoint ep = endpointMap.get(host); - EndpointAffinity affinity = affinityMap.get(ep); - if (affinity == null) { - affinityMap.put(ep, new EndpointAffinity(ep, 1)); - } else { - affinity.addAffinity(1); + if (ep != null) { + EndpointAffinity affinity = affinityMap.get(ep); + if (affinity == null) { + affinityMap.put(ep, new EndpointAffinity(ep, 1)); + } else { + affinity.addAffinity(1); + } } } this.endpointAffinities = Lists.newArrayList(affinityMap.values()); @@ -151,12 +153,17 @@ public class HBaseGroupScan extends AbstractGroupScan { Iterator<Integer> ints = Iterators.cycle(incomingEndpointMap.get(s)); mapIterator.put(s, ints); } + Iterator<Integer> nullIterator = Iterators.cycle(incomingEndpointMap.values()); for (HRegionInfo regionInfo : regionsMap.keySet()) { logger.debug("creating read entry. start key: {} end key: {}", Bytes.toStringBinary(regionInfo.getStartKey()), Bytes.toStringBinary(regionInfo.getEndKey())); HBaseSubScan.HBaseSubScanReadEntry p = new HBaseSubScan.HBaseSubScanReadEntry( tableName, Bytes.toStringBinary(regionInfo.getStartKey()), Bytes.toStringBinary(regionInfo.getEndKey())); String host = regionsMap.get(regionInfo).getHostname(); - mappings.put(mapIterator.get(host).next(), p); + Iterator<Integer> indexIterator = mapIterator.get(host); + if (indexIterator == null) { + indexIterator = nullIterator; + } + mappings.put(indexIterator.next(), p); } }
