diff --git a/CHANGES.txt b/CHANGES.txt
index cc1741acc59..31e7583e1b4 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -494,6 +494,7 @@ Release 0.91.0 - Unreleased
HBASE-4287 If region opening fails, change region in transition into
a FAILED_OPEN state so that it can be retried quickly. (todd)
HBASE-4381 Refactor split decisions into a split policy class. (todd)
+ HBASE-4373 HBaseAdmin.assign() does not use force flag (Ramkrishna)
TASKS
HBASE-3559 Move report of split to master OFF the heartbeat channel
diff --git a/src/main/java/org/apache/hadoop/hbase/client/HBaseAdmin.java b/src/main/java/org/apache/hadoop/hbase/client/HBaseAdmin.java
index c28ec8e975c..7805f1c16be 100644
--- a/src/main/java/org/apache/hadoop/hbase/client/HBaseAdmin.java
+++ b/src/main/java/org/apache/hadoop/hbase/client/HBaseAdmin.java
@@ -54,6 +54,7 @@ import org.apache.hadoop.hbase.ZooKeeperConnectionException;
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;
@@ -1303,15 +1304,31 @@ public class HBaseAdmin implements Abortable, Closeable {
}
/**
- * @param regionName Region name to assign.
- * @param force True to force assign.
+ * @param regionName
+ * Region name to assign.
+ * @param force
+ * True to force assign.
+ * @throws MasterNotRunningException
+ * @throws ZooKeeperConnectionException
+ * @throws IOException
+ * @deprecated The force
is unused.Use {@link #assign(byte[])}
+ */
+ 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, final boolean force)
- throws MasterNotRunningException, ZooKeeperConnectionException, IOException {
- getMaster().assign(regionName, force);
+ public void assign(final byte[] regionName) throws MasterNotRunningException,
+ ZooKeeperConnectionException, IOException {
+ getMaster().assign(regionName);
}
/**
diff --git a/src/main/java/org/apache/hadoop/hbase/coprocessor/BaseMasterObserver.java b/src/main/java/org/apache/hadoop/hbase/coprocessor/BaseMasterObserver.java
index c6374a07fc0..d6d487fb246 100644
--- a/src/main/java/org/apache/hadoop/hbase/coprocessor/BaseMasterObserver.java
+++ b/src/main/java/org/apache/hadoop/hbase/coprocessor/BaseMasterObserver.java
@@ -112,12 +112,12 @@ public class BaseMasterObserver implements MasterObserver {
@Override
public void preAssign(ObserverContext ctx,
- HRegionInfo regionInfo, boolean force) throws IOException {
+ HRegionInfo regionInfo) throws IOException {
}
-
+
@Override
public void postAssign(ObserverContext ctx,
- HRegionInfo regionInfo, boolean force) throws IOException {
+ HRegionInfo regionInfo) throws IOException {
}
@Override
diff --git a/src/main/java/org/apache/hadoop/hbase/coprocessor/MasterObserver.java b/src/main/java/org/apache/hadoop/hbase/coprocessor/MasterObserver.java
index 96774d682a6..04fa4befd7d 100644
--- a/src/main/java/org/apache/hadoop/hbase/coprocessor/MasterObserver.java
+++ b/src/main/java/org/apache/hadoop/hbase/coprocessor/MasterObserver.java
@@ -205,21 +205,18 @@ public interface MasterObserver extends Coprocessor {
* 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
- * @param force whether to force assignment or not
*/
void preAssign(final ObserverContext ctx,
- final HRegionInfo regionInfo, final boolean force)
- throws IOException;
-
+ 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
*/
void postAssign(final ObserverContext ctx,
- final HRegionInfo regionInfo, final boolean force) throws IOException;
-
+ final HRegionInfo regionInfo) throws IOException;
+
/**
* Called prior to unassigning a given region.
* @param ctx the environment to interact with the framework and master
diff --git a/src/main/java/org/apache/hadoop/hbase/ipc/HMasterInterface.java b/src/main/java/org/apache/hadoop/hbase/ipc/HMasterInterface.java
index f5dbfbd8645..85c78aa80fd 100644
--- a/src/main/java/org/apache/hadoop/hbase/ipc/HMasterInterface.java
+++ b/src/main/java/org/apache/hadoop/hbase/ipc/HMasterInterface.java
@@ -24,11 +24,15 @@ import java.util.List;
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,10 +184,20 @@ public interface HMasterInterface extends VersionedProtocol {
* found.
* @param force If true, will force the assignment.
* @throws IOException
+ * @deprecated The force
is unused.Use {@link #assign(byte[])}
*/
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
diff --git a/src/main/java/org/apache/hadoop/hbase/master/HMaster.java b/src/main/java/org/apache/hadoop/hbase/master/HMaster.java
index db680dcaadf..35eaa5a71ea 100644
--- a/src/main/java/org/apache/hadoop/hbase/master/HMaster.java
+++ b/src/main/java/org/apache/hadoop/hbase/master/HMaster.java
@@ -1330,23 +1330,31 @@ implements HMasterInterface, HMasterRegionInterface, MasterServices, Server {
public boolean isInitialized() {
return initialized;
}
+
+ @Override
+ @Deprecated
+ 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);
diff --git a/src/main/java/org/apache/hadoop/hbase/master/MasterCoprocessorHost.java b/src/main/java/org/apache/hadoop/hbase/master/MasterCoprocessorHost.java
index 3e87443ea32..f1b0e9f395b 100644
--- a/src/main/java/org/apache/hadoop/hbase/master/MasterCoprocessorHost.java
+++ b/src/main/java/org/apache/hadoop/hbase/master/MasterCoprocessorHost.java
@@ -332,14 +332,13 @@ public class MasterCoprocessorHost
}
}
- 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 @@ public class MasterCoprocessorHost
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;
}
diff --git a/src/main/java/org/apache/hadoop/hbase/util/HBaseFsckRepair.java b/src/main/java/org/apache/hadoop/hbase/util/HBaseFsckRepair.java
index 74d3cdb8c1d..77f60a021e7 100644
--- a/src/main/java/org/apache/hadoop/hbase/util/HBaseFsckRepair.java
+++ b/src/main/java/org/apache/hadoop/hbase/util/HBaseFsckRepair.java
@@ -80,7 +80,7 @@ public class HBaseFsckRepair {
private static void forceOfflineInZK(HBaseAdmin admin, final HRegionInfo region)
throws ZooKeeperConnectionException, KeeperException, IOException {
- admin.assign(region.getRegionName(), true);
+ admin.assign(region.getRegionName());
}
private static void closeRegionSilentlyAndWait(Configuration conf,
@@ -117,4 +117,4 @@ public class HBaseFsckRepair {
}
}
}
-}
\ No newline at end of file
+}
diff --git a/src/main/ruby/hbase/admin.rb b/src/main/ruby/hbase/admin.rb
index 93a8029b7f5..b244ffeba3a 100644
--- a/src/main/ruby/hbase/admin.rb
+++ b/src/main/ruby/hbase/admin.rb
@@ -230,8 +230,8 @@ module Hbase
#----------------------------------------------------------------------------------------------
#----------------------------------------------------------------------------------------------
# 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
#----------------------------------------------------------------------------------------------
diff --git a/src/main/ruby/shell/commands/assign.rb b/src/main/ruby/shell/commands/assign.rb
index 2fe4a7f7db4..4c83d3cf200 100644
--- a/src/main/ruby/shell/commands/assign.rb
+++ b/src/main/ruby/shell/commands/assign.rb
@@ -23,15 +23,15 @@ module Shell
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
diff --git a/src/test/java/org/apache/hadoop/hbase/coprocessor/TestMasterObserver.java b/src/test/java/org/apache/hadoop/hbase/coprocessor/TestMasterObserver.java
index 6a84a7a2663..1868d1cca9b 100644
--- a/src/test/java/org/apache/hadoop/hbase/coprocessor/TestMasterObserver.java
+++ b/src/test/java/org/apache/hadoop/hbase/coprocessor/TestMasterObserver.java
@@ -333,10 +333,10 @@ public class TestMasterObserver {
public boolean preMoveCalledOnly() {
return preMoveCalled && !postMoveCalled;
}
-
+
@Override
public void preAssign(ObserverContext env,
- final HRegionInfo regionInfo, final boolean force) throws IOException {
+ final HRegionInfo regionInfo) throws IOException {
if (bypass) {
env.bypass();
}
@@ -345,10 +345,10 @@ public class TestMasterObserver {
@Override
public void postAssign(ObserverContext env,
- final HRegionInfo regionInfo, final boolean force) throws IOException {
+ final HRegionInfo regionInfo) throws IOException {
postAssignCalled = true;
}
-
+
public boolean wasAssignCalled() {
return preAssignCalled && postAssignCalled;
}