Index: src/main/java/org/apache/hadoop/hbase/client/HBaseAdmin.java =================================================================== --- src/main/java/org/apache/hadoop/hbase/client/HBaseAdmin.java (revision 1166997) +++ src/main/java/org/apache/hadoop/hbase/client/HBaseAdmin.java (working copy) @@ -54,6 +54,7 @@ import org.apache.hadoop.hbase.catalog.CatalogTracker; import org.apache.hadoop.hbase.catalog.MetaReader; import org.apache.hadoop.hbase.client.MetaScanner.MetaScannerVisitor; +import org.apache.hadoop.hbase.coprocessor.ObserverContext; import org.apache.hadoop.hbase.ipc.HMasterInterface; import org.apache.hadoop.hbase.ipc.HRegionInterface; import org.apache.hadoop.hbase.regionserver.wal.FailedLogCloseException; @@ -1308,11 +1309,25 @@ * @throws MasterNotRunningException * @throws ZooKeeperConnectionException * @throws IOException + * @see {@link #assign(byte[])} */ + @Deprecated public void assign(final byte [] regionName, final boolean force) throws MasterNotRunningException, ZooKeeperConnectionException, IOException { getMaster().assign(regionName, force); } + + /** + * @param regionName + * Region name to assign. + * @throws MasterNotRunningException + * @throws ZooKeeperConnectionException + * @throws IOException + */ + public void assign(final byte[] regionName) throws MasterNotRunningException, + ZooKeeperConnectionException, IOException { + getMaster().assign(regionName); + } /** * Unassign a region from current hosting regionserver. Region will then be Index: src/main/java/org/apache/hadoop/hbase/coprocessor/BaseMasterObserver.java =================================================================== --- src/main/java/org/apache/hadoop/hbase/coprocessor/BaseMasterObserver.java (revision 1166997) +++ src/main/java/org/apache/hadoop/hbase/coprocessor/BaseMasterObserver.java (working copy) @@ -112,6 +112,11 @@ @Override public void preAssign(ObserverContext ctx, + HRegionInfo regionInfo) throws IOException { + } + + @Override + public void preAssign(ObserverContext ctx, HRegionInfo regionInfo, boolean force) throws IOException { } @@ -121,6 +126,11 @@ } @Override + public void postAssign(ObserverContext ctx, + HRegionInfo regionInfo) throws IOException { + } + + @Override public void preUnassign(ObserverContext ctx, HRegionInfo regionInfo, boolean force) throws IOException { } Index: src/main/java/org/apache/hadoop/hbase/coprocessor/MasterObserver.java =================================================================== --- src/main/java/org/apache/hadoop/hbase/coprocessor/MasterObserver.java (revision 1166997) +++ src/main/java/org/apache/hadoop/hbase/coprocessor/MasterObserver.java (working copy) @@ -206,17 +206,37 @@ * @param ctx the environment to interact with the framework and master * @param regionInfo the regionInfo of the region * @param force whether to force assignment or not + * @see #preAssign(ObserverContext, HRegionInfo) */ + @Deprecated void preAssign(final ObserverContext ctx, final HRegionInfo regionInfo, final boolean force) throws IOException; - + /** + * Called prior to assigning a specific region. + * @param ctx the environment to interact with the framework and master + * @param regionInfo the regionInfo of the region + */ + void preAssign(final ObserverContext ctx, + final HRegionInfo regionInfo) throws IOException; + + /** * Called after the region assignment has been requested. * @param ctx the environment to interact with the framework and master * @param regionInfo the regionInfo of the region + */ + void postAssign(final ObserverContext ctx, + final HRegionInfo regionInfo) throws IOException; + + /** + * Called after the region assignment has been requested. + * @param ctx the environment to interact with the framework and master + * @param regionInfo the regionInfo of the region * @param force whether to force assignment or not + * @see #postAssign(ObserverContext, HRegionInfo) */ + @Deprecated void postAssign(final ObserverContext ctx, final HRegionInfo regionInfo, final boolean force) throws IOException; Index: src/main/java/org/apache/hadoop/hbase/ipc/HMasterInterface.java =================================================================== --- src/main/java/org/apache/hadoop/hbase/ipc/HMasterInterface.java (revision 1166997) +++ src/main/java/org/apache/hadoop/hbase/ipc/HMasterInterface.java (working copy) @@ -24,11 +24,15 @@ import org.apache.hadoop.hbase.ClusterStatus; import org.apache.hadoop.hbase.HColumnDescriptor; +import org.apache.hadoop.hbase.HRegionInfo; import org.apache.hadoop.hbase.HTableDescriptor; import org.apache.hadoop.hbase.UnknownRegionException; import org.apache.hadoop.hbase.util.Pair; +import org.apache.hadoop.hbase.coprocessor.ObserverContext; import org.apache.hadoop.hbase.ipc.VersionedProtocol; + + /** * Clients interact with the HMasterInterface to gain access to meta-level * HBase functionality, like finding an HRegionServer and creating/destroying @@ -180,11 +184,22 @@ * found. * @param force If true, will force the assignment. * @throws IOException + * @see {@link #assign(byte[])} */ + @Deprecated public void assign(final byte [] regionName, final boolean force) throws IOException; /** + * Assign a region to a server chosen at random. + * + * @param regionName + * Region to assign. Will use existing RegionPlan if one found. + * @throws IOException + */ + public void assign(final byte[] regionName) throws IOException; + + /** * Unassign a region from current hosting regionserver. Region will then be * assigned to a regionserver chosen at random. Region could be reassigned * back to the same server. Use {@link #move(byte[], byte[])} if you want Index: src/main/java/org/apache/hadoop/hbase/master/HMaster.java =================================================================== --- src/main/java/org/apache/hadoop/hbase/master/HMaster.java (revision 1166997) +++ src/main/java/org/apache/hadoop/hbase/master/HMaster.java (working copy) @@ -1330,23 +1330,30 @@ public boolean isInitialized() { return initialized; } + + @Override + public void assign(final byte[] regionName, final boolean force) + throws IOException { + assign(regionName); + } @Override - public void assign(final byte [] regionName, final boolean force) - throws IOException { + public void assign(final byte [] regionName)throws IOException { Pair pair = MetaReader.getRegion(this.catalogTracker, regionName); if (pair == null) throw new UnknownRegionException(Bytes.toString(regionName)); if (cpHost != null) { - if (cpHost.preAssign(pair.getFirst(), force)) { + if (cpHost.preAssign(pair.getFirst())) { return; } } assignRegion(pair.getFirst()); if (cpHost != null) { - cpHost.postAssign(pair.getFirst(), force); + cpHost.postAssign(pair.getFirst()); } } + + public void assignRegion(HRegionInfo hri) { assignmentManager.assign(hri, true); Index: src/main/java/org/apache/hadoop/hbase/master/MasterCoprocessorHost.java =================================================================== --- src/main/java/org/apache/hadoop/hbase/master/MasterCoprocessorHost.java (revision 1166997) +++ src/main/java/org/apache/hadoop/hbase/master/MasterCoprocessorHost.java (working copy) @@ -332,14 +332,13 @@ } } - boolean preAssign(final HRegionInfo regionInfo, final boolean force) - throws IOException { + boolean preAssign(final HRegionInfo regionInfo) throws IOException { boolean bypass = false; ObserverContext ctx = null; for (MasterEnvironment env: coprocessors) { if (env.getInstance() instanceof MasterObserver) { ctx = ObserverContext.createAndPrepare(env, ctx); - ((MasterObserver)env.getInstance()).preAssign(ctx, regionInfo, force); + ((MasterObserver) env.getInstance()).preAssign(ctx, regionInfo); bypass |= ctx.shouldBypass(); if (ctx.shouldComplete()) { break; @@ -349,12 +348,12 @@ return bypass; } - void postAssign(final HRegionInfo regionInfo, final boolean force) throws IOException { + void postAssign(final HRegionInfo regionInfo) throws IOException { ObserverContext ctx = null; for (MasterEnvironment env: coprocessors) { if (env.getInstance() instanceof MasterObserver) { ctx = ObserverContext.createAndPrepare(env, ctx); - ((MasterObserver)env.getInstance()).postAssign(ctx, regionInfo, force); + ((MasterObserver) env.getInstance()).postAssign(ctx, regionInfo); if (ctx.shouldComplete()) { break; } Index: src/main/ruby/hbase/admin.rb =================================================================== --- src/main/ruby/hbase/admin.rb (revision 1166997) +++ src/main/ruby/hbase/admin.rb (working copy) @@ -230,8 +230,8 @@ #---------------------------------------------------------------------------------------------- #---------------------------------------------------------------------------------------------- # Assign a region - def assign(region_name, force) - @admin.assign(region_name.to_java_bytes, java.lang.Boolean::valueOf(force)) + def assign(region_name) + @admin.assign(region_name.to_java_bytes) end #---------------------------------------------------------------------------------------------- Index: src/main/ruby/shell/commands/assign.rb =================================================================== --- src/main/ruby/shell/commands/assign.rb (revision 1166997) +++ src/main/ruby/shell/commands/assign.rb (working copy) @@ -23,15 +23,15 @@ class Assign < Command def help return <<-EOF -Assign a region. Add 'true' to force assign of a region. Use with caution. -If region already assigned, this command will just go ahead and reassign +Assign a region.Use with caution.If region already assigned, +this command will just go ahead and reassign the region anyways. For experts only. EOF end - def command(region_name, force = 'false') + def command(region_name) format_simple_command do - admin.assign(region_name, force) + admin.assign(region_name) end end end Index: src/test/java/org/apache/hadoop/hbase/coprocessor/TestMasterObserver.java =================================================================== --- src/test/java/org/apache/hadoop/hbase/coprocessor/TestMasterObserver.java (revision 1166997) +++ src/test/java/org/apache/hadoop/hbase/coprocessor/TestMasterObserver.java (working copy) @@ -337,6 +337,12 @@ @Override public void preAssign(ObserverContext env, final HRegionInfo regionInfo, final boolean force) throws IOException { + preAssign(env, regionInfo); + } + + @Override + public void preAssign(ObserverContext env, + final HRegionInfo regionInfo) throws IOException { if (bypass) { env.bypass(); } @@ -346,9 +352,15 @@ @Override public void postAssign(ObserverContext env, final HRegionInfo regionInfo, final boolean force) throws IOException { + postAssign(env, regionInfo); + } + + @Override + public void postAssign(ObserverContext env, + final HRegionInfo regionInfo) throws IOException { postAssignCalled = true; } - + public boolean wasAssignCalled() { return preAssignCalled && postAssignCalled; }