You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@solr.apache.org by "Michael Gibney (Jira)" <ji...@apache.org> on 2024/12/18 16:46:00 UTC
[jira] [Created] (SOLR-17597) CaffeineCache ramBytes incorrect accounting on `put()`
Michael Gibney created SOLR-17597:
-------------------------------------
Summary: CaffeineCache ramBytes incorrect accounting on `put()`
Key: SOLR-17597
URL: https://issues.apache.org/jira/browse/SOLR-17597
Project: Solr
Issue Type: Bug
Affects Versions: 9.7, main (10.0)
Reporter: Michael Gibney
Assignee: Michael Gibney
In most cases, usage of {{CaffeineCache.put()}} results in incorrect ramBytes accounting. Replaced values (and keys) decrement {{ramBytes}} via {{onRemoval()}}, so replaced values currently end up double-decrementing for the replaced value in [recordRamBytes()|https://github.com/apache/solr/blob/a4229e76771da0125b38204db01ea0934e09c4f4/solr/core/src/java/org/apache/solr/search/CaffeineCache.java#L297-L301].
After a sufficient number of replacements via {{put()}}, {{ramBytes}} becomes permanently negative, and is thus useless.
The problem was masked in existing tests due to the behavior of the Caffeine library in the case of reference equality between the old (replaced) value and the new (replacement) value for the same ({{.equals()}}) key -- [the case exercised in existing tests|https://github.com/apache/solr/blob/a4229e76771da0125b38204db01ea0934e09c4f4/solr/core/src/test/org/apache/solr/search/TestCaffeineCache.java#L342-L345] -- in which case {{onRemoval()}} is _not_ invoked (so there is no double decrement).
The problem is also masked in normal usage, since existing/default cache implementations and invocation all currently use {{computeIfAbsent()}} instead of {{put()}}.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)
---------------------------------------------------------------------
To unsubscribe, e-mail: issues-unsubscribe@solr.apache.org
For additional commands, e-mail: issues-help@solr.apache.org