Skip to content

HBASE-26974 Introduce a LogRollProcedure - #5408

Merged
Apache9 merged 4 commits into
apache:masterfrom
frostruan:HBASE-26974
Sep 12, 2025
Merged

HBASE-26974 Introduce a LogRollProcedure#5408
Apache9 merged 4 commits into
apache:masterfrom
frostruan:HBASE-26974

Conversation

@frostruan

@frostruanfrostruan commented Sep 17, 2023

Copy link
Copy Markdown
Contributor

This PR tries to reimplement the log-roll procedure with proc-v2.

Modifies the following things

client side:

when request all rs to roll WAL writers, instead of calling admin.execProcedure(), now we call admin.execProcedureWithReturn and the returned value depends on the configuration in the server side. If master is configured to used proc-v2, the value would be the procedure id, otherwise nothing. Then we will keep asking master if the procedure has finished by calling admin.isProcedureFinished until it finished or failed or timeout. This was implemented in BackupUtils#rollWALWriters.

server side

  1. enhanced LogRollMasterProcedureManager to support both proc-v1 and proc-v2

  2. introduce 3 new procedures.

LogRollProcedure
The LogRollProcedure is used to roll WAL for all rs in the cluster. It does not acquire any lock and It has 3 states:
LOG_ROLL_PRE_CHECK_NAMESPACE : create backup namespace if not exists
LOG_ROLL_PRE_CHECK_TABLES : create backup system table and backup system bulkload table if not exists
LOG_ROLL_ROLL_LOG_ON_EACH_RS : roll all rs WAL writers

RSLogRollProcedure
The RSLogRollProcedure is used to schedule a RSLogRollRemoteProcedure for each regionserver. When the subprocedure returns, the RSLogRollProcedure will check the logrolling result in the backup system table. If failed, The RSLogRollProcedure will schedule a new RSLogRollRemoteProcedure to retry.

RSLogRollRemoteProcedure
The RSLogRollRemoteProcedure is used to send the log roll request to the remote server.

any suggestions and feedbacks are appreciated.

@Apache-HBase

This comment has been minimized.

@Apache-HBase

This comment has been minimized.

@Apache-HBase

This comment has been minimized.

@Apache-HBase

This comment has been minimized.

@Apache-HBase

This comment has been minimized.

@Apache-HBase

This comment has been minimized.

@frostruan

Copy link
Copy Markdown
ContributorAuthor

The failed UT looks not related.

@frostruan

Copy link
Copy Markdown
ContributorAuthor

Hi Duo, would you mind taking a look in your free time ? This is the last zk-based procedure, also the last sub-task of HBASE-21488 , I'd like to help promote this a bit @Apache9

@Apache9

Copy link
Copy Markdown
Contributor

Hi Duo, would you mind taking a look in your free time ? This is the last zk-based procedure, also the last sub-task of HBASE-21488 , I'd like to help promote this a bit @Apache9

The PR is big, I have already started to review it few days ago but haven't finished yet...

@frostruan

Copy link
Copy Markdown
ContributorAuthor

Hi Duo, would you mind taking a look in your free time ? This is the last zk-based procedure, also the last sub-task of HBASE-21488 , I'd like to help promote this a bit @Apache9

The PR is big, I have already started to review it few days ago but haven't finished yet...

Thanks for the review !

I briefly wrote down the main changes in the begin of the PR, I hope that could help review :)

* @param backupRoot root directory path to backup
* @throws IOException exception
*/
public Long getRegionServerLastLogRollResult(String server, String backupRoot)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why not return long? Seems the return value can never be null?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ok. I'll address it. Thanks Duo.

return Flow.HAS_MORE_STATE;
case LOG_ROLL_ROLL_LOG_ON_EACH_RS:
final List<ServerName> onlineServers =
env.getMasterServices().getServerManager().getOnlineServersList();

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is it possible that we have race here and miss some region servers?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes, we'd better access it under lock protection. I didn't add lock for two reasons:

a. it's acceptable to miss some newly registered servers. If a server is new, we are not likely to assign regions on it, so there is no data lost.

b. In our code base, the calls to this method elsewhere are also not locked.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We need to make sure there is no problem. Usually it is not fixed by locking, but something like fencing. For example, before rolling we have done some preparing, and when rolling, even if we miss some new region servers, it does not cause any problems.

