You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by jd...@apache.org on 2009/12/24 02:23:08 UTC
svn commit: r893675 - in /hadoop/hbase/trunk/src:
java/org/apache/hadoop/hbase/client/ java/org/apache/hadoop/hbase/master/
java/org/apache/hadoop/hbase/regionserver/
test/org/apache/hadoop/hbase/client/
Author: jdcryans
Date: Thu Dec 24 01:23:07 2009
New Revision: 893675
URL: http://svn.apache.org/viewvc?rev=893675&view=rev
Log:
HBASE-2065 Cannot disable a table if any of its region is opening at the same time
Modified:
hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/client/HBaseAdmin.java
hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/master/ChangeTableState.java
hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/master/ProcessRegionClose.java
hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/regionserver/HRegion.java
hadoop/hbase/trunk/src/test/org/apache/hadoop/hbase/client/TestAdmin.java
Modified: hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/client/HBaseAdmin.java
URL: http://svn.apache.org/viewvc/hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/client/HBaseAdmin.java?rev=893675&r1=893674&r2=893675&view=diff
==============================================================================
--- hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/client/HBaseAdmin.java (original)
+++ hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/client/HBaseAdmin.java Thu Dec 24 01:23:07 2009
@@ -326,15 +326,16 @@
if (this.master == null) {
throw new MasterNotRunningException("master has been shut down");
}
- try {
- this.master.enableTable(tableName);
- } catch (RemoteException e) {
- throw RemoteExceptionHandler.decodeRemoteException(e);
- }
// Wait until all regions are enabled
boolean enabled = false;
for (int tries = 0; tries < this.numRetries; tries++) {
+
+ try {
+ this.master.enableTable(tableName);
+ } catch (RemoteException e) {
+ throw RemoteExceptionHandler.decodeRemoteException(e);
+ }
enabled = isTableEnabled(tableName);
if (enabled) break;
long sleep = getPauseTime(tries);
@@ -382,15 +383,15 @@
if (this.master == null) {
throw new MasterNotRunningException("master has been shut down");
}
- try {
- this.master.disableTable(tableName);
- } catch (RemoteException e) {
- throw RemoteExceptionHandler.decodeRemoteException(e);
- }
// Wait until all regions are disabled
boolean disabled = false;
for (int tries = 0; tries < this.numRetries; tries++) {
+ try {
+ this.master.disableTable(tableName);
+ } catch (RemoteException e) {
+ throw RemoteExceptionHandler.decodeRemoteException(e);
+ }
disabled = isTableDisabled(tableName);
if (disabled) break;
if (LOG.isDebugEnabled()) {
Modified: hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/master/ChangeTableState.java
URL: http://svn.apache.org/viewvc/hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/master/ChangeTableState.java?rev=893675&r1=893674&r2=893675&view=diff
==============================================================================
--- hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/master/ChangeTableState.java (original)
+++ hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/master/ChangeTableState.java Thu Dec 24 01:23:07 2009
@@ -78,6 +78,13 @@
continue;
}
+ if(!this.online && this.master.getRegionManager().
+ isPendingOpen(i.getRegionNameAsString())) {
+ LOG.debug("Skipping region " + i.toString() +
+ " because it is pending open, will tell it to close later");
+ continue;
+ }
+
// Update meta table
Put put = updateRegionInfo(i);
server.put(m.getRegionName(), put);
Modified: hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/master/ProcessRegionClose.java
URL: http://svn.apache.org/viewvc/hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/master/ProcessRegionClose.java?rev=893675&r1=893674&r2=893675&view=diff
==============================================================================
--- hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/master/ProcessRegionClose.java (original)
+++ hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/master/ProcessRegionClose.java Thu Dec 24 01:23:07 2009
@@ -59,11 +59,11 @@
@Override
protected boolean process() throws IOException {
Boolean result = null;
- if (offlineRegion) {
+ if (offlineRegion || reassignRegion) {
result =
new RetryableMetaOperation<Boolean>(getMetaRegion(), this.master) {
public Boolean call() throws IOException {
- LOG.info("region closed: " + regionInfo.getRegionNameAsString());
+
// We can't proceed unless the meta region we are going to update
// is online. metaRegionAvailable() will put this operation on the
@@ -71,21 +71,27 @@
// back on the toDoQueue
if (metaRegionAvailable()) {
- // offline the region in meta and then remove it from the
- // set of regions in transition
- HRegion.offlineRegionInMETA(server, metaRegionName,
- regionInfo);
- master.getRegionManager().removeRegion(regionInfo);
+ if(offlineRegion) {
+ // offline the region in meta and then remove it from the
+ // set of regions in transition
+ HRegion.offlineRegionInMETA(server, metaRegionName,
+ regionInfo);
+ master.getRegionManager().removeRegion(regionInfo);
+ LOG.info("region closed: " + regionInfo.getRegionNameAsString());
+ } else {
+ // we are reassigning the region eventually, so set it unassigned
+ // and remove the server info
+ HRegion.cleanRegionInMETA(server, metaRegionName,
+ regionInfo);
+ master.getRegionManager().setUnassigned(regionInfo, false);
+ LOG.info("region set as unassigned: " + regionInfo.getRegionNameAsString());
+ }
}
return true;
}
}.doWithRetries();
result = result == null ? true : result;
- } else if (reassignRegion) {
- LOG.info("region set as unassigned: " + regionInfo.getRegionNameAsString());
- // we are reassigning the region eventually, so set it unassigned
- master.getRegionManager().setUnassigned(regionInfo, false);
} else {
LOG.info("Region was neither offlined, or asked to be reassigned, what gives: " +
regionInfo.getRegionNameAsString());
Modified: hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/regionserver/HRegion.java
URL: http://svn.apache.org/viewvc/hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/regionserver/HRegion.java?rev=893675&r1=893674&r2=893675&view=diff
==============================================================================
--- hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/regionserver/HRegion.java (original)
+++ hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/regionserver/HRegion.java Thu Dec 24 01:23:07 2009
@@ -1925,9 +1925,7 @@
/**
* Delete a region's meta information from the passed
- * <code>meta</code> region. Removes content in the 'info' column family.
- * Does not remove region historian info.
- *
+ * <code>meta</code> region. Deletes the row.
* @param srvr META server to be updated
* @param metaRegionName Meta region name
* @param regionName HRegion to remove from <code>meta</code>
@@ -1938,7 +1936,6 @@
final byte [] metaRegionName, final byte [] regionName)
throws IOException {
Delete delete = new Delete(regionName);
- delete.deleteFamily(HConstants.CATALOG_FAMILY);
srvr.delete(metaRegionName, delete);
}
@@ -1961,10 +1958,7 @@
info.setOffline(true);
put.add(CATALOG_FAMILY, REGIONINFO_QUALIFIER, Writables.getBytes(info));
srvr.put(metaRegionName, put);
- Delete del = new Delete(row);
- del.deleteColumns(CATALOG_FAMILY, SERVER_QUALIFIER);
- del.deleteColumns(CATALOG_FAMILY, STARTCODE_QUALIFIER);
- srvr.delete(metaRegionName, del);
+ cleanRegionInMETA(srvr, metaRegionName, info);
}
/**
Modified: hadoop/hbase/trunk/src/test/org/apache/hadoop/hbase/client/TestAdmin.java
URL: http://svn.apache.org/viewvc/hadoop/hbase/trunk/src/test/org/apache/hadoop/hbase/client/TestAdmin.java?rev=893675&r1=893674&r2=893675&view=diff
==============================================================================
--- hadoop/hbase/trunk/src/test/org/apache/hadoop/hbase/client/TestAdmin.java (original)
+++ hadoop/hbase/trunk/src/test/org/apache/hadoop/hbase/client/TestAdmin.java Thu Dec 24 01:23:07 2009
@@ -395,7 +395,6 @@
@Test
public void testHundredsOfTable() throws IOException{
final int times = 100;
- byte [] name = Bytes.toBytes("testHundredsOfTable");
HColumnDescriptor fam1 = new HColumnDescriptor("fam1");
HColumnDescriptor fam2 = new HColumnDescriptor("fam2");
HColumnDescriptor fam3 = new HColumnDescriptor("fam3");
@@ -411,6 +410,8 @@
for(int i = 0; i < times; i++) {
String tableName = "table"+i;
this.admin.disableTable(tableName);
+ this.admin.enableTable(tableName);
+ this.admin.disableTable(tableName);
this.admin.deleteTable(tableName);
}
}