Details
-
Improvement
-
Status: Resolved
-
Major
-
Resolution: Fixed
-
None
-
None
Description
In AsyncRequestFutureImpl.receiveGlobalFailure, the meta cache is cleared twice. First the entire cache is cleared for the serverName, then each individual region's cache is further cleared. See here.
This behavior was introduced in HBASE-19900, which was a Jira more related to return value corruption rather than meta cache. I believe the change was an accident in the refactoring. Take a look at the commit here.
In the commit, the cleanServerCache call should have been wrapped in tableName == null. Then the updateCachedLocations call should have been wrapped in tableName != null. So we should only go down one path or another based on the existence of a tableName.
Full server cache clears are extremely expensive in a high concurrency client. This is especially true in AsyncProcess, where a single request might hit many servers. We should reinstate the tableName checks so that we only do one or the other.
Attachments
Issue Links
- links to