table.readRegionServerLastLogRollResult(backupRoot);
final long now = EnvironmentEdgeManager.currentTime();
for (ServerName server : onlineServers) {
long lastLogRollResult =

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The value is the time for last roll? Why name it lastRollResult?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ok. I'll address it.


@Override
public TableName getTableName() {
return BackupSystemTable.getTableName(conf);

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

So here we just make this procedure as table procedure? Seems a bit strange...

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Because we will try to do some BackupSystemTable-related operations, such as creating backup namespace and the BackupSystemTable.

Anyway, I think it is okay to declare it as a table procedure or a server procedure, because as I mentioned in the beginning of this PR, the LogRollProcedure itself does not need to acquire any lock.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

IIRC we have talked this before, maybe we need to discuss how to change the ProcedureScheduler first...

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes. We have talked about this in HBASE-27905, and I added a new commit to address your comments. It's still in the POC stage and needs to be polished and more test cases.

}

public static void rollWALWriters(Admin admin, Map<String, String> props) throws IOException {
byte[] ret =

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We do not want to introduce a new admin method for this?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

a. it is not general enough for Admin. This call will not only make all rs roll WAL writers, but also do some backup-related operations, such as reading and writing BackupSystemTable.

b. this operation is a bit too lightweight if introduced in the BackupAdmin, since it's only a small subprocedure of the whole backup job.

So I think maybe a static utility method is enough ?

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The execProcedure call is for zk based procedures, do we still have other procedures besides the log roll one?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

No, this is the last one.

@Apache9

Copy link
Copy Markdown
Contributor

Any updates here?

Thanks.

@frostruan

Copy link
Copy Markdown
ContributorAuthor

Will push the newest code as soon as possible.

Thanks Duo !

@frostruan

Copy link
Copy Markdown
ContributorAuthor

A new commit has been added. Let's wait for the UT result.

@Apache-HBase

This comment has been minimized.

@Apache-HBase

This comment has been minimized.

@Apache-HBase

This comment has been minimized.

@Apache-HBase

This comment has been minimized.

@frostruan

Copy link
Copy Markdown
ContributorAuthor

Failed to execute goal org.apache.maven.plugins:maven-surefire-plugin:3.1.0:test (secondPartTestsExecution) on project hbase-server: There was a timeout in the fork -> [Help 1]

The failed UT looks not related.

@Apache9

Copy link
Copy Markdown
Contributor

Any updates here?

This is last one we need to convert from proc-v1 to proc-v2.

@frostruan

Thanks.

@frostruan
frostruanforce-pushed the HBASE-26974 branch 2 times, most recently from 87ee48e to 9502fd3CompareAugust 31, 2025 14:57
@Apache-HBase

This comment has been minimized.

@Apache-HBase

This comment has been minimized.

@Apache-HBase

This comment has been minimized.

@Apache-HBase

This comment has been minimized.

@frostruan

Copy link
Copy Markdown
ContributorAuthor

@Apache9 Hi duo, would you mind seeing if there are any other design or implementation problems blocking merging to master ?

@Apache9
Apache9 requested a review from CopilotSeptember 3, 2025 03:40

CopilotAI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull Request Overview

This PR implements a new LogRollProcedure using HBase's procedure framework (proc-v2) for rolling WAL writers across all region servers. It provides both backward compatibility with the existing ZooKeeper-based approach and introduces the new procedure-based implementation.

  • Adds three new procedures: LogRollProcedure, RSLogRollProcedure, and RSLogRollRemoteProcedure for distributed WAL rolling
  • Updates the client-side BackupUtils to handle both coordination approaches (ZK vs proc-v2) with timeout management
  • Extends executor and event type support for the new LOG_ROLL operation

Reviewed Changes

Copilot reviewed 18 out of 18 changed files in this pull request and generated 2 comments.

Show a summary per file
FileDescription
HRegionServer.javaAdds new executor service for log roll operations
ExecutorType.java/EventType.javaDefines new LOG_ROLL executor and event types
ServerQueue.java/ServerProcedureInterface.javaConfigures server procedure handling for log roll operations
BackupUtils.javaImplements unified client API supporting both ZK and proc-v2 coordination
LogRollMasterProcedureManager.javaEnhanced to support both coordination mechanisms
LogRollProcedure.javaMain procedure coordinating WAL rolling across all region servers
RSLogRollProcedure.java/RSLogRollRemoteProcedure.javaServer-specific log roll procedures with retry logic
TestLogRollProcedure.javaTest coverage for the new procedure implementation

Tip: Customize your code reviews with copilot-instructions.md. Create the file or learn how to get started.

Comment on lines +58 to +61

RS_FLUSH_OPERATIONS(37),
RS_RELOAD_QUOTAS_OPERATIONS(38);
RS_RELOAD_QUOTAS_OPERATIONS(38),
RS_LOG_ROLL(38);

CopilotAISep 3, 2025

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Both RS_RELOAD_QUOTAS_OPERATIONS and RS_LOG_ROLL have the same value (38). RS_LOG_ROLL should have value 39 to avoid conflicts.

Copilot uses AI. Check for mistakes.
@@ -2083,7 +2087,6 @@ private void initializeThreads() {

// Setup the Quota Manager
rsQuotaManager = new RegionServerRpcQuotaManager(this);

CopilotAISep 3, 2025

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The removed line configurationManager.registerObserver(rsQuotaManager); appears to be accidentally deleted. This registration is necessary for quota manager configuration updates.

Suggested change
rsQuotaManager = newRegionServerRpcQuotaManager(this);
rsQuotaManager = newRegionServerRpcQuotaManager(this);
configurationManager.registerObserver(rsQuotaManager);

Copilot uses AI. Check for mistakes.
@Apache-HBase

This comment has been minimized.

@Apache9Apache9 left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think we should implement a general LogRollProcedure, not only for the backup system. The backup system can call this procedure in its backup operation, just like what LogRollMasterProcedureManager do. And I do not think we still need to use LogRollMasterProcedureManager in the proc-v2 based procedure path?

Thanks.

@frostruan

frostruan commented Sep 5, 2025

Copy link
Copy Markdown
ContributorAuthor

Thanks for reviewing Duo.

If we want to introduce a general log roll procedure, we should implement it in the hbase-server module. It is not hard. But for log rolling in backup job, there is a little difference. As a sub-step of backup, after completing the log roll, we need to record the highest wal filenum in the backup system table. However hbase-backup is a high-level module built on hbase-server. In theory, hbase-server should not include any backup-related operations, so I am a little confused about how to do log rolling for backup.

Here are some solutions.
First, the backup client could start a general log roll. After the log roll procedure completes, the backup client retrieves the latest WAL filenum from each region server and records it in the backup system table. For the hbase-server module, RSRpcService would need to provide a method for the client to query the latest WAL filenum.

The second approach is to introduce new procedures in the hbase-backup module, such as BackupLogRollProcedure extends LogRollProcedure and BackupLogRollCallable extends LogRollCallable, and implement backup-related logic in these derived subprocedures. However, we still lack an entry point for submitting such procedures. Should we add a new Backup Service to Backup.proto? Actually I don't like this approach. This implementation is too complicated for the purpose.

How about I try the first method first?

@frostruan

Copy link
Copy Markdown
ContributorAuthor

Thanks for reviewing Duo.

If we want to introduce a general log roll procedure, we should implement it in the hbase-server module. It is not hard. But for log rolling in backup job, there is a little difference. As a sub-step of backup, after completing the log roll, we need to record the highest wal filenum in the backup system table. However hbase-backup is a high-level module built on hbase-server. In theory, hbase-server should not include any backup-related operations, so I am a little confused about how to do log rolling for backup.

Here are some solutions. First, the backup client could start a general log roll. After the log roll procedure completes, the backup client retrieves the latest WAL filenum from each region server and records it in the backup system table. For the hbase-server module, RSRpcService would need to provide a method for the client to query the latest WAL filenum.

The second approach is to introduce new procedures in the hbase-backup module, such as BackupLogRollProcedure extends LogRollProcedure and BackupLogRollCallable extends LogRollCallable, and implement backup-related logic in these derived subprocedures. However, we still lack an entry point for submitting such procedures. Should we add a new Backup Service to Backup.proto? Actually I don't like this approach. This implementation is too complicated for the purpose.

How about I try the first method first?

Hi duo , would you mind reviewing the new commit ? @Apache9

@Apache-HBase

This comment has been minimized.

@Apache9

Copy link
Copy Markdown
Contributor

Thanks for reviewing Duo.

If we want to introduce a general log roll procedure, we should implement it in the hbase-server module. It is not hard. But for log rolling in backup job, there is a little difference. As a sub-step of backup, after completing the log roll, we need to record the highest wal filenum in the backup system table. However hbase-backup is a high-level module built on hbase-server. In theory, hbase-server should not include any backup-related operations, so I am a little confused about how to do log rolling for backup.

Here are some solutions. First, the backup client could start a general log roll. After the log roll procedure completes, the backup client retrieves the latest WAL filenum from each region server and records it in the backup system table. For the hbase-server module, RSRpcService would need to provide a method for the client to query the latest WAL filenum.

The second approach is to introduce new procedures in the hbase-backup module, such as BackupLogRollProcedure extends LogRollProcedure and BackupLogRollCallable extends LogRollCallable, and implement backup-related logic in these derived subprocedures. However, we still lack an entry point for submitting such procedures. Should we add a new Backup Service to Backup.proto? Actually I don't like this approach. This implementation is too complicated for the purpose.

How about I try the first method first?

What about make the new rollAllWALWriters method returns the last wal file number? Although not commonly used, but we do have a result field in the Procedure class.

@frostruan

Copy link
Copy Markdown
ContributorAuthor

Oh, thanks for the reminder, this is indeed better. Let me address.

One more word, even we move collecting regionserver wal filenum from client to master, RSRpcService still needs to provide an interface for the master to query the latest filenum. When implementing SnapshotProcedure before, I had thought about changing the signature of RSProcedureCallable from public interface RSProcedureCallable extends Callable<Void> to public interface RSProcedureCallable<T> extends Callable<T>, where type T is the information that can be returned to the Master after RSProcedureCallable is completed. However, considering that the Void type is enough for most RSProcedureCallables, we can consider this change in a later version.

@Apache-HBase

This comment has been minimized.

@Apache9

Copy link
Copy Markdown
Contributor

Oh, thanks for the reminder, this is indeed better. Let me address.

One more word, even we move collecting regionserver wal filenum from client to master, RSRpcService still needs to provide an interface for the master to query the latest filenum. When implementing SnapshotProcedure before, I had thought about changing the signature of RSProcedureCallable from public interface RSProcedureCallable extends Callable<Void> to public interface RSProcedureCallable<T> extends Callable<T>, where type T is the information that can be returned to the Master after RSProcedureCallable is completed. However, considering that the Void type is enough for most RSProcedureCallables, we can consider this change in a later version.

We could add a field in the RemoteProcedureResult message to report the data back?

@frostruan

Copy link
Copy Markdown
ContributorAuthor

Oh, thanks for the reminder, this is indeed better. Let me address.
One more word, even we move collecting regionserver wal filenum from client to master, RSRpcService still needs to provide an interface for the master to query the latest filenum. When implementing SnapshotProcedure before, I had thought about changing the signature of RSProcedureCallable from public interface RSProcedureCallable extends Callable<Void> to public interface RSProcedureCallable<T> extends Callable<T>, where type T is the information that can be returned to the Master after RSProcedureCallable is completed. However, considering that the Void type is enough for most RSProcedureCallables, we can consider this change in a later version.

We could add a field in the RemoteProcedureResult message to report the data back?

Yes, I thought so too. if you think 3.0 needs to include this feature, I can file a new issue to address it.

@frostruan

Copy link
Copy Markdown
ContributorAuthor

Add a new commit to address comments. Let's wait for the unit tests result.

@Apache-HBase

This comment has been minimized.

@Apache-HBase

This comment has been minimized.

@Apache-HBase

This comment has been minimized.

@Apache-HBase

This comment has been minimized.

@frostruan

Copy link
Copy Markdown
ContributorAuthor

Oh, thanks for the reminder, this is indeed better. Let me address.
One more word, even we move collecting regionserver wal filenum from client to master, RSRpcService still needs to provide an interface for the master to query the latest filenum. When implementing SnapshotProcedure before, I had thought about changing the signature of RSProcedureCallable from public interface RSProcedureCallable extends Callable<Void> to public interface RSProcedureCallable<T> extends Callable<T>, where type T is the information that can be returned to the Master after RSProcedureCallable is completed. However, considering that the Void type is enough for most RSProcedureCallables, we can consider this change in a later version.

We could add a field in the RemoteProcedureResult message to report the data back?

Yes, I thought so too. if you think 3.0 needs to include this feature, I can file a new issue to address it.

Hi duo, this feature has been addressed in this PR. Would you mind taking a look ? @Apache9

@Apache9Apache9 left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Overall LGTM.

Just a concern about the protobuf defination.

And better cleanup the javac and checkstyle warnings.

Comment threadhbase-protocol-shaded/src/main/protobuf/HBase.proto
@frostruan

Copy link
Copy Markdown
ContributorAuthor

Add a new commit to fix checkstyle problem.
The code style of the checkstyle plugin conflicts with spotless, the code formatting of spotless takes precedence.
Also change NewServerWALRoller from java 17 record to static inner class to run checkstyle plugin.

@Apache-HBase

Copy link
Copy Markdown

🎊 +1 overall

VoteSubsystemRuntimeLogfileComment
+0 🆗reexec0m 32sDocker mode activated.
_ Prechecks _
+1 💚dupname0m 0sNo case conflicting files found.
+0 🆗codespell0m 0scodespell was not available.
+0 🆗detsecrets0m 0sdetect-secrets was not available.
+0 🆗buf0m 0sbuf was not available.
+0 🆗buf0m 0sbuf was not available.
+1 💚@author0m 0sThe patch does not contain any @author tags.
+1 💚hbaseanti0m 0sPatch does not have any anti-patterns.
_ master Compile Tests _
+0 🆗mvndep0m 32sMaven dependency ordering for branch
+1 💚mvninstall3m 27smaster passed
+1 💚compile7m 27smaster passed
+1 💚checkstyle2m 10smaster passed
+1 💚spotbugs7m 10smaster passed
+1 💚spotless0m 48sbranch has no errors when running spotless:check.
_ Patch Compile Tests _
+0 🆗mvndep0m 12sMaven dependency ordering for patch
+1 💚mvninstall3m 7sthe patch passed
+1 💚compile7m 23sthe patch passed
+1 💚cc7m 23sthe patch passed
+1 💚javac7m 23sthe patch passed
+1 💚blanks0m 0sThe patch has no blanks issues.
-0 ⚠️checkstyle0m 15s/results-checkstyle-hbase-client.txthbase-client: The patch generated 1 new + 3 unchanged - 0 fixed = 4 total (was 3)
-0 ⚠️rubocop0m 17s/results-rubocop.txtThe patch generated 3 new + 445 unchanged - 0 fixed = 448 total (was 445)
+1 💚spotbugs8m 3sthe patch passed
+1 💚hadoopcheck12m 3sPatch does not cause any errors with Hadoop 3.3.6 3.4.0.
+1 💚hbaseprotoc2m 53sthe patch passed
+1 💚spotless0m 44spatch has no errors when running spotless:check.
_ Other Tests _
+1 💚asflicense1m 8sThe patch does not generate ASF License warnings.
69m 1s
SubsystemReport/Notes
DockerClientAPI=1.43 ServerAPI=1.43 base: https://ci-hbase.apache.org/job/HBase-PreCommit-GitHub-PR/job/PR-5408/11/artifact/yetus-general-check/output/Dockerfile
GITHUB PR#5408
Optional Testsdupname asflicense javac spotbugs checkstyle codespell detsecrets compile hadoopcheck hbaseanti spotless cc buflint bufcompat hbaseprotoc rubocop
unameLinux 3c9273066a24 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 toolmaven
Personalitydev-support/hbase-personality.sh
git revisionmaster / 3b793ec
Default JavaEclipse Adoptium-17.0.11+9
Max. process+thread count86 (vs. ulimit of 30000)
modulesC: hbase-protocol-shaded hbase-common hbase-client hbase-procedure hbase-server hbase-thrift hbase-shell hbase-backup U: .
Console outputhttps://ci-hbase.apache.org/job/HBase-PreCommit-GitHub-PR/job/PR-5408/11/console
versionsgit=2.34.1 maven=3.9.8 spotbugs=4.7.3 rubocop=1.37.1
Powered byApache Yetus 0.15.0 https://yetus.apache.org

This message was automatically generated.

@Apache-HBase

Copy link
Copy Markdown

🎊 +1 overall

VoteSubsystemRuntimeLogfileComment
+0 🆗reexec0m 37sDocker mode activated.
-0 ⚠️yetus0m 3sUnprocessed 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 🆗mvndep0m 34sMaven dependency ordering for branch
+1 💚mvninstall3m 31smaster passed
+1 💚compile3m 29smaster passed
+1 💚javadoc2m 16smaster passed
+1 💚shadedjars6m 20sbranch has no errors when building our shaded downstream artifacts.
_ Patch Compile Tests _
+0 🆗mvndep0m 13sMaven dependency ordering for patch
+1 💚mvninstall3m 10sthe patch passed
+1 💚compile3m 29sthe patch passed
+1 💚javac3m 29sthe patch passed
+1 💚javadoc2m 15sthe patch passed
+1 💚shadedjars6m 10spatch has no errors when building our shaded downstream artifacts.
_ Other Tests _
+1 💚unit0m 33shbase-protocol-shaded in the patch passed.
+1 💚unit2m 15shbase-common in the patch passed.
+1 💚unit1m 29shbase-client in the patch passed.
+1 💚unit1m 32shbase-procedure in the patch passed.
+1 💚unit212m 30shbase-server in the patch passed.
+1 💚unit6m 43shbase-thrift in the patch passed.
+1 💚unit6m 52shbase-shell in the patch passed.
+1 💚unit11m 16shbase-backup in the patch passed.
281m 43s
SubsystemReport/Notes
DockerClientAPI=1.43 ServerAPI=1.43 base: https://ci-hbase.apache.org/job/HBase-PreCommit-GitHub-PR/job/PR-5408/11/artifact/yetus-jdk17-hadoop3-check/output/Dockerfile
GITHUB PR#5408
Optional Testsjavac javadoc unit compile shadedjars
unameLinux 2b076519e837 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 toolmaven
Personalitydev-support/hbase-personality.sh
git revisionmaster / 3b793ec
Default JavaEclipse Adoptium-17.0.11+9
Test Resultshttps://ci-hbase.apache.org/job/HBase-PreCommit-GitHub-PR/job/PR-5408/11/testReport/
Max. process+thread count4273 (vs. ulimit of 30000)
modulesC: hbase-protocol-shaded hbase-common hbase-client hbase-procedure hbase-server hbase-thrift hbase-shell hbase-backup U: .
Console outputhttps://ci-hbase.apache.org/job/HBase-PreCommit-GitHub-PR/job/PR-5408/11/console
versionsgit=2.34.1 maven=3.9.8
Powered byApache Yetus 0.15.0 https://yetus.apache.org

This message was automatically generated.

return Flow.NO_MORE_STATE;
}
} catch (Exception e) {
setFailure("log-roll", e);

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Do we want to add retry here? Anyway, can be a separated issue, since the procedure does not need any cleanup or rollback after failure.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Log roll is a pretty light-weight operation, so I think maybe it would be better to fail fast. And In LogRollCallable, we will retry, and the retry time can be set by hbase.regionserver.logroll.retries.

@Apache9
Apache9 merged commit ffed09d into apache:masterSep 12, 2025
1 check passed
Apache9 pushed a commit that referenced this pull request Sep 12, 2025
Co-authored-by: huiruan <huiruan@tencent.com>
Signed-off-by: Duo Zhang <zhangduo@apache.org>
(cherry picked from commit ffed09d)
}
}

