Repository: hbase
Updated Branches:
  refs/heads/master e42741e08 -> 5da0c2010


HBASE-21219 Hbase incremental backup fails with null pointer exception

Signed-off-by: tedyu <[email protected]>


Project: http://git-wip-us.apache.org/repos/asf/hbase/repo
Commit: http://git-wip-us.apache.org/repos/asf/hbase/commit/5da0c201
Tree: http://git-wip-us.apache.org/repos/asf/hbase/tree/5da0c201
Diff: http://git-wip-us.apache.org/repos/asf/hbase/diff/5da0c201

Branch: refs/heads/master
Commit: 5da0c2010b39899faf84e20d9125a23823439875
Parents: e42741e
Author: Vladimir Rodionov <[email protected]>
Authored: Mon Sep 24 17:28:26 2018 -0700
Committer: tedyu <[email protected]>
Committed: Sat Oct 6 12:51:12 2018 -0700

----------------------------------------------------------------------
 .../backup/impl/IncrementalBackupManager.java    | 19 +++++++++++++++----
 1 file changed, 15 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/hbase/blob/5da0c201/hbase-backup/src/main/java/org/apache/hadoop/hbase/backup/impl/IncrementalBackupManager.java
----------------------------------------------------------------------
diff --git 
a/hbase-backup/src/main/java/org/apache/hadoop/hbase/backup/impl/IncrementalBackupManager.java
 
b/hbase-backup/src/main/java/org/apache/hadoop/hbase/backup/impl/IncrementalBackupManager.java
index 3eebf42..853f458 100644
--- 
a/hbase-backup/src/main/java/org/apache/hadoop/hbase/backup/impl/IncrementalBackupManager.java
+++ 
b/hbase-backup/src/main/java/org/apache/hadoop/hbase/backup/impl/IncrementalBackupManager.java
@@ -296,9 +296,20 @@ public class IncrementalBackupManager extends 
BackupManager {
         currentLogFile = log.getPath().toString();
         resultLogFiles.add(currentLogFile);
         currentLogTS = BackupUtils.getCreationTime(log.getPath());
-        // newestTimestamps is up-to-date with the current list of hosts
-        // so newestTimestamps.get(host) will not be null.
-        if (currentLogTS > newestTimestamps.get(host)) {
+
+        // If newestTimestamps.get(host) is null, means that
+        // either RS (host) has been restarted recently with different port 
number
+        // or RS is down (was decommisioned). In any case, we treat this
+        // log file as eligible for inclusion into incremental backup log list
+        Long ts = newestTimestamps.get(host);
+        if (ts ==  null) {
+          LOG.warn("ORPHAN log found: " + log + " host=" + host);
+          LOG.debug("Known hosts (from newestTimestamps):");
+          for (String s: newestTimestamps.keySet()) {
+            LOG.debug(s);
+          }
+        }
+        if (ts == null || currentLogTS > ts) {
           newestLogs.add(currentLogFile);
         }
       }
@@ -343,7 +354,7 @@ public class IncrementalBackupManager extends BackupManager 
{
       // Even if these logs belong to a obsolete region server, we still need
       // to include they to avoid loss of edits for backup.
       Long newTimestamp = newestTimestamps.get(host);
-      if (newTimestamp != null && currentLogTS > newTimestamp) {
+      if (newTimestamp == null || currentLogTS > newTimestamp) {
         newestLogs.add(currentLogFile);
       }
     }

Reply via email to