You are viewing a plain text version of this content. The canonical link for it is here.
Posted to oak-commits@jackrabbit.apache.org by md...@apache.org on 2016/05/23 15:47:26 UTC
svn commit: r1745222 -
/jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentId.java
Author: mduerig
Date: Mon May 23 15:47:25 2016
New Revision: 1745222
URL: http://svn.apache.org/viewvc?rev=1745222&view=rev
Log:
OAK-4373: Refactor SegmentTracker
- Javadoc for SegmentId
- Fix memoisation in getSegment
Modified:
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentId.java
Modified: jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentId.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentId.java?rev=1745222&r1=1745221&r2=1745222&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentId.java (original)
+++ jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentId.java Mon May 23 15:47:25 2016
@@ -92,15 +92,21 @@ public class SegmentId implements Compar
return lsb;
}
+ /**
+ * Get the segment identified by this instance. The segment is memoised in this instance's
+ * {@link #segment} field.
+ * @return the segment identified by this instance.
+ * @see #loaded(Segment)
+ * @see #unloaded()
+ */
+ @Nonnull
public Segment getSegment() {
- Segment segment = this.segment;
if (segment == null) {
synchronized (this) {
- segment = this.segment;
if (segment == null) {
try {
log.debug("Loading segment {}", this);
- segment = store.readSegment(this);
+ this.segment = store.readSegment(this);
} catch (SegmentNotFoundException snfe) {
long delta = System.currentTimeMillis() - creationTime;
log.error("Segment not found: {}. Creation date delta is {} ms.",
@@ -113,14 +119,32 @@ public class SegmentId implements Compar
return segment;
}
+ /**
+ * This method should only be called from lower level caches to notify this instance that the
+ * passed {@code segment} has been loaded and should be memoised.
+ * @param segment segment with this id. If the id doesn't match the behaviour is undefined.
+ * @see #getSegment()
+ * @see #unloaded()
+ */
void loaded(@Nonnull Segment segment) {
this.segment = segment;
}
+ /**
+ * This method should only be called from lower level caches to notify this instance that the
+ * passed {@code segment} has been unloaded and should no longer be memoised.
+ * @see #getSegment()
+ * @see #loaded(Segment)
+ */
void unloaded() {
this.segment = null;
}
+ /**
+ * Determine whether this instance belongs to the passed {@code store}
+ * @param store
+ * @return {@code true} iff this instance belongs to {@code store}
+ */
public boolean sameStore(@Nonnull SegmentStore store) {
return this.store == store;
}