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);
     }
   }
 

Reply via email to