hbase icon indicating copy to clipboard operation
hbase copied to clipboard

HBASE-28957: Adding support for continuous Backup and Point-in-Time Recovery

Open anmolnar opened this issue 1 month ago • 20 comments

Summary

This PR introduces Continuous Backup and Point-in-Time Recovery (PITR) support in HBase. The feature enables continuous WAL archival and recovery to any specific point in time, providing stronger data protection and recovery flexibility.

Key Highlights

  • Enables continuous backup instead of batch-based incremental backups.
  • Supports precise point-in-time recovery to mitigate data loss due to corruption or accidental updates.
  • Simplifies WAL management and backup lifecycle handling.
  • Improves reliability and reduces storage overhead on the source cluster.

For detailed design and implementation, refer to the design document: [Continuous Backup and Point-in-Time Recovery]

anmolnar avatar Nov 06 '25 16:11 anmolnar

:broken_heart: -1 overall

Vote Subsystem Runtime Logfile Comment
+0 :ok: reexec 0m 31s Docker mode activated.
_ Prechecks _
+1 :green_heart: dupname 0m 0s No case conflicting files found.
+0 :ok: codespell 0m 0s codespell was not available.
+0 :ok: detsecrets 0m 0s detect-secrets was not available.
+0 :ok: shelldocs 0m 0s Shelldocs was not available.
+0 :ok: buf 0m 1s buf was not available.
+0 :ok: buf 0m 1s buf was not available.
+1 :green_heart: @author 0m 0s The patch does not contain any @author tags.
+1 :green_heart: hbaseanti 0m 0s Patch does not have any anti-patterns.
_ master Compile Tests _
+0 :ok: mvndep 0m 33s Maven dependency ordering for branch
+1 :green_heart: mvninstall 4m 29s master passed
+1 :green_heart: compile 8m 57s master passed
+1 :green_heart: checkstyle 2m 34s master passed
+1 :green_heart: spotbugs 16m 2s master passed
+1 :green_heart: spotless 1m 17s branch has no errors when running spotless:check.
-0 :warning: patch 1m 54s Used diff version of patch file. Binary files and potentially other changes not applied. Please rebase and squash commits if necessary.
_ Patch Compile Tests _
+0 :ok: mvndep 0m 15s Maven dependency ordering for patch
-1 :x: mvninstall 4m 1s /patch-mvninstall-root.txt root in the patch failed.
-1 :x: compile 10m 2s /patch-compile-root.txt root in the patch failed.
-1 :x: cc 10m 2s /patch-compile-root.txt root in the patch failed.
-0 :warning: javac 10m 2s /patch-compile-root.txt root in the patch failed.
+1 :green_heart: blanks 0m 0s The patch has no blanks issues.
-0 :warning: checkstyle 2m 28s /results-checkstyle-root.txt root: The patch generated 51 new + 3 unchanged - 0 fixed = 54 total (was 3)
+1 :green_heart: shellcheck 0m 2s No new issues.
+1 :green_heart: xmllint 0m 1s No new issues.
-1 :x: spotbugs 0m 21s /patch-spotbugs-hbase-backup.txt hbase-backup in the patch failed.
-1 :x: spotbugs 8m 24s /patch-spotbugs-root.txt root in the patch failed.
-1 :x: hadoopcheck 3m 17s The patch causes 16 errors with Hadoop v3.3.6.
-1 :x: hadoopcheck 6m 25s The patch causes 16 errors with Hadoop v3.4.1.
-1 :x: hbaseprotoc 0m 17s /patch-hbaseprotoc-hbase-backup.txt hbase-backup in the patch failed.
-1 :x: hbaseprotoc 2m 37s /patch-hbaseprotoc-root.txt root in the patch failed.
-1 :x: spotless 0m 43s patch has 23 errors when running spotless:check, run spotless:apply to fix.
_ Other Tests _
+1 :green_heart: asflicense 0m 44s The patch does not generate ASF License warnings.
80m 58s
Subsystem Report/Notes
Docker ClientAPI=1.43 ServerAPI=1.43 base: https://ci-hbase.apache.org/job/HBase-PreCommit-GitHub-PR/job/PR-7445/1/artifact/yetus-general-check/output/Dockerfile
GITHUB PR https://github.com/apache/hbase/pull/7445
JIRA Issue HBASE-28957
Optional Tests dupname asflicense codespell detsecrets shellcheck shelldocs spotless javac xmllint hadoopcheck compile spotbugs checkstyle hbaseanti cc buflint bufcompat hbaseprotoc
uname Linux 8f7e9e8df756 5.4.0-1103-aws #111~18.04.1-Ubuntu SMP Tue May 23 20:04:10 UTC 2023 x86_64 x86_64 x86_64 GNU/Linux
Build tool maven
Personality dev-support/hbase-personality.sh
git revision master / 12e129276b4f840cde55677c61854fb9c6dbc0ff
Default Java Eclipse Adoptium-17.0.11+9
hadoopcheck https://ci-hbase.apache.org/job/HBase-PreCommit-GitHub-PR/job/PR-7445/1/artifact/yetus-general-check/output/patch-javac-3.3.6.txt
hadoopcheck https://ci-hbase.apache.org/job/HBase-PreCommit-GitHub-PR/job/PR-7445/1/artifact/yetus-general-check/output/patch-javac-3.4.1.txt
spotless https://ci-hbase.apache.org/job/HBase-PreCommit-GitHub-PR/job/PR-7445/1/artifact/yetus-general-check/output/patch-spotless.txt
Max. process+thread count 190 (vs. ulimit of 30000)
modules C: hbase-protocol-shaded hbase-server hbase-mapreduce hbase-backup . U: .
Console output https://ci-hbase.apache.org/job/HBase-PreCommit-GitHub-PR/job/PR-7445/1/console
versions git=2.34.1 maven=3.9.8 spotbugs=4.7.3 shellcheck=0.8.0 xmllint=20913
Powered by Apache Yetus 0.15.0 https://yetus.apache.org

