HBASE-6487 assign region doesn't check if the region is already assigned

git-svn-id: https://svn.apache.org/repos/asf/hbase/trunk@1374423 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
jxiang 2012-08-17 20:28:32 +00:00
parent 61f13bc832
commit a7e18a9bfd
3 changed files with 19 additions and 4 deletions

View File

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

View File

@ -132,6 +132,13 @@ public class RegionStates {
return regionAssignments.containsKey(hri);
}
/**
* @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.
*/
@ -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);

View File

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