Pārlūkot izejas kodu

HADOOP-1797 Fix NPEs in MetaScanner constructor

git-svn-id: https://svn.apache.org/repos/asf/lucene/hadoop/trunk@570583 13f79535-47bb-0310-9956-ffa450edef68
Jim Kellerman 18 gadi atpakaļ
vecāks
revīzija
3949297d9a

+ 1 - 0
src/contrib/hbase/CHANGES.txt

@@ -21,6 +21,7 @@ Trunk (unreleased changes)
     HADOOP-1776 Fix for sporadic compaction failures closing and moving
     HADOOP-1776 Fix for sporadic compaction failures closing and moving
     compaction result
     compaction result
     HADOOP-1780 Regions are still being doubly assigned
     HADOOP-1780 Regions are still being doubly assigned
+    HADOOP-1797 Fix NPEs in MetaScanner constructor
 
 
   IMPROVEMENTS
   IMPROVEMENTS
     HADOOP-1737 Make HColumnDescriptor data publically members settable
     HADOOP-1737 Make HColumnDescriptor data publically members settable

+ 63 - 33
src/contrib/hbase/src/java/org/apache/hadoop/hbase/HMaster.java

@@ -189,16 +189,16 @@ HMasterRegionInterface, Runnable {
       HRegionInterface regionServer = null;
       HRegionInterface regionServer = null;
       long scannerId = -1L;
       long scannerId = -1L;
       LOG.info(Thread.currentThread().getName() + " scanning meta region " +
       LOG.info(Thread.currentThread().getName() + " scanning meta region " +
-          region.regionName + " on " + region.server.toString());
+          region.getRegionName() + " on " + region.getServer().toString());
 
 
       // Array to hold list of split parents found.  Scan adds to list.  After
       // Array to hold list of split parents found.  Scan adds to list.  After
       // scan we go check if parents can be removed.
       // scan we go check if parents can be removed.
       Map<HRegionInfo, SortedMap<Text, byte[]>> splitParents =
       Map<HRegionInfo, SortedMap<Text, byte[]>> splitParents =
         new HashMap<HRegionInfo, SortedMap<Text, byte[]>>();
         new HashMap<HRegionInfo, SortedMap<Text, byte[]>>();
       try {
       try {
-        regionServer = connection.getHRegionConnection(region.server);
+        regionServer = connection.getHRegionConnection(region.getServer());
         scannerId =
         scannerId =
-          regionServer.openScanner(region.regionName, COLUMN_FAMILY_ARRAY,
+          regionServer.openScanner(region.getRegionName(), COLUMN_FAMILY_ARRAY,
               EMPTY_START_ROW, System.currentTimeMillis(), null);
               EMPTY_START_ROW, System.currentTimeMillis(), null);
 
 
         int numberOfRegionsFound = 0;
         int numberOfRegionsFound = 0;
@@ -256,7 +256,8 @@ HMasterRegionInterface, Runnable {
           }
           }
         } catch (IOException e) {
         } catch (IOException e) {
           if (e instanceof RemoteException) {
           if (e instanceof RemoteException) {
-            e = RemoteExceptionHandler.decodeRemoteException((RemoteException) e);
+            e = RemoteExceptionHandler.decodeRemoteException(
+                (RemoteException) e);
           }
           }
           LOG.error("Closing scanner", e);
           LOG.error("Closing scanner", e);
         }
         }