This message was automatically generated.

Apache-HBase avatar Nov 06 '25 18:11 Apache-HBase

:broken_heart: -1 overall

Vote Subsystem Runtime Logfile Comment
+0 :ok: reexec 0m 28s Docker mode activated.
-0 :warning: yetus 0m 3s Unprocessed flag(s): --brief-report-file --spotbugs-strict-precheck --author-ignore-list --blanks-eol-ignore-file --blanks-tabs-ignore-file --quick-hadoopcheck
_ Prechecks _
_ master Compile Tests _
+0 :ok: mvndep 0m 33s Maven dependency ordering for branch
+1 :green_heart: mvninstall 4m 30s master passed
+1 :green_heart: compile 2m 12s master passed
+1 :green_heart: javadoc 2m 58s master passed
+1 :green_heart: shadedjars 6m 10s branch has no errors when building our shaded downstream artifacts.
-0 :warning: patch 6m 40s Used diff version of patch file. Binary files and potentially other changes not applied. Please rebase and squash commits if necessary.
_ Patch Compile Tests _
+0 :ok: mvndep 0m 11s Maven dependency ordering for patch
-1 :x: mvninstall 3m 5s /patch-mvninstall-root.txt root in the patch failed.
-1 :x: compile 2m 4s /patch-compile-root.txt root in the patch failed.
-0 :warning: javac 2m 4s /patch-compile-root.txt root in the patch failed.
-0 :warning: javadoc 0m 12s /results-javadoc-javadoc-hbase-backup.txt hbase-backup generated 4 new + 0 unchanged - 0 fixed = 4 total (was 0)
-0 :warning: javadoc 1m 55s /results-javadoc-javadoc-root.txt root generated 4 new + 210 unchanged - 0 fixed = 214 total (was 210)
+1 :green_heart: shadedjars 6m 6s patch has no errors when building our shaded downstream artifacts.
_ Other Tests _
-1 :x: unit 227m 32s /patch-unit-root.txt root in the patch failed.
265m 24s
Subsystem Report/Notes
Docker ClientAPI=1.43 ServerAPI=1.43 base: https://ci-hbase.apache.org/job/HBase-PreCommit-GitHub-PR/job/PR-7445/1/artifact/yetus-jdk17-hadoop3-check/output/Dockerfile
GITHUB PR https://github.com/apache/hbase/pull/7445
JIRA Issue HBASE-28957
Optional Tests javac javadoc unit shadedjars compile
uname Linux c9e3fbeb55f2 5.4.0-1103-aws #111~18.04.1-Ubuntu SMP Tue May 23 20:04:10 UTC 2023 x86_64 x86_64 x86_64 GNU/Linux
Build tool maven
Personality dev-support/hbase-personality.sh
git revision master / 12e129276b4f840cde55677c61854fb9c6dbc0ff
Default Java Eclipse Adoptium-17.0.11+9
Test Results https://ci-hbase.apache.org/job/HBase-PreCommit-GitHub-PR/job/PR-7445/1/testReport/
Max. process+thread count 4373 (vs. ulimit of 30000)
modules C: hbase-protocol-shaded hbase-server hbase-mapreduce hbase-backup . U: .
Console output https://ci-hbase.apache.org/job/HBase-PreCommit-GitHub-PR/job/PR-7445/1/console
versions git=2.34.1 maven=3.9.8
Powered by Apache Yetus 0.15.0 https://yetus.apache.org

