Apache9 commented on pull request #1593:
URL: https://github.com/apache/hbase/pull/1593#issuecomment-620328101
> I think hedging RPC support is a standard RPC layer thing (for ex grpc:
[1]). We can probably make a case to port region replica to hedging framework
in the RPC layer. Fun fact, when I first implemented this as a prototype, I had
all the logic in the master registry itself and then the review comments from
@apurtell and @saintstack were to push it into a layer below, which is RPC and
it made sense to me.
Most code of the current rpc-client and hbase-client are written by me so I
think I'm more familiar with these things in HBase. We have retries everywhere
in hbase-client, but we just use the same RpcRetryingCaller if we have the same
retrying logic, so the argument here that if we do not implement hedge read in
rpc layer then everyone needs to implement the logic by its own does not make
sense.
The problem here is the design of the client library. The ConnectionRegistry
is the root of everything, we must make it available before we actually create
the RpcClient which is used across all the client, so we can not make use of
all the RpcRetryingCallers. But this is only a problem for the Registry
implementation, not a common problem for the whole hbase client.
> "hedgingPolicy": {
"maxAttempts": 4,
"hedgingDelay": "0.5s",
"nonFatalStatusCodes": [
"UNAVAILABLE",
"INTERNAL",
"ABORTED"
]
}
Back to the feature in grpc, this is the configs for the feature. Looking at
the code in HBase, what do we do when there is an error? We just send the
request again to the same endpoint? No! Definitely not. We need to check
whether the endpoint is the correct place to go, if not, we change to another
endpoint.
----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
For queries about this service, please contact Infrastructure at:
[email protected]