You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by ap...@apache.org on 2014/08/01 18:39:47 UTC
[2/9] git commit: HBASE-11594 Unhandled NoNodeException in
distributed log replay mode (Jeffrey Zhong)
HBASE-11594 Unhandled NoNodeException in distributed log replay mode (Jeffrey Zhong)
Project: http://git-wip-us.apache.org/repos/asf/hbase/repo
Commit: http://git-wip-us.apache.org/repos/asf/hbase/commit/b727d1e1
Tree: http://git-wip-us.apache.org/repos/asf/hbase/tree/b727d1e1
Diff: http://git-wip-us.apache.org/repos/asf/hbase/diff/b727d1e1
Branch: refs/heads/master
Commit: b727d1e181d275dfec386f88fb323a3f45d49b30
Parents: 19e9b8a
Author: Andrew Purtell <ap...@apache.org>
Authored: Fri Aug 1 09:37:56 2014 -0700
Committer: Andrew Purtell <ap...@apache.org>
Committed: Fri Aug 1 09:37:56 2014 -0700
----------------------------------------------------------------------
.../hbase/regionserver/HRegionServer.java | 56 +++++++++++---------
1 file changed, 32 insertions(+), 24 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hbase/blob/b727d1e1/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegionServer.java
----------------------------------------------------------------------
diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegionServer.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegionServer.java
index 882f125..9c28bfc 100644
--- a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegionServer.java
+++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegionServer.java
@@ -145,6 +145,7 @@ import org.apache.hadoop.metrics.util.MBeanUtil;
import org.apache.hadoop.util.ReflectionUtils;
import org.apache.hadoop.util.StringUtils;
import org.apache.zookeeper.KeeperException;
+import org.apache.zookeeper.KeeperException.NoNodeException;
import org.apache.zookeeper.data.Stat;
import com.google.common.annotations.VisibleForTesting;
@@ -2852,31 +2853,38 @@ public class HRegionServer extends HasThread implements
minSeqIdForLogReplay = storeSeqIdForReplay;
}
}
- long lastRecordedFlushedSequenceId = -1;
- String nodePath = ZKUtil.joinZNode(this.zooKeeper.recoveringRegionsZNode,
- region.getEncodedName());
- // recovering-region level
- byte[] data;
+
try {
- data = ZKUtil.getData(zkw, nodePath);
- } catch (InterruptedException e) {
- throw new InterruptedIOException();
- }
- if (data != null) {
- lastRecordedFlushedSequenceId = SplitLogManager.parseLastFlushedSequenceIdFrom(data);
- }
- if (data == null || lastRecordedFlushedSequenceId < minSeqIdForLogReplay) {
- ZKUtil.setData(zkw, nodePath, ZKUtil.positionToByteArray(minSeqIdForLogReplay));
- }
- if (previousRSName != null) {
- // one level deeper for the failed RS
- nodePath = ZKUtil.joinZNode(nodePath, previousRSName);
- ZKUtil.setData(zkw, nodePath,
- ZKUtil.regionSequenceIdsToByteArray(minSeqIdForLogReplay, maxSeqIdInStores));
- LOG.debug("Update last flushed sequence id of region " + region.getEncodedName() + " for "
- + previousRSName);
- } else {
- LOG.warn("Can't find failed region server for recovering region " + region.getEncodedName());
+ long lastRecordedFlushedSequenceId = -1;
+ String nodePath = ZKUtil.joinZNode(this.zooKeeper.recoveringRegionsZNode,
+ region.getEncodedName());
+ // recovering-region level
+ byte[] data;
+ try {
+ data = ZKUtil.getData(zkw, nodePath);
+ } catch (InterruptedException e) {
+ throw new InterruptedIOException();
+ }
+ if (data != null) {
+ lastRecordedFlushedSequenceId = SplitLogManager.parseLastFlushedSequenceIdFrom(data);
+ }
+ if (data == null || lastRecordedFlushedSequenceId < minSeqIdForLogReplay) {
+ ZKUtil.setData(zkw, nodePath, ZKUtil.positionToByteArray(minSeqIdForLogReplay));
+ }
+ if (previousRSName != null) {
+ // one level deeper for the failed RS
+ nodePath = ZKUtil.joinZNode(nodePath, previousRSName);
+ ZKUtil.setData(zkw, nodePath,
+ ZKUtil.regionSequenceIdsToByteArray(minSeqIdForLogReplay, maxSeqIdInStores));
+ LOG.debug("Update last flushed sequence id of region " + region.getEncodedName() + " for "
+ + previousRSName);
+ } else {
+ LOG.warn("Can't find failed region server for recovering region " +
+ region.getEncodedName());
+ }
+ } catch (NoNodeException ignore) {
+ LOG.debug("Region " + region.getEncodedName() +
+ " must have completed recovery because its recovery znode has been removed", ignore);
}
}