This message was automatically generated.

Apache-HBase avatar Nov 06 '25 21:11 Apache-HBase

:confetti_ball: +1 overall

Vote Subsystem Runtime Logfile Comment
+0 :ok: reexec 0m 31s Docker mode activated.
_ Prechecks _
+1 :green_heart: dupname 0m 1s No case conflicting files found.
+0 :ok: codespell 0m 1s codespell was not available.
+0 :ok: detsecrets 0m 1s detect-secrets was not available.
+0 :ok: shelldocs 0m 1s Shelldocs was not available.
+0 :ok: buf 0m 0s buf was not available.
+0 :ok: buf 0m 0s buf was not available.
+1 :green_heart: @author 0m 0s The patch does not contain any @author tags.
+1 :green_heart: hbaseanti 0m 0s Patch does not have any anti-patterns.
_ master Compile Tests _
+0 :ok: mvndep 0m 33s Maven dependency ordering for branch
+1 :green_heart: mvninstall 4m 31s master passed
+1 :green_heart: compile 8m 48s master passed
+1 :green_heart: checkstyle 2m 21s master passed
+1 :green_heart: spotbugs 12m 34s master passed
+1 :green_heart: spotless 0m 55s branch has no errors when running spotless:check.
-0 :warning: patch 1m 25s Used diff version of patch file. Binary files and potentially other changes not applied. Please rebase and squash commits if necessary.
_ Patch Compile Tests _
+0 :ok: mvndep 0m 11s Maven dependency ordering for patch
+1 :green_heart: mvninstall 3m 10s the patch passed
+1 :green_heart: compile 8m 45s the patch passed
+1 :green_heart: cc 8m 45s the patch passed
-0 :warning: javac 8m 45s /results-compile-javac-root.txt root generated 12 new + 1896 unchanged - 0 fixed = 1908 total (was 1896)
+1 :green_heart: blanks 0m 0s The patch has no blanks issues.
-0 :warning: checkstyle 2m 22s /results-checkstyle-root.txt root: The patch generated 50 new + 3 unchanged - 0 fixed = 53 total (was 3)
+1 :green_heart: shellcheck 0m 0s No new issues.
+1 :green_heart: xmllint 0m 0s No new issues.
+1 :green_heart: spotbugs 13m 8s the patch passed
+1 :green_heart: hadoopcheck 12m 53s Patch does not cause any errors with Hadoop 3.3.6 3.4.1.
+1 :green_heart: hbaseprotoc 4m 54s the patch passed
+1 :green_heart: spotless 0m 57s patch has no errors when running spotless:check.
_ Other Tests _
+1 :green_heart: asflicense 0m 58s The patch does not generate ASF License warnings.
87m 47s
Subsystem Report/Notes
Docker ClientAPI=1.43 ServerAPI=1.43 base: https://ci-hbase.apache.org/job/HBase-PreCommit-GitHub-PR/job/PR-7445/2/artifact/yetus-general-check/output/Dockerfile
GITHUB PR https://github.com/apache/hbase/pull/7445
JIRA Issue HBASE-28957
Optional Tests dupname asflicense codespell detsecrets shellcheck shelldocs spotless javac xmllint hadoopcheck compile spotbugs checkstyle hbaseanti cc buflint bufcompat hbaseprotoc
uname Linux a4010f884649 5.4.0-1103-aws #111~18.04.1-Ubuntu SMP Tue May 23 20:04:10 UTC 2023 x86_64 x86_64 x86_64 GNU/Linux
Build tool maven
Personality dev-support/hbase-personality.sh
git revision master / 6aa212f5abe3b1556740c3e7e80a4761d21a1c15
Default Java Eclipse Adoptium-17.0.11+9
Max. process+thread count 191 (vs. ulimit of 30000)
modules C: hbase-protocol-shaded hbase-server hbase-mapreduce hbase-backup . U: .
Console output https://ci-hbase.apache.org/job/HBase-PreCommit-GitHub-PR/job/PR-7445/2/console
versions git=2.34.1 maven=3.9.8 spotbugs=4.7.3 shellcheck=0.8.0 xmllint=20913
Powered by Apache Yetus 0.15.0 https://yetus.apache.org

