[
https://issues.apache.org/jira/browse/HBASE-30394?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=18116063#comment-18116063
]
huginn commented on HBASE-30394:
--------------------------------
PR: https://github.com/apache/hbase/pull/8666
> Report data block size and count separately in TinyLfuBlockCache
> ----------------------------------------------------------------
>
> Key: HBASE-30394
> URL: https://issues.apache.org/jira/browse/HBASE-30394
> Project: HBase
> Issue Type: Bug
> Components: BlockCache
> Affects Versions: 2.4.11
> Reporter: huginn
> Priority: Major
> Labels: pull-request-available
>
> ## What happens
> TinyLfuBlockCache reports aggregate cache size and block count through
> getCurrentDataSize() and getDataBlockCount(), even though these APIs are
> intended to report data-block-only statistics. As a result, data-block
> metrics are indistinguishable from aggregate cache metrics when index or
> metadata blocks are cached.
> ## When it happens
> This occurs when TinyLfuBlockCache is used and the cache contains a mixture
> of data, index, or metadata blocks. The current implementation derives both
> values from the aggregate Caffeine cache size and entry count.
> ## Impact
> Operators and monitoring cannot accurately determine the amount and number of
> data blocks held by TinyLfuBlockCache, which can make cache composition and
> capacity analysis misleading.
> ## Root cause
> On master, TinyLfuBlockCache.getCurrentDataSize() returns getCurrentSize()
> and getDataBlockCount() returns getBlockCount(). The insertion and eviction
> paths do not maintain separate data-block counters, so the implementation
> cannot satisfy the data-block-specific BlockCache contract.
> <!-- File:
> hbase-server/src/main/java/org/apache/hadoop/hbase/io/hfile/TinyLfuBlockCache.java,
> upstream master -->
> <!-- Lines: 185-197, 226-232, 296-317, 412-419 -->
> ## Proposed fix
> Maintain the current data-block size and count while blocks are inserted and
> removed. Update the counters only for blocks whose BlockType is data, and
> return those counters from getCurrentDataSize() and getDataBlockCount().
> ## Reproduction
> Testing evidence will be added by the reporter.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)