You are viewing a plain text version of this content. The canonical link for it is here.
Posted to pr@cassandra.apache.org by "yifan-c (via GitHub)" <gi...@apache.org> on 2026/10/08 23:43:49 UTC

Re: [PR] CASSANDRA-21714: Fix use-after-free when Zstd dictionary compressor cache evicts concu… [cassandra]

yifan-c commented on code in PR #5206:
URL: https://github.com/apache/cassandra/pull/5206#discussion_r4225248148


##########
src/java/org/apache/cassandra/io/compress/ZstdDictionaryCompressor.java:
##########
@@ -146,6 +146,12 @@ public int uncompress(byte[] input, int inputOffset, int inputLength, byte[] out
             return super.uncompress(input, inputOffset, inputLength, output, outputOffset);
         }
 
+        // Hold our own reference for the duration of the call: the cache's dictionaryRef can be released by
+        // eviction concurrently with this call, and tidy() must not run while a context is still in use.
+        Ref<ZstdCompressionDictionary> ref = dictionary.tryRef();

Review Comment:
   I had the JFR recording from a 30 minutes run with the benchmark. 
   The loop should generate roughly 3 billion `Ref` objects. According to the JFR recording, only 1144 `PhantomReference` are found during GC, meaning almost none `PhantomReference` were still alive when a GC looked. 
   
   ```
   ❯ $JAVA_HOME/bin/jfr print --json --events jdk.GCReferenceStatistics reaper30.jfr \
     | jq '[.recording.events[].values | select(.type=="Phantom reference") | .count] | {gcs: length, total: add, max: max}'
   {
     "gcs": 4825,
     "total": 1114,
     "max": 991
   }
   ```
   
   The CPU usage from the reaper thread is negligible, close to 0. See the output below — the cpu time grows steadily, and only used `595.05 ms` out of `1807 second`, roughly 0.03% CPU. 
   ```
   ❯ $JAVA_HOME/bin/jfr print --events jdk.ThreadDump reaper30.jfr | grep -E '^"Reference-Reaper"'
   "Reference-Reaper" #52 [43291] daemon prio=5 os_prio=31 cpu=24.47ms elapsed=58.98s tid=0x0000007c926f4e10 nid=43291 waiting on condition  [0x000000016fe1a000]
   "Reference-Reaper" #52 [43291] daemon prio=5 os_prio=31 cpu=46.16ms elapsed=119.24s tid=0x0000007c926f4e10 nid=43291 waiting on condition  [0x000000016fe1a000]
   "Reference-Reaper" #52 [43291] daemon prio=5 os_prio=31 cpu=66.75ms elapsed=179.52s tid=0x0000007c926f4e10 nid=43291 waiting on condition  [0x000000016fe1a000]
   "Reference-Reaper" #52 [43291] daemon prio=5 os_prio=31 cpu=88.90ms elapsed=239.80s tid=0x0000007c926f4e10 nid=43291 waiting on condition  [0x000000016fe1a000]
   "Reference-Reaper" #52 [43291] daemon prio=5 os_prio=31 cpu=110.15ms elapsed=300.06s tid=0x0000007c926f4e10 nid=43291 waiting on condition  [0x000000016fe1a000]
   "Reference-Reaper" #52 [43291] daemon prio=5 os_prio=31 cpu=130.58ms elapsed=360.38s tid=0x0000007c926f4e10 nid=43291 waiting on condition  [0x000000016fe1a000]
   "Reference-Reaper" #52 [43291] daemon prio=5 os_prio=31 cpu=153.11ms elapsed=420.67s tid=0x0000007c926f4e10 nid=43291 waiting on condition  [0x000000016fe1a000]
   "Reference-Reaper" #52 [43291] daemon prio=5 os_prio=31 cpu=174.27ms elapsed=480.94s tid=0x0000007c926f4e10 nid=43291 waiting on condition  [0x000000016fe1a000]
   "Reference-Reaper" #52 [43291] daemon prio=5 os_prio=31 cpu=192.87ms elapsed=541.20s tid=0x0000007c926f4e10 nid=43291 waiting on condition  [0x000000016fe1a000]
   "Reference-Reaper" #52 [43291] daemon prio=5 os_prio=31 cpu=212.78ms elapsed=601.42s tid=0x0000007c926f4e10 nid=43291 waiting on condition  [0x000000016fe1a000]
   "Reference-Reaper" #52 [43291] daemon prio=5 os_prio=31 cpu=232.02ms elapsed=661.69s tid=0x0000007c926f4e10 nid=43291 waiting on condition  [0x000000016fe1a000]
   "Reference-Reaper" #52 [43291] daemon prio=5 os_prio=31 cpu=252.72ms elapsed=721.97s tid=0x0000007c926f4e10 nid=43291 waiting on condition  [0x000000016fe1a000]
   "Reference-Reaper" #52 [43291] daemon prio=5 os_prio=31 cpu=272.00ms elapsed=782.24s tid=0x0000007c926f4e10 nid=43291 waiting on condition  [0x000000016fe1a000]
   "Reference-Reaper" #52 [43291] daemon prio=5 os_prio=31 cpu=290.43ms elapsed=842.52s tid=0x0000007c926f4e10 nid=43291 waiting on condition  [0x000000016fe1a000]
   "Reference-Reaper" #52 [43291] daemon prio=5 os_prio=31 cpu=307.97ms elapsed=902.78s tid=0x0000007c926f4e10 nid=43291 waiting on condition  [0x000000016fe1a000]
   "Reference-Reaper" #52 [43291] daemon prio=5 os_prio=31 cpu=325.60ms elapsed=963.12s tid=0x0000007c926f4e10 nid=43291 waiting on condition  [0x000000016fe1a000]
   "Reference-Reaper" #52 [43291] daemon prio=5 os_prio=31 cpu=346.07ms elapsed=1023.41s tid=0x0000007c926f4e10 nid=43291 waiting on condition  [0x000000016fe1a000]
   "Reference-Reaper" #52 [43291] daemon prio=5 os_prio=31 cpu=366.70ms elapsed=1083.67s tid=0x0000007c926f4e10 nid=43291 waiting on condition  [0x000000016fe1a000]
   "Reference-Reaper" #52 [43291] daemon prio=5 os_prio=31 cpu=384.33ms elapsed=1143.93s tid=0x0000007c926f4e10 nid=43291 waiting on condition  [0x000000016fe1a000]
   "Reference-Reaper" #52 [43291] daemon prio=5 os_prio=31 cpu=404.19ms elapsed=1204.19s tid=0x0000007c926f4e10 nid=43291 waiting on condition  [0x000000016fe1a000]
   "Reference-Reaper" #52 [43291] daemon prio=5 os_prio=31 cpu=423.77ms elapsed=1264.46s tid=0x0000007c926f4e10 nid=43291 waiting on condition  [0x000000016fe1a000]
   "Reference-Reaper" #52 [43291] daemon prio=5 os_prio=31 cpu=442.15ms elapsed=1324.74s tid=0x0000007c926f4e10 nid=43291 waiting on condition  [0x000000016fe1a000]
   "Reference-Reaper" #52 [43291] daemon prio=5 os_prio=31 cpu=462.17ms elapsed=1385.01s tid=0x0000007c926f4e10 nid=43291 waiting on condition  [0x000000016fe1a000]
   "Reference-Reaper" #52 [43291] daemon prio=5 os_prio=31 cpu=481.56ms elapsed=1445.30s tid=0x0000007c926f4e10 nid=43291 waiting on condition  [0x000000016fe1a000]
   "Reference-Reaper" #52 [43291] daemon prio=5 os_prio=31 cpu=498.18ms elapsed=1505.56s tid=0x0000007c926f4e10 nid=43291 waiting on condition  [0x000000016fe1a000]
   "Reference-Reaper" #52 [43291] daemon prio=5 os_prio=31 cpu=515.78ms elapsed=1565.86s tid=0x0000007c926f4e10 nid=43291 waiting on condition  [0x000000016fe1a000]
   "Reference-Reaper" #52 [43291] daemon prio=5 os_prio=31 cpu=535.11ms elapsed=1626.20s tid=0x0000007c926f4e10 nid=43291 waiting on condition  [0x000000016fe1a000]
   "Reference-Reaper" #52 [43291] daemon prio=5 os_prio=31 cpu=553.58ms elapsed=1686.46s tid=0x0000007c926f4e10 nid=43291 waiting on condition  [0x000000016fe1a000]
   "Reference-Reaper" #52 [43291] daemon prio=5 os_prio=31 cpu=574.77ms elapsed=1746.73s tid=0x0000007c926f4e10 nid=43291 waiting on condition  [0x000000016fe1a000]
   "Reference-Reaper" #52 [43291] daemon prio=5 os_prio=31 cpu=595.04ms elapsed=1807.02s tid=0x0000007c926f4e10 nid=43291 waiting on condition  [0x000000016fe1a000]
   ```
   



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: pr-unsubscribe@cassandra.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org


---------------------------------------------------------------------
To unsubscribe, e-mail: pr-unsubscribe@cassandra.apache.org
For additional commands, e-mail: pr-help@cassandra.apache.org