[ 
https://issues.apache.org/jira/browse/HBASE-29877?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

ASF GitHub Bot updated HBASE-29877:
-----------------------------------
    Labels: pull-request-available  (was: )

> Load Test Tool doesn't read with TIMELINE consistency, because it sets 
> replica id explicitly
> --------------------------------------------------------------------------------------------
>
>                 Key: HBASE-29877
>                 URL: https://issues.apache.org/jira/browse/HBASE-29877
>             Project: HBase
>          Issue Type: Bug
>          Components: test, util
>    Affects Versions: 2.4.18, 3.0.0-beta-1, 2.6.4
>            Reporter: Andor Molnar
>            Assignee: Andor Molnar
>            Priority: Major
>              Labels: pull-request-available
>
> HBase LTT tries to set *TIMELINE* consistency in *MultiThreadedReader* when a 
> replica id other than primary is set in the command line.
> However when _replicaId_ is set explicitly in the request, 
> *ConnectionUtil.timelineConsistentRead()* will skip sending the request to 
> multiple replicas, it actually will do a *STRONG* read on the specified 
> replica.
> In MultiThreadedReader this looks like:
> {code:java}
> if (regionReplicaId > 0) {
>   get.setReplicaId(regionReplicaId);
>   get.setConsistency(Consistency.TIMELINE);
> } {code}
> Implemented in HBASE-11572
> While in ConnectionUtil.timelineConsistentRead() I see skipping the logic:
> {code:java}
> static <T> CompletableFuture<T> timelineConsistentRead(AsyncRegionLocator 
> locator,
>   TableName tableName, Query query, byte[] row, RegionLocateType locateType,
>   Function<Integer, CompletableFuture<T>> requestReplica, long rpcTimeoutNs,
>   long primaryCallTimeoutNs, Timer retryTimer, Optional<MetricsConnection> 
> metrics) {
>   if (query.getConsistency() != Consistency.TIMELINE) {
>     return requestReplica.apply(RegionReplicaUtil.DEFAULT_REPLICA_ID);
>   }
>   // user specifies a replica id explicitly, just send request to the 
> specific replica
>   if (query.getReplicaId() >= 0) {
>     return requestReplica.apply(query.getReplicaId());
>   }
>   // Timeline consistent read, where we may send requests to other region 
> replicas
> ... {code}
> This part comes from HBASE-21663
> In order to do a full TIMELINE consistent request we need to make sure that 
> replicaId is not set (-1) in the request and consistency is set to TIMELINE.
> I suggest adding a new parameter to LTT called *--timeline* to cover all 
> possible scenarios.
>  



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to