This message was automatically generated.

Apache-HBase avatar Nov 06 '25 22:11 Apache-HBase

:confetti_ball: +1 overall

Vote Subsystem Runtime Logfile Comment
+0 :ok: reexec 0m 30s Docker mode activated.
-0 :warning: yetus 0m 3s Unprocessed flag(s): --brief-report-file --spotbugs-strict-precheck --author-ignore-list --blanks-eol-ignore-file --blanks-tabs-ignore-file --quick-hadoopcheck
_ Prechecks _
_ master Compile Tests _
+0 :ok: mvndep 0m 33s Maven dependency ordering for branch
+1 :green_heart: mvninstall 4m 31s master passed
+1 :green_heart: compile 2m 14s master passed
+1 :green_heart: javadoc 2m 58s master passed
+1 :green_heart: shadedjars 6m 17s branch has no errors when building our shaded downstream artifacts.
-0 :warning: patch 6m 47s Used diff version of patch file. Binary files and potentially other changes not applied. Please rebase and squash commits if necessary.
_ Patch Compile Tests _
+0 :ok: mvndep 0m 11s Maven dependency ordering for patch
+1 :green_heart: mvninstall 3m 5s the patch passed
+1 :green_heart: compile 2m 12s the patch passed
+1 :green_heart: javac 2m 12s the patch passed
-0 :warning: javadoc 0m 13s /results-javadoc-javadoc-hbase-backup.txt hbase-backup generated 4 new + 0 unchanged - 0 fixed = 4 total (was 0)
-0 :warning: javadoc 1m 56s /results-javadoc-javadoc-root.txt root generated 4 new + 210 unchanged - 0 fixed = 214 total (was 210)
+1 :green_heart: shadedjars 6m 8s patch has no errors when building our shaded downstream artifacts.
_ Other Tests _
+1 :green_heart: unit 290m 6s root in the patch passed.
329m 45s
Subsystem Report/Notes
Docker ClientAPI=1.43 ServerAPI=1.43 base: https://ci-hbase.apache.org/job/HBase-PreCommit-GitHub-PR/job/PR-7445/2/artifact/yetus-jdk17-hadoop3-check/output/Dockerfile
GITHUB PR https://github.com/apache/hbase/pull/7445
JIRA Issue HBASE-28957
Optional Tests javac javadoc unit shadedjars compile
uname Linux 488b63b537ab 5.4.0-1103-aws #111~18.04.1-Ubuntu SMP Tue May 23 20:04:10 UTC 2023 x86_64 x86_64 x86_64 GNU/Linux
Build tool maven
Personality dev-support/hbase-personality.sh
git revision master / 6aa212f5abe3b1556740c3e7e80a4761d21a1c15
Default Java Eclipse Adoptium-17.0.11+9
Test Results https://ci-hbase.apache.org/job/HBase-PreCommit-GitHub-PR/job/PR-7445/2/testReport/
Max. process+thread count 7246 (vs. ulimit of 30000)
modules C: hbase-protocol-shaded hbase-server hbase-mapreduce hbase-backup . U: .
Console output https://ci-hbase.apache.org/job/HBase-PreCommit-GitHub-PR/job/PR-7445/2/console
versions git=2.34.1 maven=3.9.8
Powered by Apache Yetus 0.15.0 https://yetus.apache.org

This message was automatically generated.

Apache-HBase avatar Nov 07 '25 02:11 Apache-HBase

@wchevreuil I have answers to some of your questions:

  1. Is this a per-table configuration?

Backups need to be enabled in the HBase conf file via hbase.backup.enable. For continuous backups, a backup WAL directory needs to be set via hbase.backup.continuous.wal.dir. Backups can be done on a per-table basis.

  1. Do we need to define a specific replication peer for this?

A replication peer is defined by default as continuous_backup_replication_peer using the CONTINUOUS_BACKUP_REPLICATION_PEER constant.

  1. Do we keep pitr wal files indefinitely?

No, WALs outside of the PITR window get cleaned up automatically. They are also removed when the backup is deleted. This is tracked in HBASE-28992

  1. Can we include doc changes within this PR?

I believe that is the plan. It's still a work in progress.

kgeisz avatar Nov 13 '25 05:11 kgeisz

  1. If we have normal replication enabled (a normal replication peer), will all CFs with REPLICATION_SCOPE = 1 also be targeted for this PITR?

