This is an automated email from the ASF dual-hosted git repository.
andor pushed a commit to branch branch-3
in repository https://gitbox.apache.org/repos/asf/hbase.git
The following commit(s) were added to refs/heads/branch-3 by this push:
new adf986aeee7 HBASE-29877. Introduce new LTT parameter --timeline to
control timeline consistency in read operations (#7723)
adf986aeee7 is described below
commit adf986aeee7ddbf875d8b4f2f7e5820d95683ad2
Author: Andor Molnár <[email protected]>
AuthorDate: Tue Feb 10 16:26:51 2026 -0600
HBASE-29877. Introduce new LTT parameter --timeline to control timeline
consistency in read operations (#7723)
---
.../main/java/org/apache/hadoop/hbase/util/LoadTestTool.java | 12 ++++++++++++
.../org/apache/hadoop/hbase/util/MultiThreadedReader.java | 7 +++++++
2 files changed, 19 insertions(+)
diff --git
a/hbase-diagnostics/src/main/java/org/apache/hadoop/hbase/util/LoadTestTool.java
b/hbase-diagnostics/src/main/java/org/apache/hadoop/hbase/util/LoadTestTool.java
index 43b2d43118d..2b5c56d9a32 100644
---
a/hbase-diagnostics/src/main/java/org/apache/hadoop/hbase/util/LoadTestTool.java
+++
b/hbase-diagnostics/src/main/java/org/apache/hadoop/hbase/util/LoadTestTool.java
@@ -174,6 +174,10 @@ public class LoadTestTool extends AbstractHBaseTool {
protected static final String OPT_REGION_REPLICA_ID_USAGE =
"Region replica id to do the reads from";
+ public static final String OPT_TIMELINE_CONSISTENCY = "timeline";
+ protected static final String OPT_TIMELINE_CONSISTENCY_USAGE =
+ "Use TIMELINE consistency in read operations. Leave region_replica_id
unset, otherwise it will override this setting.";
+
public static final String OPT_MOB_THRESHOLD = "mob_threshold";
protected static final String OPT_MOB_THRESHOLD_USAGE =
"Desired cell size to exceed in bytes that will use the MOB write path";
@@ -229,6 +233,7 @@ public class LoadTestTool extends AbstractHBaseTool {
private int numRegionsPerServer = DEFAULT_NUM_REGIONS_PER_SERVER;
private int regionReplication = -1; // not set
private int regionReplicaId = -1; // not set
+ private boolean timelineConsistency = false;
private int mobThreshold = -1; // not set
@@ -361,6 +366,7 @@ public class LoadTestTool extends AbstractHBaseTool {
addOptWithArg(OPT_NUM_REGIONS_PER_SERVER,
OPT_NUM_REGIONS_PER_SERVER_USAGE);
addOptWithArg(OPT_REGION_REPLICATION, OPT_REGION_REPLICATION_USAGE);
addOptWithArg(OPT_REGION_REPLICA_ID, OPT_REGION_REPLICA_ID_USAGE);
+ addOptNoArg(OPT_TIMELINE_CONSISTENCY, OPT_TIMELINE_CONSISTENCY_USAGE);
addOptWithArg(OPT_MOB_THRESHOLD, OPT_MOB_THRESHOLD_USAGE);
}
@@ -520,6 +526,11 @@ public class LoadTestTool extends AbstractHBaseTool {
if (cmd.hasOption(OPT_REGION_REPLICA_ID)) {
regionReplicaId =
Integer.parseInt(cmd.getOptionValue(OPT_REGION_REPLICA_ID));
}
+
+ timelineConsistency = false;
+ if (cmd.hasOption(OPT_TIMELINE_CONSISTENCY)) {
+ timelineConsistency = true;
+ }
}
private void parseColumnFamilyOptions(CommandLine cmd) {
@@ -706,6 +717,7 @@ public class LoadTestTool extends AbstractHBaseTool {
readerThreads.setKeyWindow(keyWindow);
readerThreads.setMultiGetBatchSize(multiGetBatchSize);
readerThreads.setRegionReplicaId(regionReplicaId);
+ readerThreads.setTimelineConsistency(timelineConsistency);
}
if (isUpdate && isWrite) {
diff --git
a/hbase-diagnostics/src/main/java/org/apache/hadoop/hbase/util/MultiThreadedReader.java
b/hbase-diagnostics/src/main/java/org/apache/hadoop/hbase/util/MultiThreadedReader.java
index 6f4f47b59a6..aef4eec1b65 100644
---
a/hbase-diagnostics/src/main/java/org/apache/hadoop/hbase/util/MultiThreadedReader.java
+++
b/hbase-diagnostics/src/main/java/org/apache/hadoop/hbase/util/MultiThreadedReader.java
@@ -79,6 +79,7 @@ public class MultiThreadedReader extends MultiThreadedAction {
private int keyWindow = DEFAULT_KEY_WINDOW;
private int batchSize = DEFAULT_BATCH_SIZE;
private int regionReplicaId = -1; // particular region replica id to do
reads against if set
+ private boolean timelineConsistency = false;
public MultiThreadedReader(LoadTestDataGenerator dataGen, Configuration
conf, TableName tableName,
double verifyPercent) throws IOException {
@@ -107,6 +108,10 @@ public class MultiThreadedReader extends
MultiThreadedAction {
this.regionReplicaId = regionReplicaId;
}
+ public void setTimelineConsistency(boolean timelineConsistency) {
+ this.timelineConsistency = timelineConsistency;
+ }
+
@Override
public void start(long startKey, long endKey, int numThreads) throws
IOException {
super.start(startKey, endKey, numThreads);
@@ -321,6 +326,8 @@ public class MultiThreadedReader extends
MultiThreadedAction {
get = dataGenerator.beforeGet(keyToRead, get);
if (regionReplicaId > 0) {
get.setReplicaId(regionReplicaId);
+ }
+ if (timelineConsistency) {
get.setConsistency(Consistency.TIMELINE);
}
if (verbose) {