@@ -268,11 +269,11 @@ HMasterRegionInterface, Runnable {
         for (Map.Entry<HRegionInfo, SortedMap<Text, byte[]>> e:
         for (Map.Entry<HRegionInfo, SortedMap<Text, byte[]>> e:
             splitParents.entrySet()) {
             splitParents.entrySet()) {
           HRegionInfo hri = e.getKey();
           HRegionInfo hri = e.getKey();
-          cleanupSplits(region.regionName, regionServer, hri, e.getValue());
+          cleanupSplits(region.getRegionName(), regionServer, hri, e.getValue());
         }
         }
       }
       }
       LOG.info(Thread.currentThread().getName() + " scan of meta region " +
       LOG.info(Thread.currentThread().getName() + " scan of meta region " +
-          region.regionName + " complete");
+          region.getRegionName() + " complete");
     }
     }
 
 
     /*
     /*
@@ -542,14 +543,40 @@ HMasterRegionInterface, Runnable {
 
 
   @SuppressWarnings("unchecked")
   @SuppressWarnings("unchecked")
   static class MetaRegion implements Comparable {
   static class MetaRegion implements Comparable {
-    HServerAddress server;
-    Text regionName;
-    Text startKey;
+    private HServerAddress server;
+    private Text regionName;
+    private Text startKey;
 
 
     MetaRegion(HServerAddress server, Text regionName, Text startKey) {
     MetaRegion(HServerAddress server, Text regionName, Text startKey) {
+      if (server == null) {
+        throw new IllegalArgumentException("server cannot be null");
+      }
       this.server = server;
       this.server = server;
-      this.regionName = regionName;
-      this.startKey = startKey;
+      
+      if (regionName == null) {
+        throw new IllegalArgumentException("regionName cannot be null");
+      }
+      this.regionName = new Text(regionName);
+      
+      this.startKey = new Text();
+      if (startKey != null) {
+        this.startKey.set(startKey);
+      }
+    }
+
+    /** @return the regionName */
+    public Text getRegionName() {
+      return regionName;
+    }
+
+    /** @return the server */
+    public HServerAddress getServer() {
+      return server;
+    }
+
+    /** @return the startKey */
+    public Text getStartKey() {
+      return startKey;
     }
     }
 
 
     /** {@inheritDoc} */
     /** {@inheritDoc} */
@@ -572,9 +599,9 @@ HMasterRegionInterface, Runnable {
     public int compareTo(Object o) {
     public int compareTo(Object o) {
       MetaRegion other = (MetaRegion)o;
       MetaRegion other = (MetaRegion)o;
 
 
-      int result = this.regionName.compareTo(other.regionName);
+      int result = this.regionName.compareTo(other.getRegionName());
       if(result == 0) {
       if(result == 0) {
-        result = this.startKey.compareTo(other.startKey);
+        result = this.startKey.compareTo(other.getStartKey());
       }
       }
       return result;
       return result;
     }
     }
@@ -625,7 +652,7 @@ HMasterRegionInterface, Runnable {
           // Don't interrupt us while we're working
           // Don't interrupt us while we're working
           synchronized (metaScannerLock) {
           synchronized (metaScannerLock) {
             scanRegion(region);
             scanRegion(region);
-            onlineMetaRegions.put(region.startKey, region);
+            onlineMetaRegions.put(region.getStartKey(), region);
           }
           }
           break;
           break;
         } catch (IOException e) {
         } catch (IOException e) {
@@ -1970,19 +1997,21 @@ HMasterRegionInterface, Runnable {
             long scannerId = -1L;
             long scannerId = -1L;
 
 
             if (LOG.isDebugEnabled()) {
             if (LOG.isDebugEnabled()) {
-              LOG.debug("process server shutdown scanning " + r.regionName +
-                  " on " + r.server + " " + Thread.currentThread().getName());
+              LOG.debug("process server shutdown scanning " +
+                  r.getRegionName() + " on " + r.getServer() + " " +
+                  Thread.currentThread().getName());
             }
             }
-            server = connection.getHRegionConnection(r.server);
+            server = connection.getHRegionConnection(r.getServer());
 
 
-            scannerId = server.openScanner(r.regionName, COLUMN_FAMILY_ARRAY,
-                EMPTY_START_ROW, System.currentTimeMillis(), null);
+            scannerId =
+              server.openScanner(r.getRegionName(), COLUMN_FAMILY_ARRAY,
+                  EMPTY_START_ROW, System.currentTimeMillis(), null);
             
             
-            scanMetaRegion(server, scannerId, r.regionName);
+            scanMetaRegion(server, scannerId, r.getRegionName());
             
             
             if (LOG.isDebugEnabled()) {
             if (LOG.isDebugEnabled()) {
               LOG.debug("process server shutdown finished scanning " +
               LOG.debug("process server shutdown finished scanning " +
-                  r.regionName + " on " + r.server + " " +
+                  r.getRegionName() + " on " + r.getServer() + " " +
                   Thread.currentThread().getName());
                   Thread.currentThread().getName());
             }
             }
           }
           }
@@ -2086,8 +2115,8 @@ HMasterRegionInterface, Runnable {
             r = onlineMetaRegions.get(onlineMetaRegions.headMap(
             r = onlineMetaRegions.get(onlineMetaRegions.headMap(
                 regionInfo.getRegionName()).lastKey());
                 regionInfo.getRegionName()).lastKey());
           }
           }
