This is an automated email from the ASF dual-hosted git repository.

nfsantos pushed a commit to branch trunk
in repository https://gitbox.apache.org/repos/asf/jackrabbit-oak.git


The following commit(s) were added to refs/heads/trunk by this push:
     new aa2680d2d6 OAK-12047 - CachingSegmentArchiveReader#readSegment should 
check if archive contains segment before looking up in the PersistentCache 
(#2672)
aa2680d2d6 is described below

commit aa2680d2d609d779052abeb2f23b48616ad22045
Author: Nuno Santos <[email protected]>
AuthorDate: Thu Jan 15 12:48:35 2026 +0100

    OAK-12047 - CachingSegmentArchiveReader#readSegment should check if archive 
contains segment before looking up in the PersistentCache (#2672)
---
 .../persistence/persistentcache/CachingSegmentArchiveReader.java   | 6 +++++-
 .../persistentcache/CachingSegmentArchiveReaderTest.java           | 7 +++++++
 2 files changed, 12 insertions(+), 1 deletion(-)

diff --git 
a/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/spi/persistence/persistentcache/CachingSegmentArchiveReader.java
 
b/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/spi/persistence/persistentcache/CachingSegmentArchiveReader.java
index 1bca0f2f07..8ef42fbf4d 100644
--- 
a/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/spi/persistence/persistentcache/CachingSegmentArchiveReader.java
+++ 
b/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/spi/persistence/persistentcache/CachingSegmentArchiveReader.java
@@ -46,7 +46,11 @@ public class CachingSegmentArchiveReader implements 
SegmentArchiveReader {
     @Override
     @Nullable
     public Buffer readSegment(long msb, long lsb) throws IOException {
-        return persistentCache.readSegment(msb, lsb, () -> 
delegate.readSegment(msb, lsb));
+        if (delegate.containsSegment(msb, lsb)) {
+            return persistentCache.readSegment(msb, lsb, () -> 
delegate.readSegment(msb, lsb));
+        } else {
+            return null;
+        }
     }
 
     @Override
diff --git 
a/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/spi/persistence/persistentcache/CachingSegmentArchiveReaderTest.java
 
b/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/spi/persistence/persistentcache/CachingSegmentArchiveReaderTest.java
index f7286bde94..feab41110d 100644
--- 
a/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/spi/persistence/persistentcache/CachingSegmentArchiveReaderTest.java
+++ 
b/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/spi/persistence/persistentcache/CachingSegmentArchiveReaderTest.java
@@ -79,6 +79,13 @@ public class CachingSegmentArchiveReaderTest {
         SegmentArchiveReader tar2 = cachingArchiveManager.open(archive2Name);
         assertEquals(Buffer.wrap(data2), tar2.readSegment(msb2, lsb2));
 
+        // Both segments are cached
+        // Now check that each tar file only contains its own segment, that 
is, when searching for a segment that is
+        // not in the archive, it should not be retrieved from the cache
+        assertNull(tar1.readSegment(msb2, lsb2));
+        assertNull(tar2.readSegment(msb1, lsb1));
+
+        // Check that contains also respects archive boundaries
         assertTrue(tar1.containsSegment(msb1, lsb1));
         assertFalse(tar1.containsSegment(msb2, lsb2));
         assertFalse(tar2.containsSegment(msb1, lsb1));

Reply via email to