HBASE-5755 Region sever looking for master forever with cached stale data

git-svn-id: https://svn.apache.org/repos/asf/hbase/trunk@1311910 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Michael Stack 2012-04-10 18:29:31 +00:00
parent 7d1f7b7f37
commit 814616687a
2 changed files with 16 additions and 2 deletions

View File

@ -1774,8 +1774,9 @@ public class HRegionServer implements HRegionInterface, HBaseRPCErrorHandler,
ServerName masterServerName = null; ServerName masterServerName = null;
long previousLogTime = 0; long previousLogTime = 0;
HMasterRegionInterface master = null; HMasterRegionInterface master = null;
boolean refresh = false; // for the first time, use cached data
while (keepLooping() && master == null) { while (keepLooping() && master == null) {
masterServerName = this.masterAddressManager.getMasterAddress(); masterServerName = this.masterAddressManager.getMasterAddress(refresh);
if (masterServerName == null) { if (masterServerName == null) {
if (!keepLooping()) { if (!keepLooping()) {
// give up with no connection. // give up with no connection.
@ -1784,6 +1785,7 @@ public class HRegionServer implements HRegionInterface, HBaseRPCErrorHandler,
} }
LOG.debug("No master found; retry"); LOG.debug("No master found; retry");
previousLogTime = System.currentTimeMillis(); previousLogTime = System.currentTimeMillis();
refresh = true; // let's try pull it from ZK directly
sleeper.sleep(); sleeper.sleep();
continue; continue;

View File

@ -68,7 +68,19 @@ public class MasterAddressTracker extends ZooKeeperNodeTracker {
* @return Server name or null if timed out. * @return Server name or null if timed out.
*/ */
public ServerName getMasterAddress() { public ServerName getMasterAddress() {
return ZKUtil.znodeContentToServerName(super.getData(false)); return getMasterAddress(false);
}
/**
* Get the address of the current master if one is available. Returns null
* if no current master. If refresh is set, try to load the data from ZK again,
* otherwise, cached data will be used.
*
* @param refresh whether to refresh the data by calling ZK directly.
* @return Server name or null if timed out.
*/
public ServerName getMasterAddress(final boolean refresh) {
return ZKUtil.znodeContentToServerName(super.getData(refresh));
} }
/** /**