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));