-          metaRegionName = r.regionName;
-          server = connection.getHRegionConnection(r.server);
+          metaRegionName = r.getRegionName();
+          server = connection.getHRegionConnection(r.getServer());
         }
         }
 
 
         try {
         try {
@@ -2227,8 +2256,8 @@ HMasterRegionInterface, Runnable {
             r = onlineMetaRegions.get(onlineMetaRegions.headMap(
             r = onlineMetaRegions.get(onlineMetaRegions.headMap(
                 region.getRegionName()).lastKey());
                 region.getRegionName()).lastKey());
           }
           }
-          metaRegionName = r.regionName;
-          server = connection.getHRegionConnection(r.server);
+          metaRegionName = r.getRegionName();
+          server = connection.getHRegionConnection(r.getServer());
         }
         }
         LOG.info("updating row " + region.getRegionName() + " in table " +
         LOG.info("updating row " + region.getRegionName() + " in table " +
           metaRegionName + " with startcode " +
           metaRegionName + " with startcode " +
@@ -2365,8 +2394,8 @@ HMasterRegionInterface, Runnable {
             onlineMetaRegions.get(onlineMetaRegions.headMap(
             onlineMetaRegions.get(onlineMetaRegions.headMap(
                 newRegion.getTableDesc().getName()).lastKey()));
                 newRegion.getTableDesc().getName()).lastKey()));
           
           
-      Text metaRegionName = m.regionName;
-      HRegionInterface server = connection.getHRegionConnection(m.server);
+      Text metaRegionName = m.getRegionName();
+      HRegionInterface server = connection.getHRegionConnection(m.getServer());
       long scannerid = server.openScanner(metaRegionName, COL_REGIONINFO_ARRAY,
       long scannerid = server.openScanner(metaRegionName, COL_REGIONINFO_ARRAY,
           tableName, System.currentTimeMillis(), null);
           tableName, System.currentTimeMillis(), null);
       try {
       try {
@@ -2504,13 +2533,14 @@ HMasterRegionInterface, Runnable {
 
 
               // Get a connection to a meta server
               // Get a connection to a meta server
 
 
-              HRegionInterface server = connection.getHRegionConnection(m.server);
+              HRegionInterface server =
+                connection.getHRegionConnection(m.getServer());
 
 
               // Open a scanner on the meta region
               // Open a scanner on the meta region
 
 
               long scannerId =
               long scannerId =
-                server.openScanner(m.regionName, COLUMN_FAMILY_ARRAY, tableName,
-                    System.currentTimeMillis(), null);
+                server.openScanner(m.getRegionName(), COLUMN_FAMILY_ARRAY,
+                    tableName, System.currentTimeMillis(), null);
 
 
               try {
               try {
                 while (true) {
                 while (true) {
@@ -2694,7 +2724,7 @@ HMasterRegionInterface, Runnable {
 
 
         for (int tries = 0; tries < numRetries; tries++) {
         for (int tries = 0; tries < numRetries; tries++) {
           try {
           try {
-            server.batchUpdate(m.regionName, System.currentTimeMillis(), b);
+            server.batchUpdate(m.getRegionName(), System.currentTimeMillis(), b);
             
             
             if (LOG.isDebugEnabled()) {
             if (LOG.isDebugEnabled()) {
               LOG.debug("updated columns in row: " + i.regionName);
               LOG.debug("updated columns in row: " + i.regionName);
@@ -2890,7 +2920,7 @@ HMasterRegionInterface, Runnable {
 
 
       for (HRegionInfo i: unservedRegions) {
       for (HRegionInfo i: unservedRegions) {
         i.tableDesc.families().remove(columnName);
         i.tableDesc.families().remove(columnName);
-        updateRegionInfo(server, m.regionName, i);
+        updateRegionInfo(server, m.getRegionName(), i);
 
 
         // Delete the directories used by the column
         // Delete the directories used by the column
 
 
@@ -2939,7 +2969,7 @@ HMasterRegionInterface, Runnable {
         // and create it.
         // and create it.
 
 
         i.tableDesc.addFamily(newColumn);
         i.tableDesc.addFamily(newColumn);
-        updateRegionInfo(server, m.regionName, i);
+        updateRegionInfo(server, m.getRegionName(), i);
       }
       }
     }
     }
   }
   }