diff --git hbase-client/src/main/java/org/apache/hadoop/hbase/backup/util/BackupClientUtil.java hbase-client/src/main/java/org/apache/hadoop/hbase/backup/util/BackupClientUtil.java index 422432d..72899df 100644 --- hbase-client/src/main/java/org/apache/hadoop/hbase/backup/util/BackupClientUtil.java +++ hbase-client/src/main/java/org/apache/hadoop/hbase/backup/util/BackupClientUtil.java @@ -128,11 +128,16 @@ public final class BackupClientUtil { * @return host name * @throws IOException exception */ - public static String parseHostFromOldLog(Path p) throws IOException { - String n = p.getName(); - int idx = n.lastIndexOf(LOGNAME_SEPARATOR); - String s = URLDecoder.decode(n.substring(0, idx), "UTF8"); - return ServerName.parseHostname(s) + ":" + ServerName.parsePort(s); + public static String parseHostFromOldLog(Path p) { + try{ + String n = p.getName(); + int idx = n.lastIndexOf(LOGNAME_SEPARATOR); + String s = URLDecoder.decode(n.substring(0, idx), "UTF8"); + return ServerName.parseHostname(s) + ":" + ServerName.parsePort(s); + } catch(Exception e){ + LOG.warn("Skip log file (can't parse): "+p); + return null; + } } /** diff --git hbase-server/src/main/java/org/apache/hadoop/hbase/backup/impl/IncrementalBackupManager.java hbase-server/src/main/java/org/apache/hadoop/hbase/backup/impl/IncrementalBackupManager.java index 8e192f1..3b36179 100644 --- hbase-server/src/main/java/org/apache/hadoop/hbase/backup/impl/IncrementalBackupManager.java +++ hbase-server/src/main/java/org/apache/hadoop/hbase/backup/impl/IncrementalBackupManager.java @@ -172,6 +172,9 @@ public class IncrementalBackupManager { } String walFileName = item.getWalFile(); String server = BackupServerUtil.parseHostNameFromLogFile(new Path(walFileName)); + if(server == null) { + continue; + } Long tss = getTimestamp(walFileName); Long oldTss = olderTimestamps.get(server); Long newTss = newestTimestamps.get(server); @@ -239,6 +242,9 @@ public class IncrementalBackupManager { for (FileStatus rs : rss) { p = rs.getPath(); host = BackupServerUtil.parseHostNameFromLogFile(p); + if(host == null){ + continue; + } FileStatus[] logs; oldTimeStamp = olderTimestamps.get(host); // It is possible that there is no old timestamp in hbase:backup for this host if @@ -280,6 +286,9 @@ public class IncrementalBackupManager { continue; } host = BackupClientUtil.parseHostFromOldLog(p); + if(host == null) { + continue; + } currentLogTS = BackupClientUtil.getCreationTime(p); oldTimeStamp = olderTimestamps.get(host); /* @@ -336,7 +345,7 @@ public class IncrementalBackupManager { try { timestamp = BackupClientUtil.getCreationTime(path); return timestamp > Long.valueOf(lastBackupTS); - } catch (IOException e) { + } catch (Exception e) { LOG.warn("Cannot read timestamp of log file " + path); return false; } diff --git hbase-server/src/main/java/org/apache/hadoop/hbase/backup/util/BackupServerUtil.java hbase-server/src/main/java/org/apache/hadoop/hbase/backup/util/BackupServerUtil.java index 6389386..3c1aebf 100644 --- hbase-server/src/main/java/org/apache/hadoop/hbase/backup/util/BackupServerUtil.java +++ hbase-server/src/main/java/org/apache/hadoop/hbase/backup/util/BackupServerUtil.java @@ -221,12 +221,17 @@ public final class BackupServerUtil { * @return host name: port * @throws IOException */ - public static String parseHostNameFromLogFile(Path p) throws IOException { - if (isArchivedLogFile(p)) { - return BackupClientUtil.parseHostFromOldLog(p); - } else { - ServerName sname = DefaultWALProvider.getServerNameFromWALDirectoryName(p); - return sname.getHostname() + ":" + sname.getPort(); + public static String parseHostNameFromLogFile(Path p) { + try{ + if (isArchivedLogFile(p)) { + return BackupClientUtil.parseHostFromOldLog(p); + } else { + ServerName sname = DefaultWALProvider.getServerNameFromWALDirectoryName(p); + return sname.getHostname() + ":" + sname.getPort(); + } + } catch(Exception e){ + LOG.warn("Skip log file (can't parse): "+p); + return null; } } @@ -359,6 +364,9 @@ public final class BackupServerUtil { return false; } String host = parseHostNameFromLogFile(p); + if(host == null) { + return false; + } Long oldTimestamp = hostTimestampMap.get(host); Long currentLogTS = BackupClientUtil.getCreationTime(p); return currentLogTS <= oldTimestamp;