Index: src/java/org/apache/hadoop/hbase/master/HMaster.java =================================================================== --- src/java/org/apache/hadoop/hbase/master/HMaster.java (revision 798770) +++ src/java/org/apache/hadoop/hbase/master/HMaster.java (working copy) @@ -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); Index: src/java/org/apache/hadoop/hbase/master/ProcessRegionOpen.java =================================================================== --- src/java/org/apache/hadoop/hbase/master/ProcessRegionOpen.java (revision 798770) +++ src/java/org/apache/hadoop/hbase/master/ProcessRegionOpen.java (working copy) @@ -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. Index: src/java/org/apache/hadoop/hbase/master/BaseScanner.java =================================================================== --- src/java/org/apache/hadoop/hbase/master/BaseScanner.java (revision 798770) +++ src/java/org/apache/hadoop/hbase/master/BaseScanner.java (working copy) @@ -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);