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

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

> CacheAwareLoadBalancer disproportionally favouring cache ratio over skewness
> ----------------------------------------------------------------------------
>
>                 Key: HBASE-30300
>                 URL: https://issues.apache.org/jira/browse/HBASE-30300
>             Project: HBase
>          Issue Type: Bug
>            Reporter: Wellington Chevreuil
>            Assignee: Wellington Chevreuil
>            Priority: Major
>              Labels: pull-request-available
>
> There’s a problem in the current CacheAwareLoadBalancer implementation where 
> it tends to disproportionally favour moves based on cache ratio, over 
> skewness.
> This happens even when cache usage is at capacity, and moving low cached 
> regions has close to no benefits (because the moved region wouldn't be cached 
> anyways, due to no cache space available).
> Scanning the current CacheAwareLoadBalancer code with Claude Opus 4.6 
> identified the following issues behind this unexpected behaviour:
> 1 ) Generator weight mismatch in CacheAwareRegionSkewnessCostFunction and 
> CacheAwareCostFunction updateWeight(): Was writing to 
> LoadCandidateGenerator.class instead of the related implementations, causing 
> the generators to be picked randomly.
> 2) Skewness generator wasting iterations on old-server map: 
> CacheAwareSkewnessCandidateGenerator.pickRandomRegions() was draining 
> regionCacheRatioOnOldServerMap before doing skew-based moves. This could 
> worsen skew by moving regions to already-overloaded servers. 
> 3) Throttle blocking skew moves for low-cache regions: throttle() is adding 
> sleep delays for regions that had near-zero cache ratio on their source 
> server (nothing to lose by moving quickly). Could be skipped when 
> cacheRatioOnSource < lowCacheRatioThreshold.
> 4) moveRegionToOldServer() disrupting well-cached regions: if a region is 
> already well-cached where it is, don't move it back to the "old" server based 
> on potentially stale historical data.
> 5) Prefetch overhead not subtracted from reported free space: 
> getServerBlockCacheFreeBytes() doesn't take into account acceptableFactor, 
> when calculating cache space available on potential destination servers. This 
> can cause moves that would then fail to prefetch in the target server.
> 6) Cumulative free space tracking across simulated moves: during plan 
> simulation, free space tracking is not updated correctly, and the the solver 
> could stack multiple regions onto one server without realizing it was filling 
> up.
>  
>  
>  



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

Reply via email to