Daniel Roudnitsky created HBASE-28730:
-----------------------------------------
Summary: Locating region can exceed client operation timeout
Key: HBASE-28730
URL: https://issues.apache.org/jira/browse/HBASE-28730
Project: HBase
Issue Type: Improvement
Components: Client
Affects Versions: 2.5.9, 2.4.18, 2.6.0, 2.3.7
Reporter: Daniel Roudnitsky
Assignee: Daniel Roudnitsky
I'll be referring to hbase.client.operation.timeout as 'operation timeout' and
hbase.client.meta.operation.timeout as 'meta timeout'.
In the branch-2 client there is a userRegionLock that a thread needs to acquire
to run a meta scan to locate a region. userRegionLock acquisition time is
bounded by the meta timeout (HBASE-24956) and once the lock is acquired the
meta scan time is bounded by hbase.client.meta.scanner.timeout.period
(HBASE-27078). The following describes two cases where resolving the region
location for an operation can exceed the end to end operation timeout when
there is contention around userRegionLock and/or meta slowness (high contention
could result from meta slowness/hotspotting , and is more likely in a high
concurrency environment where lots of batch operations are being executed):
# In locateRegionInMeta , if the relevant region location is not cached,
userRegion lock acquisition and meta scan (if userRegionLock is able to be
acquired within the lock timeout) [may be retried up to
hbase.client.retries.number times|#L1012]. Operation timeout check is not done
in between retries, so even if one has meta timeout + meta scanner timeout <
operation timeout, retries could take the client beyond the operation timeout
before we exit out of locateRegionInMeta and an operation timeout check is done
if (meta operation timeout + meta scanner timeout) * region lookup attempts >
operation timeout.
Suppose we have operation timeout = meta timeout = 10sec and client retries =
2, and there is enough contention/meta slowness that userRegionLock cannot be
acquired for 1min, and we have a new thread running an operation that needs to
do a region lookup. For this operation, locateRegionInMeta will try to acquire
the userRegionLock 3 times , taking 3 * 10sec + some pause time in between
retries before we exit out of locateRegionInMeta and the operation times out
after >3x the configured 10sec operation/meta timeout.
# Without any retries, if one has (hbase.client.meta.operation.timeout ||
hbase.client.meta.scanner.timeout.period) > hbase.client.operation.timeout
(meta operation timeout default makes this easily possible - HBASE-28608) the
client operation timeout could be exceeded.
+Proposal+
I propose two changes:
# Doing an operation timeout check in between retrying userRegion lock
acquisition + meta scan (perhaps moving the retry logic + loop outside of the
locateRegionInMeta method?)
# Change userRegionLock timeout and meta scanner timeout to a dynamic values
that depend on the time remaining for the end to end operation. userRegionLock
acquisition and meta scan time are bounded by static values regardless of how
much time was already spent trying to do region location lookups or how much
time might be remaining to run the actual operations once all required region
locations are found.
If we were to use time remaining for the operation for the lock timeout, and
then set the meta scanner timeout to
min(hbase.client.meta.scanner.timeout.period, operation time remaining after
userRegionLock acquisition), that would provide a good upper bound on time
spent attempting to locate a region that should keep the operation closely
within the desired end to end timeout.
Dynamic userRegionLock and meta scanner timeouts would also remove some
complexity/dependence on client configurations in the locate region codepath
which should simplify the thought process behind choosing appropriate client
timeouts.
----
Branch-2 blocking client is effected, I am not yet sure and have not tested how
branch-2 AsyncTable is effected. Branch-3+ does not have userRegionLock, and
the sync client connection implementation is very
[different|https://github.com/apache/hbase/pull/6000#issuecomment-2210913557]
(thank you Duo for explaining).
This issue extends/develops on what was originally reported in the bottom of
HBASE-28358. HBASE-27490 is related work which greatly improved the upper bound
on region location resolution time for batch operations.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)