private static void logRollV2(Connection conn, String backupRootDir) throws IOException {

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't think that this method handles cleaning up any servers that no longer exist on the cluster, which means we'll hang onto oldWALs from those hosts indefinitely due to the BackupLogCleaner

Please correct me if I'm misunderstanding, but I think we also want to make sure that we're removing entries from the system tables for hosts that are no longer part of the cluster

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Do we need something like

BackupSystemTable

publicvoiddeleteRegionServerLastLogRollResult(Stringserver, StringbackupRoot) throwsIOException {
LOG.trace("delete region server last roll log result to backup system table");
try (Tabletable = connection.getTable(tableName)) {
Deletedelete = newDelete(rowkey(RS_LOG_TS_PREFIX, backupRoot, NULL, server));
table.delete(delete);
}
}

BackupUtils

privatestaticvoidlogRollV2(Connectionconn, StringbackupRootDir) throwsIOException {
BackupSystemTablebackupSystemTable = newBackupSystemTable(conn);
HashMap<String, Long> lastLogRollResult =
backupSystemTable.readRegionServerLastLogRollResult(backupRootDir);
try (Adminadmin = conn.getAdmin()) {
Map<ServerName, Long> newLogRollResult = admin.rollAllWALWriters();
for (Map.Entry<ServerName, Long> entry : newLogRollResult.entrySet()) {
ServerNameserverName = entry.getKey();
longnewHighestWALFilenum = entry.getValue();
Stringaddress = serverName.getAddress().toString();
LonglastHighestWALFilenum = lastLogRollResult.get(address);
if (lastHighestWALFilenum != null && lastHighestWALFilenum > newHighestWALFilenum) {
LOG.warn("Won't update last roll log result for server {}: current = {}, new = {}",
serverName, lastHighestWALFilenum, newHighestWALFilenum);
} else {
backupSystemTable.writeRegionServerLastLogRollResult(address, newHighestWALFilenum,
backupRootDir);
if (LOG.isDebugEnabled()) {
LOG.debug("updated last roll log result for {} from {} to {}", serverName,
lastHighestWALFilenum, newHighestWALFilenum);
}
}
}
// New Code Herefor (Stringserver: lastLogRollResult.keySet()) {
if (!newLogRollResult.containsKey(ServerName.parseServerName(server))) {
backupSystemTable.deleteRegionServerLastLogRollResult(server, backupRootDir);
}
}
}
}

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't think that this method handles cleaning up any servers that no longer exist on the cluster, which means we'll hang onto oldWALs from those hosts indefinitely due to the BackupLogCleaner

