You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by st...@apache.org on 2009/07/29 21:00:36 UTC
svn commit: r799014 - in /hadoop/hbase/trunk: CHANGES.txt
src/java/org/apache/hadoop/hbase/master/BaseScanner.java
src/java/org/apache/hadoop/hbase/master/HMaster.java
src/java/org/apache/hadoop/hbase/master/ProcessRegionOpen.java
Author: stack
Date: Wed Jul 29 19:00:35 2009
New Revision: 799014
URL: http://svn.apache.org/viewvc?rev=799014&view=rev
Log:
HBASE-1573 Holes in master state change; updated startcode and server go into .META. but catalog scanner just got old values
Modified:
hadoop/hbase/trunk/CHANGES.txt
hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/master/BaseScanner.java
hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/master/HMaster.java
hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/master/ProcessRegionOpen.java
Modified: hadoop/hbase/trunk/CHANGES.txt
URL: http://svn.apache.org/viewvc/hadoop/hbase/trunk/CHANGES.txt?rev=799014&r1=799013&r2=799014&view=diff
==============================================================================
--- hadoop/hbase/trunk/CHANGES.txt (original)
+++ hadoop/hbase/trunk/CHANGES.txt Wed Jul 29 19:00:35 2009
@@ -302,6 +302,8 @@
have (DoÄacan Güney via Ryan Rawson and Stack)
HBASE-1718 Reuse of KeyValue during log replay could cause the wrong
data to be used
+ HBASE-1573 Holes in master state change; updated startcode and server
+ go into .META. but catalog scanner just got old values (redux)
IMPROVEMENTS
HBASE-1089 Add count of regions on filesystem to master UI; add percentage
Modified: hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/master/BaseScanner.java
URL: http://svn.apache.org/viewvc/hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/master/BaseScanner.java?rev=799014&r1=799013&r2=799014&view=diff
==============================================================================
--- hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/master/BaseScanner.java (original)
+++ hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/master/BaseScanner.java Wed Jul 29 19:00:35 2009
@@ -347,14 +347,11 @@
HServerInfo storedInfo = null;
synchronized (this.master.regionManager) {
/* We don't assign regions that are offline, in transition or were on
- * a dead server (unless they have an empty serverName which would imply
- * they haven't been assigned in the first place OR it was closed from
- * the shell with 'close_region' which deletes server and startcode
- * from .META. so region gets reassigned). Regions that were on a dead
- * server will get reassigned by ProcessServerShutdown
+ * a dead server. Regions that were on a dead server will get reassigned
+ * by ProcessServerShutdown
*/
if (info.isOffline() ||
- (serverName != null && this.master.regionManager.regionIsInTransition(info.getRegionNameAsString())) ||
+ this.master.regionManager.regionIsInTransition(info.getRegionNameAsString()) ||
(serverName != null && this.master.serverManager.isDead(serverName))) {
return;
}
@@ -368,8 +365,8 @@
// The current assignment is invalid
if (LOG.isDebugEnabled()) {
LOG.debug("Current assignment of " + info.getRegionNameAsString() +
- " is not valid; " + " Server '" + serverAddress + "' startCode: " +
- startCode + " unknown.");
+ " is not valid; " + " serverAddress=" + serverAddress +
+ ", startCode=" + startCode + " unknown.");
}
// Now get the region assigned
this.master.regionManager.setUnassigned(info, true);
Modified: hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/master/HMaster.java
URL: http://svn.apache.org/viewvc/hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/master/HMaster.java?rev=799014&r1=799013&r2=799014&view=diff
==============================================================================
--- hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/master/HMaster.java (original)
+++ hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/master/HMaster.java Wed Jul 29 19:00:35 2009
@@ -688,7 +688,7 @@
DEFAULT_HOST)) {
String rsAddress = HBaseServer.getRemoteAddress();
serverInfo.setServerAddress(new HServerAddress(rsAddress,
- serverInfo.getServerAddress().getPort()));
+ serverInfo.getServerAddress().getPort()));
}
// Register with server manager
this.serverManager.regionServerStartup(serverInfo);
@@ -1025,10 +1025,16 @@
servername =
Bytes.toString(rr.getValue(CATALOG_FAMILY, SERVER_QUALIFIER));
}
+ // Need to make up a HServerInfo 'servername' for that is how
+ // items are keyed in regionmanager Maps.
+ HServerAddress addr = new HServerAddress(servername);
+ long startCode =
+ Bytes.toLong(rr.getValue(CATALOG_FAMILY, STARTCODE_QUALIFIER));
+ String name = HServerInfo.getServerName(addr, startCode);
LOG.info("Marking " + hri.getRegionNameAsString() +
- " as closed on " + servername + "; cleaning SERVER + STARTCODE; " +
+ " as closing on " + name + "; cleaning SERVER + STARTCODE; " +
"master will tell regionserver to close region on next heartbeat");
- this.regionManager.setClosing(servername, hri, hri.isOffline());
+ this.regionManager.setClosing(name, hri, hri.isOffline());
MetaRegion meta = this.regionManager.getMetaRegionForRow(regionname);
HRegionInterface srvr = getMETAServer(meta);
HRegion.cleanRegionInMETA(srvr, meta.getRegionName(), hri);
Modified: hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/master/ProcessRegionOpen.java
URL: http://svn.apache.org/viewvc/hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/master/ProcessRegionOpen.java?rev=799014&r1=799013&r2=799014&view=diff
==============================================================================
--- hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/master/ProcessRegionOpen.java (original)
+++ hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/master/ProcessRegionOpen.java Wed Jul 29 19:00:35 2009
@@ -25,11 +25,8 @@
import org.apache.hadoop.hbase.HServerAddress;
import org.apache.hadoop.hbase.HServerInfo;
import org.apache.hadoop.hbase.RegionHistorian;
-import org.apache.hadoop.hbase.client.Get;
import org.apache.hadoop.hbase.client.Put;
-import org.apache.hadoop.hbase.client.Result;
import org.apache.hadoop.hbase.ipc.HRegionInterface;
-import org.apache.hadoop.hbase.io.BatchUpdate;
import org.apache.hadoop.hbase.util.Bytes;
/**
@@ -77,16 +74,15 @@
serverInfo.getServerAddress().toString());
// Register the newly-available Region's location.
- LOG.info("updating row " + regionInfo.getRegionNameAsString() +
- " in region " + Bytes.toString(metaRegionName) +
- " with startcode " + serverInfo.getStartCode() + " and server " +
- serverInfo.getServerAddress());
Put p = new Put(regionInfo.getRegionName());
p.add(CATALOG_FAMILY, SERVER_QUALIFIER,
- Bytes.toBytes(serverInfo.getServerAddress().toString()));
+ Bytes.toBytes(serverInfo.getServerAddress().toString()));
p.add(CATALOG_FAMILY, STARTCODE_QUALIFIER,
- Bytes.toBytes(serverInfo.getStartCode()));
+ Bytes.toBytes(serverInfo.getStartCode()));
server.put(metaRegionName, p);
+ LOG.info("Updated row " + regionInfo.getRegionNameAsString() +
+ " in region " + Bytes.toString(metaRegionName) + " with startcode=" +
+ serverInfo.getStartCode() + ", server=" + serverInfo.getServerAddress());
if (!historian.isOnline()) {
// This is safest place to do the onlining of the historian in
// the master. When we get to here, we know there is a .META.