[ 
https://issues.apache.org/jira/browse/HBASE-18005?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16006621#comment-16006621
 ] 

Lei Chen edited comment on HBASE-18005 at 5/11/17 3:18 PM:
-----------------------------------------------------------

Thanks for the explanation and update.
Yes, there is a gap between the primary meta region and its replica, defined by 
hbase.regionserver.meta.storefile.refresh.period, plus there is no notification 
mechanism at present, setting the hbase.meta.replica.count to 2 or 3 is indeed 
not a complete solution but an improve.
Meanwhile, there is also a gap between the primary meta region and the one 
cached on the client side.
The difference between the two gaps is how the gap is closed. The first one 
refreshes with a fixed interval while the second one updates when a miss is 
encountered.
Please correct me if I'm wrong, the worst case I can imagine is 
1. The locations of a primary region p1 and its replica r1 have changed. 
2. The primary meta updates but its replica is not, due to the fixed interval
3. The region server that serves both primaries  goes down
4. A client has not updated its meta cache after p1 and r1 was relocated, and 
now makes a get request to p1

That being said, I agree with you that the cached location of the replicas is 
still worth trying, and should be pardoned from clearing the meta cache, as you 
have proposed in the patch.


was (Author: leochen4891):
Thanks for the explanation and update.
Yes, there is a gap between the primary meta region and its replica, defined by 
hbase.regionserver.meta.storefile.refresh.period, plus there is no notification 
mechanism at present, setting the hbase.meta.replica.count to 2 or 3 is indeed 
not a complete solution but an improve.
Meanwhile, there is also a gap between the primary meta region and the one 
cached on the client side.
The difference between the two gaps is how the gap is closed. The first one 
refreshes with a fixed interval while the second one updates see a miss.
Please correct me if I'm wrong, the worst case I can imagine is 
1. The locations of a primary region p1 and its replica r1 have changed. 
2. The primary meta updates but its replica is not, due to the fixed interval
3. The region server that serves both primaries  goes down
4. A client has not updated its meta cache after p1 and r1 was relocated, and 
now makes a get request to p1

That being said, I agree with you that the cached location of the replicas is 
still worth trying, and should be pardoned from clearing the meta cache, as you 
have proposed in the patch.

> read replica: handle the case that region server hosting both primary replica 
> and meta region is down
> -----------------------------------------------------------------------------------------------------
>
>                 Key: HBASE-18005
>                 URL: https://issues.apache.org/jira/browse/HBASE-18005
>             Project: HBase
>          Issue Type: Bug
>            Reporter: huaxiang sun
>            Assignee: huaxiang sun
>         Attachments: HBASE-18005-master-001.patch
>
>
> Identified one corner case in testing  that when the region server hosting 
> both primary replica and the meta region is down, the client tries to reload 
> the primary replica location from meta table, it is supposed to clean up only 
> the cached location for specific replicaId, but it clears caches for all 
> replicas. Please see
> https://github.com/apache/hbase/blob/master/hbase-client/src/main/java/org/apache/hadoop/hbase/client/ConnectionImplementation.java#L813
> Since it takes some time for regions to be reassigned (including meta 
> region), the following may throw exception
> https://github.com/apache/hbase/blob/master/hbase-client/src/main/java/org/apache/hadoop/hbase/client/RpcRetryingCallerWithReadReplicas.java#L173
> This exception needs to be caught and  it needs to get cached location (in 
> this case, the primary replica's location is not available). If there are 
> cached locations for other replicas, it can still go ahead to get stale 
> values from secondary replicas.
> With meta replica, it still helps to not clean up the caches for all replicas 
> as the info from primary meta replica is up-to-date.



--
This message was sent by Atlassian JIRA
(v6.3.15#6346)

Reply via email to