You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by jx...@apache.org on 2012/08/17 22:28:33 UTC

svn commit: r1374423 - in /hbase/trunk/hbase-server/src/main: java/org/apache/hadoop/hbase/master/HMaster.java java/org/apache/hadoop/hbase/master/RegionStates.java ruby/shell/commands/assign.rb

Author: jxiang
Date: Fri Aug 17 20:28:32 2012
New Revision: 1374423

URL: http://svn.apache.org/viewvc?rev=1374423&view=rev
Log:
HBASE-6487 assign region doesn't check if the region is already assigned

Modified:
    hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/master/HMaster.java
    hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/master/RegionStates.java
    hbase/trunk/hbase-server/src/main/ruby/shell/commands/assign.rb

Modified: hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/master/HMaster.java
URL: http://svn.apache.org/viewvc/hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/master/HMaster.java?rev=1374423&r1=1374422&r2=1374423&view=diff
==============================================================================
--- hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/master/HMaster.java (original)
+++ hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/master/HMaster.java Fri Aug 17 20:28:32 2012
@@ -2085,8 +2085,13 @@ Server {
         LOG.warn("assignRegion specifier type: expected: " + RegionSpecifierType.REGION_NAME
           + " actual: " + type);
       }
-      HRegionInfo regionInfo = assignmentManager.getRegionStates().getRegionInfo(regionName);
+      RegionStates regionStates = assignmentManager.getRegionStates();
+      HRegionInfo regionInfo = regionStates.getRegionInfo(regionName);
       if (regionInfo == null) throw new UnknownRegionException(Bytes.toString(regionName));
+      RegionState regionState = regionStates.getRegionState(regionInfo);
+      if (regionState != null && !regionState.isOffline()) {
+        throw new IOException("Region " + regionInfo + " is not offline");
+      }
       if (cpHost != null) {
         if (cpHost.preAssign(regionInfo)) {
           return arr;

Modified: hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/master/RegionStates.java
URL: http://svn.apache.org/viewvc/hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/master/RegionStates.java?rev=1374423&r1=1374422&r2=1374423&view=diff
==============================================================================
--- hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/master/RegionStates.java (original)
+++ hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/master/RegionStates.java Fri Aug 17 20:28:32 2012
@@ -133,6 +133,13 @@ public class RegionStates {
   }
 
   /**
+   * @return the server the specified region assigned to; null if not assigned.
+   */
+  public synchronized ServerName getAssignedServer(final HRegionInfo hri) {
+    return regionAssignments.get(hri);
+  }
+
+  /**
    * Wait for the state map to be updated by assignment manager.
    */
   public synchronized void waitForUpdate(
@@ -519,7 +526,11 @@ public class RegionStates {
     try {
       Pair<HRegionInfo, ServerName> p =
         MetaReader.getRegion(server.getCatalogTracker(), regionName);
-      return p == null ? null : p.getFirst();
+      HRegionInfo hri = p == null ? null : p.getFirst();
+      if (hri != null) {
+        createRegionState(hri);
+      }
+      return hri;
     } catch (IOException e) {
       server.abort("Aborting because error occoured while reading " +
         Bytes.toStringBinary(regionName) + " from .META.", e);

Modified: hbase/trunk/hbase-server/src/main/ruby/shell/commands/assign.rb
URL: http://svn.apache.org/viewvc/hbase/trunk/hbase-server/src/main/ruby/shell/commands/assign.rb?rev=1374423&r1=1374422&r2=1374423&view=diff
==============================================================================
--- hbase/trunk/hbase-server/src/main/ruby/shell/commands/assign.rb (original)
+++ hbase/trunk/hbase-server/src/main/ruby/shell/commands/assign.rb Fri Aug 17 20:28:32 2012
@@ -24,8 +24,7 @@ module Shell
       def help
         return <<-EOF
 Assign a region.Use with caution.If region already assigned,
-this command will just go ahead and reassign
-the region anyways. For experts only.
+this command will throw an exception. For experts only.
 EOF
       end