Negative. Continuous backup needs a special replication endpoint to be set for the peer ContinuousBackupReplicationEndpoint. Normal replication peers are not affected and work fine side-by-side.

anmolnar avatar Nov 13 '25 23:11 anmolnar

  1. Should the pitr endpoint replicate method consider if the underlying FS supports sync before deciding the result to return?

The PITR endpoint assumes that sync() is not supported by the filesystem which is usually the case with object stores like S3. The WAL pointer gets persisted only when the stream is closed.

anmolnar avatar Nov 13 '25 23:11 anmolnar

  1. Does it support pause (disable_peer)?

This is a very good question. Given that it's a standard replication endpoint, I would say sure, why not. This is something that we should validate sooner rather than later..

anmolnar avatar Nov 13 '25 23:11 anmolnar

7. Can we include doc changes within this PR?

I suggest to finish reviewing and merging this patch first. Proper documentation and integration testing should come afterwards in separate PRs.

anmolnar avatar Nov 13 '25 23:11 anmolnar

  1. Does it support pause (disable_peer)?

This is a very good question. Given that it's a standard replication endpoint, I would say sure, why not. This is something that we should validate sooner rather than later..

@anmolnar @wchevreuil We actually use that. When cleaning up WAL files, if all the files are removed (which happens when deleting the last full backup — the bare minimum required for PITR), we disable the peer.

More details: BackupCommands.java#L900

vinayakphegde avatar Nov 14 '25 05:11 vinayakphegde

  1. If we have normal replication enabled (a normal replication peer), will all CFs with REPLICATION_SCOPE = 1 also be targeted for this PITR?

Negative. Continuous backup needs a special replication endpoint to be set for the peer ContinuousBackupReplicationEndpoint. Normal replication peers are not affected and work fine side-by-side.

How does the PITR Endpoint avoids backing up entries for CFs with REPLICATION_SCOPE set to true (for normal replication), but which are not primarily wanted to be in PITR backups? Is it possible to "opt out" from PITR at CF table/level?

wchevreuil avatar Nov 14 '25 10:11 wchevreuil

@wchevreuil I have answers to some of your questions:

  1. Is this a per-table configuration?

Backups need to be enabled in the HBase conf file via hbase.backup.enable. For continuous backups, a backup WAL directory needs to be set via hbase.backup.continuous.wal.dir. Backups can be done on a per-table basis.

Will this trigger backups on all existing tables?

  1. Do we need to define a specific replication peer for this?

A replication peer is defined by default as continuous_backup_replication_peer using the CONTINUOUS_BACKUP_REPLICATION_PEER constant.

Can you elaborate further how this peer is defined?

  1. Do we keep pitr wal files indefinitely?

No, WALs outside of the PITR window get cleaned up automatically. They are also removed when the backup is deleted. This is tracked in HBASE-28992

Ok, so we can only do actually PITR within that window period. Can you point me to the code in this PR where this is implemented?

wchevreuil avatar Nov 14 '25 10:11 wchevreuil

  1. If we have normal replication enabled (a normal replication peer), will all CFs with REPLICATION_SCOPE = 1 also be targeted for this PITR?

Negative. Continuous backup needs a special replication endpoint to be set for the peer ContinuousBackupReplicationEndpoint. Normal replication peers are not affected and work fine side-by-side.

How does the PITR Endpoint avoids backing up entries for CFs with REPLICATION_SCOPE set to true (for normal replication), but which are not primarily wanted to be in PITR backups? Is it possible to "opt out" from PITR at CF table/level?

@wchevreuil That is determined when starting the continuous backup.

For example, if you want to start continuous backup for table1, you initiate a full backup with the continuous backup option enabled. This performs the full backup and adds the table to the continuous_backup_replication_peer (the default replication peer used for continuous backup).

If the column families don’t already have replication scope enabled, it’s also set to true at this stage. Please refer to the following methods for details: https://github.com/apache/hbase/blob/6aa212f5abe3b1556740c3e7e80a4761d21a1c15/hbase-backup/src/main/java/org/apache/hadoop/hbase/backup/impl/FullTableBackupClient.java#L269 enableTableReplication() updateContinuousBackupReplicationPeer() addContinuousBackupReplicationPeer()

So, if you manually change the replication scope to true for a random table, it will not be replicated as part of the continuous backup, since it’s not included in the continuous_backup_replication_peer.

vinayakphegde avatar Nov 14 '25 13:11 vinayakphegde

Can you elaborate further how this peer is defined?