Please correct me if I'm misunderstanding, but I think we also want to make sure that we're removing entries from the system tables for hosts that are no longer part of the cluster

Thanks for reviewing.

I think the functionality of logRollV2 should be same as logRollV1, and I don't think any additional functionality should be introduced or existing functionality should be reduced.

As for the problem of cleaning up the dead server log roll result you mentioned, I have a few questions, would you mind explaining more to help me understand ?

  1. Will keeping old WALs from dead servers indefinitely cause any problems?
  2. If clean it up, is there any chance for potential data loss?
  3. Does zk-based log roll (ie. the logRollV1) procedure need to clean it too ?

Thanks.

@hgromerhgromerSep 19, 2025

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

and I don't think any additional functionality should be introduced or existing functionality should be reduced.

I don't necessarily agree here, though I do agree v1 isn't doing this cleanup either. To clarify, this PR doesn't introduce any issues, but thanks to your changes I think we have a good way to solve the issue I've presented. This is a beta feature, and I feel that we can iterate on the behavior of the system, esepcially if it means we're improving the system's efficiency by reducing storage overhead.

  1. Yes; the oldWALs can take up a non-trivial amount of space and should be cleaned up when they are no longer necessary. We're seeing cases where we are storing terabytes of unused, deletable data, which is expensive
  2. I'd like to talk this out, and make sure my logic makes sense. There are two types of backups. For full backups, it makes sense that we don't lose any data. We roll the WAL files, and then take a snapshot of all the HFiles on the cluster, so those WAL files are backed up. For incremental backups, we roll the WAL files then backup all WAL files from [<old_start_code>, newTimestamps). For both cases, I do not think there's any possibility of a data loss. I think as long as we delete entries from the system table after the backup completes, we should be okay
  3. It'd be nice, but I think it'd be a lot harder b/c logRollV1 never updates the backup system table with the newer timestamps as far as I can tell. Given this feature is still in beta, I'm happy to move forward with the v2 functionality and mark v1 as deprecated

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for the kind reply @hgromer

After checking the code, I also feel that deleting the dead server log roll result is not likely to cause data loss, so considering that it can save a lot of unnecessary storage space, I support deleting too. If you don't mind, could you please file another issue and open a new PR to follow up on this issue? I can help review it.

Thanks.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sounds good to me, thank you. I'll create a jira and put up a PR

