Author: mduerig
Date: Tue May 2 15:18:48 2017
New Revision: 1793527
URL: http://svn.apache.org/viewvc?rev=1793527&view=rev
Log:
OAK-5042: Improve caching of segments
Prevent invalidation to happen before loading
Modified:
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentCache.java
Modified:
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentCache.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentCache.java?rev=1793527&r1=1793526&r2=1793527&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentCache.java
(original)
+++
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentCache.java
Tue May 2 15:18:48 2017
@@ -81,6 +81,13 @@ public class SegmentCache {
}).build();
}
+ private void put(@Nonnull SegmentId id, Segment segment) {
+ // Call loaded *before* putting the segment into the cache as the
latter
+ // might cause it to get evicted right away again.
+ id.loaded(segment);
+ cache.put(id, segment);
+ }
+
/**
* Retrieve an segment from the cache or load it and cache it if not yet
in the cache.
* @param id the id of the segment
@@ -97,8 +104,7 @@ public class SegmentCache {
return segment;
}
- cache.put(id, segment);
- id.loaded(segment);
+ put(id, segment);
return segment;
} catch (Exception e) {
throw new ExecutionException(e);
@@ -115,8 +121,7 @@ public class SegmentCache {
return;
}
- cache.put(segmentId, segment);
- segmentId.loaded(segment);
+ put(segmentId, segment);
}
/**