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/24 07:31:02 UTC

svn commit: r1745312 - in /jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment: SegmentId.java SegmentStore.java http/HttpStore.java

Author: mduerig
Date: Tue May 24 07:31:02 2016
New Revision: 1745312

URL: http://svn.apache.org/viewvc?rev=1745312&view=rev
Log:
OAK-4373: Refactor SegmentTracker
Correct nullability for SegmentStore.readSegment
Avoid race condition in SegmentId.getSegment potentially leading to a NPE

Modified:
    jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentId.java
    jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentStore.java
    jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/http/HttpStore.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=1745312&r1=1745311&r2=1745312&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 Tue May 24 07:31:02 2016
@@ -101,12 +101,15 @@ public class SegmentId implements Compar
      */
     @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);
-                        this.segment = store.readSegment(this);
+                        segment = store.readSegment(this);
+                        this.segment = segment;
                     } catch (SegmentNotFoundException snfe) {
                         long delta = System.currentTimeMillis() - creationTime;
                         log.error("Segment not found: {}. Creation date delta is {} ms.",

Modified: jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentStore.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentStore.java?rev=1745312&r1=1745311&r2=1745312&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentStore.java (original)
+++ jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentStore.java Tue May 24 07:31:02 2016
@@ -64,7 +64,7 @@ public interface SegmentStore {
      * @param segmentId segment identifier
      * @return identified segment, or a {@link SegmentNotFoundException} thrown if not found
      */
-    @CheckForNull
+    @Nonnull
     Segment readSegment(SegmentId segmentId);
 
     /**

Modified: jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/http/HttpStore.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/http/HttpStore.java?rev=1745312&r1=1745311&r2=1745312&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/http/HttpStore.java (original)
+++ jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/http/HttpStore.java Tue May 24 07:31:02 2016
@@ -139,6 +139,7 @@ public class HttpStore implements Segmen
     }
 
     @Override
+    @Nonnull
     public Segment readSegment(SegmentId id) {
         try {
             URLConnection connection = get(id.toString());