https://github.com/apache/hbase/blob/6aa212f5abe3b1556740c3e7e80a4761d21a1c15/hbase-backup/src/main/java/org/apache/hadoop/hbase/backup/impl/FullTableBackupClient.java#L269

this contains the whole logic.

Ok, so we can only do actually PITR within that window period. Can you point me to the code in this PR where this is implemented?

here is the PITR logic is defined. validateAndRestore() method. https://github.com/apache/hbase/blob/6aa212f5abe3b1556740c3e7e80a4761d21a1c15/hbase-backup/src/main/java/org/apache/hadoop/hbase/backup/impl/AbstractPitrRestoreHandler.java#L68

And this is where the clean-up logic is defined — how backed-up WALs are cleaned up as part of continuous backup. https://github.com/apache/hbase/blob/6aa212f5abe3b1556740c3e7e80a4761d21a1c15/hbase-backup/src/main/java/org/apache/hadoop/hbase/backup/impl/BackupCommands.java#L900

vinayakphegde avatar Nov 14 '25 13:11 vinayakphegde

@wchevreuil I have answers to some of your questions:

  1. Is this a per-table configuration?

Backups need to be enabled in the HBase conf file via hbase.backup.enable. For continuous backups, a backup WAL directory needs to be set via hbase.backup.continuous.wal.dir. Backups can be done on a per-table basis.

Will this trigger backups on all existing tables?

@wchevreuil You trigger a backup by running the hbase backup create full command on the desired table(s). For example: hbase backup create full table1,table2,...,tableN

kgeisz avatar Nov 17 '25 17:11 kgeisz

@wchevreuil I have answers to some of your questions:

  1. Is this a per-table configuration?

Backups need to be enabled in the HBase conf file via hbase.backup.enable. For continuous backups, a backup WAL directory needs to be set via hbase.backup.continuous.wal.dir. Backups can be done on a per-table basis.

Will this trigger backups on all existing tables?

@wchevreuil You trigger a backup by running the hbase backup create full command on the desired table(s). For example: hbase backup create full table1,table2,...,tableN

Ok, so only after a full backup is created on a given table through the described command is when that table is added to the pitr replication peer. Is there any action that may remove a given table from the list of tables tracked by the pitr replication peer?

wchevreuil avatar Nov 18 '25 11:11 wchevreuil

Is there any action that may remove a given table from the list of tables tracked by the pitr replication peer?

@wchevreuil The only action I can think of is forcefully deleting the full backup (i.e. using --force-delete), as that is the foundation of the backup and thus the PITR. If the last full backup for the table is forcefully deleted, then all of the continuous backup metadata, associated WAL files, and the replication peer are cleaned up. If the user tries to delete the final full backup for that table without using --force-delete, then the delete attempt fails since that particular backup is important for the backup's integrity.

@vinayakphegde @ankitsol @anmolnar Can one of you please confirm?

kgeisz avatar Nov 19 '25 01:11 kgeisz

Is there any action that may remove a given table from the list of tables tracked by the pitr replication peer?

@wchevreuil The only action I can think of is forcefully deleting the full backup (i.e. using --force-delete), as that is the foundation of the backup and thus the PITR. If the last full backup for the table is forcefully deleted, then all of the continuous backup metadata, associated WAL files, and the replication peer are cleaned up. If the user tries to delete the final full backup for that table without using --force-delete, then the delete attempt fails since that particular backup is important for the backup's integrity.

@vinayakphegde @ankitsol @anmolnar Can one of you please confirm?

Correct. related code: https://github.com/apache/hbase/blob/6aa212f5abe3b1556740c3e7e80a4761d21a1c15/hbase-backup/src/main/java/org/apache/hadoop/hbase/backup/impl/BackupCommands.java#L900

vinayakphegde avatar Nov 19 '25 03:11 vinayakphegde

LGTM, all my questions have been addressed.

Regarding the wal tracking approach, I don't have a strong opinion. @Apache9 , do you think this is a blocker for this merge? Or an alternative could be worked as a follow-up PR?

We're working on a pull request currently which would give us some insight on the alternative approach and lets us decide which way to move forward. Hopefully will be ready in a few days.

anmolnar avatar Nov 25 '25 23:11 anmolnar

I suggest we try the approach to not introduce the new 'ReplicationResult' concept to see if it could work before merging this back. Once the new concept is there, it will be difficult to remove it in the future, as later code may rely on it too...

Apache9 avatar Nov 26 '25 01:11 Apache9