diff --git hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegionServer.java hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegionServer.java index fe65aa0..7f5c8de 100644 --- hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegionServer.java +++ hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegionServer.java @@ -1159,23 +1159,27 @@ public class HRegionServer implements ClientProtocol, } private void closeWAL(final boolean delete) { - try { - if (this.hlogForMeta != null) { - //All hlogs (meta and non-meta) are in the same directory. Don't call - //closeAndDelete here since that would delete all hlogs not just the - //meta ones. We will just 'close' the hlog for meta here, and leave - //the directory cleanup to the follow-on closeAndDelete call. + if (this.hlogForMeta != null) { + // All hlogs (meta and non-meta) are in the same directory. Don't call + // closeAndDelete here since that would delete all hlogs not just the + // meta ones. We will just 'close' the hlog for meta here, and leave + // the directory cleanup to the follow-on closeAndDelete call. + try { this.hlogForMeta.close(); + } catch (Throwable e) { + LOG.error("Metalog close and delete failed", RemoteExceptionHandler.checkThrowable(e)); } - if (this.hlog != null) { + } + if (this.hlog != null) { + try { if (delete) { hlog.closeAndDelete(); } else { hlog.close(); } + } catch (Throwable e) { + LOG.error("Close and delete failed", RemoteExceptionHandler.checkThrowable(e)); } - } catch (Throwable e) { - LOG.error("Close and delete failed", RemoteExceptionHandler.checkThrowable(e)); } } diff --git hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/wal/HLogSplitter.java hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/wal/HLogSplitter.java index 7ab4828..fd6230a 100644 --- hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/wal/HLogSplitter.java +++ hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/wal/HLogSplitter.java @@ -511,7 +511,13 @@ public class HLogSplitter { List corruptedLogs = new ArrayList(); FileSystem fs; fs = rootdir.getFileSystem(conf); - Path logPath = new Path(logfile); + Path logPath = null; + String rootPathString = rootdir.toString(); + if (logfile.startsWith(rootPathString)) { + logPath = new Path(logfile); + } else { + logPath = new Path(rootdir, logfile); + } if (ZKSplitLog.isCorrupted(rootdir, logPath.getName(), fs)) { corruptedLogs.add(logPath); } else {