HBASE-4373 HBaseAdmin.assign() does not use force flag (Ramkrishna)

git-svn-id: https://svn.apache.org/repos/asf/hbase/trunk@1171697 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Zhihong Yu 2011-09-16 17:59:02 +00:00
parent 8948204c47
commit db102ed307
11 changed files with 72 additions and 36 deletions

View File

@ -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

View File

@ -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 <code>force</code> 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);
}
/**

View File

@ -112,12 +112,12 @@ public class BaseMasterObserver implements MasterObserver {
@Override
public void preAssign(ObserverContext<MasterCoprocessorEnvironment> ctx,
HRegionInfo regionInfo, boolean force) throws IOException {
HRegionInfo regionInfo) throws IOException {
}
@Override
public void postAssign(ObserverContext<MasterCoprocessorEnvironment> ctx,
HRegionInfo regionInfo, boolean force) throws IOException {
HRegionInfo regionInfo) throws IOException {
}
@Override

View File

@ -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<MasterCoprocessorEnvironment> 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<MasterCoprocessorEnvironment> 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

View File

@ -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 <code>force</code> 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

View File

@ -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<HRegionInfo, ServerName> 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);

View File

@ -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<MasterCoprocessorEnvironment> 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<MasterCoprocessorEnvironment> 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;
}

View File

@ -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 {
}
}
}
}
}

View File

@ -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
#----------------------------------------------------------------------------------------------

View File

@ -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

View File

@ -333,10 +333,10 @@ public class TestMasterObserver {
public boolean preMoveCalledOnly() {
return preMoveCalled && !postMoveCalled;
}
@Override
public void preAssign(ObserverContext<MasterCoprocessorEnvironment> 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<MasterCoprocessorEnvironment> env,
final HRegionInfo regionInfo, final boolean force) throws IOException {
final HRegionInfo regionInfo) throws IOException {
postAssignCalled = true;
}
public boolean wasAssignCalled() {
return preAssignCalled && postAssignCalled;
}