anmolnar added a commit that referenced this pull request Feb 10, 2026
…ch (#7706)
* HBASE-29573: Fully load QuotaCache instead of reading individual rows on demand (#7282)
Signed-off by: Ray Mattingly <rmattingly@apache.org>
* HBASE-26974 Introduce a LogRollProcedure (#5408)
Co-authored-by: huiruan <huiruan@tencent.com>
Signed-off-by: Duo Zhang <zhangduo@apache.org>
* HBASE-27355 Separate meta read requests from master and client (#7261)
Co-authored-by: huiruan <huiruan@tencent.com>
Signed-off-by: Duo Zhang <zhangduo@apache.org>
Reviewed-by: Aman Poonia <aman.poonia.29@gmail.com>
* HBASE-27157 Potential race condition in WorkerAssigner (#4577)
Close#7299
Co-authored-by: Duo Zhang <zhangduo@apache.org>
Signed-off-by: Duo Zhang <zhangduo@apache.org>
Signed-off-by: Lijin Bin <binlijin@apache.org>
* HBASE-29451 Add Docs section describing BucketCache Time based priority (#7289)
Signed-off-by: Dávid Paksy <paksyd@apache.org>
Reviewed-by: Kevin Geiszler <kevin.j.geiszler@gmail.com>
Reviewed-by: Tak Lon (Stephen) Wu <taklwu@apache.org>
* HBASE-29577 Fix NPE from RegionServerRpcQuotaManager when reloading configuration (#7285)
Signed-off-by: Wellington Chevreuil <wchevreuil@apache.org>
Signed-off-by: Charles Connell <cconnell@apache.org>
* HBASE-29590 Use hadoop 3.4.2 as default hadooop3 dependency (#7301)
Signed-off-by: Nihal Jain <nihaljain@apache.org>
Signed-off-by: Duo Zhang <zhangduo@apache.org>
* Modern backup failures can cause backup system to lock up (#7288)
Co-authored-by: Hernan Gelaf-Romer <hgelafromer@hubspot.com>
Signed-off-by: Charles Connell <cconnell@apache.org>
Signed-off-by: Ray Mattingly <rmattingly@apache.org>
* Revert "Modern backup failures can cause backup system to lock up (#7288)" (#7307)
This reverts commit c6a0c3b.
* HBASE-29448 Modern backup failures can cause backup system to lock up (#7308)
Co-authored-by: Hernan Romer <nanug33@gmail.com>
Co-authored-by: Hernan Gelaf-Romer <hgelafromer@hubspot.com>
Signed-off-by: Charles Connell <cconnell@apache.org>
Signed-off-by: Ray Mattingly <rmattingly@apache.org>
* HBASE-29548 Update ApacheDS to 2.0.0.AM27 and ldap-api to 2.1.7 (#7305)
Signed-off-by: Nihal Jain <nihaljain@apache.org>
Signed-off-by: Duo Zhang <zhangduo@apache.org>
* HBASE-29602 Add -Djava.security.manager=allow to JDK18+ surefire JVM flags (#7315)
Signed-off-by: Duo Zhang <zhangduo@apache.org>
Signed-off-by: Balazs Meszaros <meszibalu@apache.org>
* HBASE-29601 Handle Junit 5 tests in TestCheckTestClasses (#7311)
Signed-off-by: Duo Zhang <zhangduo@apache.org>
* HBASE-29592 Add hadoop 3.4.2 in client integration tests (#7306)
Signed-off-by: Nihal Jain <nihaljain@apache.org>
Signed-off-by: Duo Zhang <zhangduo@apache.org>
* HBASE-29587 Set Test category for TestSnapshotProcedureEarlyExpiration (#7292)
Signed-off-by: Dávid Paksy <paksyd@apache.org>
* HBASE-29610 Add and use String constants for Junit 5 @tag annotations (#7322)
Signed-off-by: Duo Zhang <zhangduo@apache.org>
* HBASE-29591 Add hadoop 3.4.2 in hadoop check (#7320)
Signed-off-by: Istvan Toth <stoty@apache.org>
* HBASE-29609 Upgrade checkstyle and Maven checkstyle plugin (#7321)
Signed-off-by: Istvan Toth <stoty@apache.org>
* HBASE-29608 Add test to make sure we do not have copy paste errors in the TAG value (#7324)
Signed-off-by: Istvan Toth <stoty@apache.org>
* HBASE-29608 Addendum remove jdk9+ only API calls
* Revert "HBASE-29609 Upgrade checkstyle and Maven checkstyle plugin (#7321)" (#7332)
This reverts commit 04d48ee.
* HBASE-29612 Remove HBaseTestingUtil.forceChangeTaskLogDir (#7326)
Co-authored-by: Daniel Roudnitsky <droudnitsky1@bloomberg.net>
Signed-off-by: Duo Zhang <zhangduo@apache.org>
* HBASE-29576 Replicate HBaseClassTestRule functionality for Junit 5 (#7331)
Signed-off-by: Istvan Toth <stoty@apache.org>
* HBASE-29576 Addendum fix typo Jupitor -> Jupiter
* HBASE-29619 Don't use Java 14+ style case statements in RestoreBackupSystemTableProcedure (#7336)
Signed-off-by: Dávid Paksy <paksyd@apache.org>
Signed-off-by: Duo Zhang <zhangduo@apache.org>
* HBASE-29550 Reflection error in TestRSGroupsKillRS with Java 21 (#7327)
Signed-off-by: Duo Zhang <zhangduo@apache.org>
* HBASE-29615 Update Small tests description wrt reuseForks in docs (#7335)
Signed-off-by: Duo Zhang <zhangduo@apache.org>
* HBASE-28440 Add support for using mapreduce sort in HFileOutputFormat2 (#7294)
Co-authored-by: Hernan Gelaf-Romer <hgelafromer@hubspot.com>
Signed-off-by: Ray Mattingly <rmattingly@apache.org>
* HBASE-29623 Blocks for CFs with BlockCache disabled may still get cached on write or compaction (#7339)
Signed-off-by: Peter Somogyi <psomogyi@apache.org>
* HBASE-29627 Handle any block cache fetching errors when reading a block in HFileReaderImpl (#7341)
Signed-off-by: Peter Somogyi <psomogyi@apache.org>
* HBASE-29614 Remove static final field modification in tests around Unsafe (#7337)
Signed-off-by: Peng Lu <lupeng@apache.org>
* HBASE-29504 [DOC] Document Namespace Auto-Creation During Restore (#7199)
* HBASE-29629 Record the quota user name value on metrics for RpcThrottlingExceptions (#7345)
Signed-off-by: Wellington Chevreuil <wchevreuil@apache.org>
* HBASE-29497 Mention HFiles for incremental backups (#7216)
* HBASE-29497 Mention HFiles for incremental backups
* enhance the documention change
* HBASE-29505 [DOC] Document Enhanced Options for Backup Delete Command (#7200)
* HBASE-29505 [DOC] Document Enhanced Options for Backup Delete Command
* update the doc with cautions
* HBASE-29631 Fix race condition in IncrementalTableBackupClient when HFiles are archived during backup (#7346)
Co-authored-by: Hernan Romer <nanug33@gmail.com>
Co-authored-by: skhillon <skhillon@hubspot.com>
Signed-off-by: Ray Mattingly <rmattingly@apache.org>
* HBASE-29626: Refactor server side scan metrics for Coproc hooks (#7340)
Signed-off-by: Viraj Jasani <vjasani@apache.org>
* HBASE-29152 Replace site skin with Reflow2 Maven skin (#7355)
- Replaced the Maven Fluido skin with the newer [Reflow2 Maven skin](https://devacfr.github.io/reflow-maven-skin/doc/reflow-documentation.html#doc-get-started) (Apache Phoenix project uses this). This brings newer Bootstrap (before we used 2.3.2, after 4.x - still not ideal because 5.x is the latest major version but it is an improvement).
- The new skin also brings new more modern look.
- Made sure only local resources are used by the website and the book.html - so no CDN is used - as before. We cannot load remote content as it is banned by central ASF Content Security Policy.
- Fixed our site text customization was not working in project-info-reports.properties file (fixed filename, fixed keys)
Signed-off-by: Istvan Toth <stoty@apache.org>
Signed-off-by: Nick Dimiduk <ndimiduk@apache.org>
* HBASE-29636 Implement TimedOutTestsListener for junit 5 (#7352)
Signed-off by: Chandra Sekhar K <chandrasekhar188k@gmail.com>
* HBASE-29223 Migrate Master Status Jamon page back to JSP (#6875)
The JSP code is equivalent to the Jamon code, just changed the syntax back to JSP.
Request attributes are used to transfer data between JSP pages.
Tried to preserve the code as much as possible but did some changes:
Sub-templates were usually extracted to separate JSP file (and included with `<jsp:include`), in some case it was extracted as Java method.
Extracted some sections from master page to separate JSP pages:
- Software Attributes
- Warnings
Extracted the long JavaScript from the master page which executes on page load to separate JS file.
Extracted some frequently used static methods to a new util class: `MasterStatusUtil`. Also added unit tests for the static methods in `MasterStatusUtil`. Changed the Master Status page back to `/master.jsp` again. Now made sure that `/master-status` redirects to `/master.jsp`.
Signed-off-by: Istvan Toth <stoty@apache.org>
* HBASE-29647 Restore preWALRestore and postWALRestore coprocessor hooks (#7368)
Signed-off-by: Duo Zhang <zhangduo@apache.org>
* HBASE-29637 Implement ResourceCheckerJUnitListener for junit 5 (#7366)
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Signed-off-by: Istvan Toth <stoty@apache.org>
* HBASE-29604 BackupHFileCleaner uses flawed time based check (#7360)
Adds javadoc mentioning the concurrent usage and thread-safety need of
FileCleanerDelegate#getDeletableFiles.
Fixes a potential thread-safety issue in BackupHFileCleaner: this class
tracks timestamps to block the deletion of recently loaded HFiles that
might be needed for backup purposes. The timestamps were being registered
from inside the concurrent method, which could result in recently added
files getting deleted. Moved the timestamp registration to the postClean
method, which is called only a single time per cleaner run, so recently
loaded HFiles are in fact protected from deletion.
Signed-off-by: Nick Dimiduk <ndimiduk@apache.org>
* HBASE-29650 Upgrade tomcat-jasper to 9.0.110 (#7372)
Signed-off-by: Duo Zhang <zhangduo@apache.org>
* HBASE-29653 Upgrade os-maven-plugin to 1.7.1 for RISC-V riscv64 support (#7376)
Signed-off-by: Istvan Toth <stoty@apache.org>
Signed-off-by: Duo Zhang <zhangduo@apache.org>
* HBASE-29659 Replace reflow-default-webdeps to fix site build failure (#7386)
Replace reflow-default-webdeps with separate webjar dependencies because reflow-default-webdeps causes a Maven ERROR in the build log and Yetus build considers the site build to be broken.
Turned off these features in the site skin which we don't need and would require to add more JavaScript:
- highlight.js,
- lightbox.js,
- smooth scrolling.
Improved code blocks style to look good without highlight.js.
Also extracted MathJax.js and fontawesome (needed for RefGuide) versions to Maven properties.
Signed-off-by: Nick Dimiduk <ndimiduk@apache.org>
Signed-off-by: Duo Zhang <zhangduo@apache.org>
* HBASE-29531 Migrate RegionServer Status Jamon page back to JSP (#7371)
This is the 2/3 step of the Jamon to JSP migration: the Region Server Status page.
Did the migration the same way as for the Master Status page: #6875
Migrated the Jamon code to JSP as close as possible. Extracted the duplicated `formatZKString` method to new java class: ZKStringFormatter and added unit tests.
Changed the Region Server Status page back to `/regionserver.jsp`. Made sure that `/rs-status` redirects to `/regionserver.jsp`.
Extracted the BlockCache inline CSS styles to `hbase.css` file. Also extracted the large BlockCache Hit Ratio periods paging JavaScript code to separate .js file.
Introduced a `src/main/resources/hbase-webapps/common` directory where we can place common JSP files which are used by both Master and RegionServer JSP pages. This required to adjust the JSP compiler Maven Antrun plugin a bit.
Extracted the inline tablesorter initialization JavaScript code to separate file.
Signed-off-by: Duo Zhang <zhangduo@apache.org>
* HBASE-29663 TimeBasedLimiters should support dynamic configuration refresh (#7387)
Co-authored-by: Ray Mattingly <rmattingly@hubspot.com>
Signed-off-by: Charles Connell <cconnell@apache.org>
Signed-off-by: Nick Dimiduk <ndimiduk@apache.org>
* HBASE-29609 Upgrade checkstyle and Maven checkstyle plugin to support Java 14+ syntax
Signed-off-by: Istvan Toth <stoty@apache.org>
Signed-off-by: Duo Zhang <zhangduo@apache.org>
* HBASE-29680 release-util.sh should not hardcode JAVA_HOME for spotless (#7404)
Signed-off-by: Duo Zhang <zhangduo@apache.org>
* HBASE-29677: Thread safety in QuotaRefresherChore (#7401)
Signed-off by: Ray Mattingly <rmattingly@apache.org>
* HBASE-29351 Quotas: adaptive wait intervals (#7396)
Co-authored-by: Ray Mattingly <rmattingly@hubspot.com>
Signed-off-by: Charles Connell <cconnell@apache.org>
* HBASE-29679: Suppress stack trace in RpcThrottlingException (#7403)
Signed-off by: Ray Mattingly <rmattingly@apache.org>
* HBASE-29461 Alphabetize the list of variables that can be dynamically configured (#7165)
Signed-off-by: Tak Lon (Stephen) Wu <taklwu@apache.org>
Signed-off-by: Istvan Toth <stoty@apache.org>
Reviewed by: Kota-SH <shanmukhaharipriya@gmail.com>
* HBASE-29690 Correct typo in TableReplicationQueueStorage.removeAllQueues exception message (#7420)
Co-authored-by: Daniel Roudnitsky <droudnitsky1@bloomberg.net>
Signed-off-by: Nihal Jain <nihaljain@apache.org>
Signed-off-by: Pankaj Kumar <pankajkumar@apache.org>
* HBASE-29651 Bump jruby to 9.4.14.0 to fix multiple CVEs (#7405)
This change fixes the following list of CVEs:
- **CVE-2025-43857**: Fixed in JRuby 9.4.13.0
- **CVE-2025-27219**: Fixed in JRuby 9.4.14.0
- **CVE-2025-27220**: Fixed in JRuby 9.4.14.0
Signed-off-by: Nihal Jain <nihaljain@apache.org>
Signed-off-by: Pankaj Kumar <pankajkumar@apache.org>
* HBASE-27126 Support multi-threads cleaner for MOB files (#5833)
Signed-off-by: Duo Zhang <zhangduo@apache.org>
Signed-off-by: Pankaj Kumar <pankajkumar@apache.org>
* HBASE-29662 - Avoid regionDir/tableDir creation as part of .regioninfo file creation in HRegion initialize (#7406)
Signed-off-by: Andrew Purtell <apurtell@apache.org>
Signed-off-by: Viraj Jasani <vjasani@apache.org>
* HBASE-29686 Compatible issue of HFileOutputFormat2#configureRemoteCluster (#7415)
Signed-off-by: Duo Zhang <zhangduo@apache.org>
Signed-off-by: Junegunn Choi <junegunn@apache.org>
Signed-off-by: Pankaj Kumar <pankajkumar@apache.org>
Reviewed-by: chaijunjie0101 <1340011734@qq.com>
* HBASE-29667 Correct block priority to SINGLE on the first write to the bucket cache (#7399)
Reviewed by: Kota-SH <shanmukhaharipriya@gmail.com>
Signed-off-by: Wellington Chevreuil <wchevreuil@apache.org>
* [ADDENDUM] HBASE-29223 Fix TestMasterStatusUtil (#7416)
TestMasterStatusUtil.testGetFragmentationInfoTurnedOn failed in master nightly build
Signed-off-by: Nihal Jain <nihaljain@apache.org>
Signed-off-by: Duo Zhang <zhangduo@apache.org>
* HBASE-29700 Always close RPC servers in AbstractTestIPC (#7434)
Signed-off-by: Duo Zhang <zhangduo@apache.org>
* HBASE-29703 Remove duplicate calls to withNextBlockOnDiskSize (#7440)
Signed-off-by: Wellington Chevreuil <wchevreuil@apache.org>
Signed-off-by: Duo Zhang <zhangduo@apache.org>
* HBASE-29702 Remove shade plugin from hbase-protocol-shaded (#7438)
Signed-off-by: Nihal Jain <nihaljain@apache.org>
Signed-off-by: Duo Zhang <zhangduo@apache.org>
* HBASE-28996: Implement Custom ReplicationEndpoint to Enable WAL Backup to External Storage (#6633)
* HBASE-28996: Implement Custom ReplicationEndpoint to Enable WAL Backup to External Storage
* fix spotless error
* HBASE-29025: Enhance the full backup command to support Continuous Backup (#6710)
* HBASE-29025: Enhance the full backup command to support continuous backup
* add new check for full backup command regards to continuous backup flag
* minor fixes
* HBASE-29210: Introduce Validation for PITR-Critical Backup Deletion (#6848)
Signed-off-by: Andor Molnár <andor@apache.org>
Signed-off-by: Wellington Chevreuil <wchevreuil@apache.org>
* HBASE-29261: Investigate flaw in backup deletion validation of PITR-critical backups and propose correct approach (#6922)
* improve the logic of backup deletion validation of PITR-critical backups
* add new tests
* HBASE-29133: Implement "pitr" Command for Point-in-Time Restore (#6717)
Signed-off-by: Andor Molnar <andor@apache.org>
Signed-off-by: Tak Lon (Stephen) Wu <taklwu@apache.org>
* HBASE-29255: Integrate backup WAL cleanup logic with the delete command (#7007)
* Store bulkload files in daywise bucket as well
* Integrate backup WAL cleanup logic with the delete command
* address the review comments
* address the review comments
* address the review comments
* add more unit tests to cover all cases
* address the review comments
* HBASE-28990 Modify Incremental Backup for Continuous Backup (#6788)
Signed-off-by: Tak Lon (Stephen) Wu <taklwu@apache.org>
Signed-off-by: Andor Molnár andor@apache.org
Reviewed by: Kota-SH <shanmukhaharipriya@gmail.com>
Reviewed by: Vinayak Hegde <vinayakph123@gmail.com>
Reviewed by: Kevin Geiszler <kevin.j.geiszler@gmail.com>
* HBASE-29350: Ensure Cleanup of Continuous Backup WALs After Last Backup is Force Deleted (#7090)
Signed-off-by: Tak Lon (Stephen) Wu <taklwu@apache.org> Reviewed by: Kevin Geiszler <kevin.j.geiszler@gmail.com>
* HBASE-29219 Ignore Empty WAL Files While Consuming Backed-Up WAL Files (#7106)
Signed-off-by: Tak Lon (Stephen) Wu <taklwu@apache.org>
Reviewed by: Kota-SH <shanmukhaharipriya@gmail.com>
Reviewed by: Kevin Geiszler <kevin.j.geiszler@gmail.com>
* HBASE-29406: Skip Copying Bulkloaded Files to Backup Location in Continuous Backup (#7119)
Signed-off-by: Tak Lon (Stephen) Wu <taklwu@apache.org>
Reviewed by: Kevin Geiszler <kevin.j.geiszler@gmail.com>
* HBASE-29449 Update backup describe command for continuous backup (#7045)
Signed-off-by: Tak Lon (Stephen) Wu <taklwu@apache.org>
Reviewed by: Kevin Geiszler <kevin.j.geiszler@gmail.com>
* HBASE-29445 Add Option to Specify Custom Backup Location in PITR (#7153)
Signed-off-by: Tak Lon (Stephen) Wu <taklwu@apache.org>
* HBASE-29441 ReplicationSourceShipper should delegate the empty wal entries handling to ReplicationEndpoint (#7145)
Signed-off-by: Tak Lon (Stephen) Wu <taklwu@apache.org>
* HBASE-29459 Capture bulkload files only till IncrCommittedWalTs during Incremental Backup (#7166)
Signed-off-by: Tak Lon (Stephen) Wu <taklwu@apache.org>
Reviewed by: Kevin Geiszler <kevin.j.geiszler@gmail.com>
* HBASE-29310 Handle Bulk Load Operations in Continuous Backup (#7150)
Signed-off-by: Tak Lon (Stephen) Wu <taklwu@apache.org>
Reviewed by: Kevin Geiszler <kevin.j.geiszler@gmail.com>
* HBASE-28957 spotless apply after rebase
* HBASE-29375 Add Unit Tests for BackupAdminImpl and Improve Test Granularity (#7171)
Signed-off-by: Tak Lon (Stephen) Wu <taklwu@apache.org>
Reviewed by: Kevin Geiszler <kevin.j.geiszler@gmail.com>
* HBASE-29519 Copy Bulkloaded Files in Continuous Backup (#7222)
Signed-off-by: Tak Lon (Stephen) Wu <taklwu@apache.org>
Signed-off-by: Andor Molnár <andor@apache.org>
* HBASE-29524 Handle bulk-loaded HFiles in delete and cleanup process (#7239)
Signed-off-by: Tak Lon (Stephen) Wu <taklwu@apache.org>
Reviewed by: Kota-SH <shanmukhaharipriya@gmail.com>
* [HBASE-29520] Utilize Backed-up Bulkloaded Files in Incremental Backup (#7246)
Signed-off-by: Tak Lon (Stephen) Wu <taklwu@apache.org>
* Revert "HBASE-29310 Handle Bulk Load Operations in Continuous Backup (#7150)" (#7290)
This reverts commit 5ac2a73.
* HBASE-29521: Update Restore Command to Handle Bulkloaded Files (#7300)
Signed-off-by: Tak Lon (Stephen) Wu <taklwu@apache.org>
Signed-off-by: Andor Molnár andor@apache.org
Reviewed by: Kevin Geiszler <kevin.j.geiszler@gmail.com>
Reviewed by: Kota-SH <shanmukhaharipriya@gmail.com>
* HBASE-29656 Scan WALs to identify bulkload operations for incremental backup (#7400)
* Scan WALs to identify bulkload operations for incremental backup
* Update unit test
* Info log
* Minor test fix
* Address review comments
* Spotless apply
* Addressed review comment
* spotless
* Remove log
* Retrigger CI
---------
Co-authored-by: Ankit Solomon <asolomon@cloudera.com>
* HBASE-28957. Build + spotless fix
* HBASE-29826: Backup merge is failing because .backup.manifest cannot be found (#7664)
Signed-off-by: Tak Lon (Stephen) Wu <taklwu@apache.org>
* HBASE-29825: Incremental backup is failing due to incorrect timezone (#7683)
Change-Id: I8702eca4adc81bad2c18ea4990d09556c9506a34
* HBASE-29687: Extend IntegrationTestBackupRestore to handle continuous backups (#7417)
* Extend IntegrationTestBackup restore into a base class with continuous and non-continuous subclasses
Change-Id: I0c70c417b86c7732b58642a51c75897c35b16cb6
* Add more test cases to runTestSingle for testContinuousBackupRestore
Change-Id: Id043400bf85c7b696bb94bef7cb17ed9dad13334
* Add more test cases for full continuous backup; Change while loop to a for loop
Change-Id: I5ba3276919e6bbdf343c134fa287c69f3854a8a2
* Add delete test case
Change-Id: I25fe484e9c227b7a31cb3768def3c12f66d617ac
* Start adding changes after looking at WIP PR in GitHub
Change-Id: Ie9aece8a3ec55739d618ebf2d2f173a41a116eb6
* Continue adding changes after looking at WIP PR in GitHub
Change-Id: Ie345e623089979f028b13aed13e5ec93e025eff8
* Run mvn spotless:apply
Change-Id: I98eb019dd93dfc8e21b6c730e0e2e60314102724
* Add documentation for runTestMulti and runTestSingle
Change-Id: I4de6fc485aa1ff6e0d8d837e081f8dde20bb3f67
* Update documentation
Change-Id: I911180a8f263f801a5c299d43d0215fe444f22d3
* Enhance delete test case
Change-Id: I78fe59f800cde7c89b11760a49d774c5173a862c
* Update method name to verifyBackupExistenceAfterMerge
Change-Id: Ia150d21f48bb160d9e8bcf922799dc18c0b7c77c
* Address review comments
Change-Id: I9d5b55e36b44367ac8ace08a5859c42b796fefd4
* Add wait for region servers in replication checkpoint to catch up with latest Put timestamp
Change-Id: Ic438ca292bc01827d46725e006bfa0c21bc95f01
* Handle command line arg parsing and conf setup in base class
Change-Id: I9d52e774e84dc389d42aa63315529a2590c40cb8
* Fix spotless error
Change-Id: I27eec25091842376ee7a059a9688c6f5ab385ac7
* Fix checkstyle errors for IntegrationTestBackupRestore.java
Change-Id: I18ab629df4af4e93b42ec1b0d576fd411279c775
* Remove initializeConfFromCommandLine()
Change-Id: Ibc96fd712e384cc3ca5a2c4575e47e65e62c60fa
* Change info log message to debug
Change-Id: Ie8e94ce978836b1314525138726a13641360aae6
* Run mvn spotless:apply
Change-Id: Ibeea379a65e801b60ec5124938b7aa17087025f0
* HBASE-29815: Fix issue where backup integration tests are not running in IntelliJ (#7625)
Signed-off-by: Tak Lon (Stephen) Wu <taklwu@apache.org>
---------
Signed-off-by: Duo Zhang <zhangduo@apache.org>
Signed-off-by: Lijin Bin <binlijin@apache.org>
Signed-off-by: Dávid Paksy <paksyd@apache.org>
Signed-off-by: Wellington Chevreuil <wchevreuil@apache.org>
Signed-off-by: Charles Connell <cconnell@apache.org>
Signed-off-by: Nihal Jain <nihaljain@apache.org>
Signed-off-by: Ray Mattingly <rmattingly@apache.org>
Signed-off-by: Balazs Meszaros <meszibalu@apache.org>
Signed-off-by: Istvan Toth <stoty@apache.org>
Signed-off-by: Peter Somogyi <psomogyi@apache.org>
Signed-off-by: Peng Lu <lupeng@apache.org>
Signed-off-by: Viraj Jasani <vjasani@apache.org>
Signed-off-by: Nick Dimiduk <ndimiduk@apache.org>
Signed-off-by: Tak Lon (Stephen) Wu <taklwu@apache.org>
Signed-off-by: Pankaj Kumar <pankajkumar@apache.org>
Signed-off-by: Andrew Purtell <apurtell@apache.org>
Signed-off-by: Junegunn Choi <junegunn@apache.org>
Signed-off-by: Andor Molnár <andor@apache.org>
Signed-off-by: Andor Molnar <andor@apache.org>
Signed-off-by: Andor Molnár andor@apache.org
Co-authored-by: Charles Connell <cconnell@apache.org>
Co-authored-by: Ruanhui <32773751+frostruan@users.noreply.github.com>
Co-authored-by: huiruan <huiruan@tencent.com>
Co-authored-by: Duo Zhang <zhangduo@apache.org>
Co-authored-by: Wellington Ramos Chevreuil <wchevreuil@apache.org>
Co-authored-by: Junegunn Choi <junegunn@apache.org>
Co-authored-by: Istvan Toth <stoty@apache.org>
Co-authored-by: Hernan Romer <nanug33@gmail.com>
Co-authored-by: Hernan Gelaf-Romer <hgelafromer@hubspot.com>
Co-authored-by: Ray Mattingly <rmattingly@apache.org>
Co-authored-by: Sreenivasulu <sreenivasulured2y@gmail.com>
Co-authored-by: Dávid Paksy <paksyd@apache.org>
Co-authored-by: Daniel Roudnitsky <droudnitsky1@bloomberg.net>
Co-authored-by: vinayak hegde <vinayakph123@gmail.com>
Co-authored-by: Siddharth Khillon <sidkhillon24@gmail.com>
Co-authored-by: skhillon <skhillon@hubspot.com>
Co-authored-by: sanjeet006py <36011005+sanjeet006py@users.noreply.github.com>
Co-authored-by: DieterDP <90392398+DieterDP-ng@users.noreply.github.com>
Co-authored-by: gong-flying <106514313+gong-flying@users.noreply.github.com>
Co-authored-by: Ray Mattingly <rmattingly@hubspot.com>
Co-authored-by: Andrew Purtell <apurtell@apache.org>
Co-authored-by: droudnitsky <168442446+droudnitsky@users.noreply.github.com>
Co-authored-by: xavifeds8 <65709700+xavifeds8@users.noreply.github.com>
Co-authored-by: Chandra Sekhar K <chandra@apache.org>
Co-authored-by: gvprathyusha6 <70918688+gvprathyusha6@users.noreply.github.com>
Co-authored-by: mokai <mokai87@126.com>
Co-authored-by: Huginn <63332600+Huginn-kio@users.noreply.github.com>
Co-authored-by: Liu Xiao <42756849+liuxiaocs7@users.noreply.github.com>
Co-authored-by: asolomon <ankitsolomon@gmail.com>
Co-authored-by: Andor Molnár <andor@apache.org>
Co-authored-by: Ankit Solomon <asolomon@cloudera.com>
Co-authored-by: Andor Molnar <andor@cloudera.com>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants

@frostruan@Apache-HBase@Apache9@hgromer