Author: mduerig
Date: Wed Apr 20 10:03:38 2016
New Revision: 1740086

URL: http://svn.apache.org/viewvc?rev=1740086&view=rev
Log:
OAK-4054: FileStore.containsSegment returns alway true
Correctly implement said method and replace client calls with a check whether 
this store's tracker tracks the given segment

Modified:
    
jackrabbit/oak/trunk/oak-segment-next/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentStream.java
    
jackrabbit/oak/trunk/oak-segment-next/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentTracker.java
    
jackrabbit/oak/trunk/oak-segment-next/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentWriter.java
    
jackrabbit/oak/trunk/oak-segment-next/src/main/java/org/apache/jackrabbit/oak/plugins/segment/file/FileStore.java

Modified: 
jackrabbit/oak/trunk/oak-segment-next/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentStream.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-next/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentStream.java?rev=1740086&r1=1740085&r2=1740086&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-segment-next/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentStream.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-segment-next/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentStream.java
 Wed Apr 20 10:03:38 2016
@@ -42,8 +42,7 @@ public class SegmentStream extends Input
         if (stream instanceof SegmentStream) {
             SegmentStream sstream = (SegmentStream) stream;
             RecordId id = sstream.recordId;
-            if (sstream.position == 0
-                    && store.containsSegment(id.getSegmentId())) {
+            if (sstream.position == 0 && 
store.getTracker().isTracking(id.getSegmentId())) {
                 return id;
             }
         }

Modified: 
jackrabbit/oak/trunk/oak-segment-next/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentTracker.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-next/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentTracker.java?rev=1740086&r1=1740085&r2=1740086&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-segment-next/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentTracker.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-segment-next/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentTracker.java
 Wed Apr 20 10:03:38 2016
@@ -177,6 +177,10 @@ public class SegmentTracker {
         return new SegmentWriter(store, segmentVersion, wid);
     }
 
+    public boolean isTracking(SegmentId segmentId) {
+        return this == segmentId.getTracker();
+    }
+
     @Nonnull
     public CacheStats getSegmentCacheStats() {
         return new CacheStats(segmentCache, "Segment Cache", null, -1);

Modified: 
jackrabbit/oak/trunk/oak-segment-next/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentWriter.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-next/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentWriter.java?rev=1740086&r1=1740085&r2=1740086&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-segment-next/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentWriter.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-segment-next/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentWriter.java
 Wed Apr 20 10:03:38 2016
@@ -517,7 +517,7 @@ public class SegmentWriter {
 
             // write as many full bulk segments as possible
             while (pos + MAX_SEGMENT_SIZE <= data.length) {
-                SegmentId bulkId = store.getTracker().newBulkSegmentId();
+                SegmentId bulkId = getTracker().newBulkSegmentId();
                 store.writeSegment(bulkId, data, pos, MAX_SEGMENT_SIZE);
                 for (int i = 0; i < MAX_SEGMENT_SIZE; i += BLOCK_SIZE) {
                     blockIds.add(new RecordId(bulkId, i));
@@ -537,7 +537,7 @@ public class SegmentWriter {
 
         private boolean hasSegment(Blob blob) {
             return (blob instanceof SegmentBlob)
-                    && store.containsSegment(((Record) 
blob).getRecordId().getSegmentId());
+                    && (getTracker().isTracking(((Record) 
blob).getRecordId().getSegmentId()));
         }
 
         private SegmentBlob writeBlob(Blob blob) throws IOException {
@@ -633,7 +633,7 @@ public class SegmentWriter {
 
             // Write the data to bulk segments and collect the list of block 
ids
             while (n != 0) {
-                SegmentId bulkId = store.getTracker().newBulkSegmentId();
+                SegmentId bulkId = getTracker().newBulkSegmentId();
                 int len = align(n, 1 << Segment.RECORD_ALIGN_BITS);
                 LOG.debug("Writing bulk segment {} ({} bytes)", bulkId, n);
                 store.writeSegment(bulkId, data, 0, len);
@@ -873,12 +873,12 @@ public class SegmentWriter {
         }
 
         private boolean hasSegment(SegmentNodeState node) {
-            return store.containsSegment(node.getRecordId().getSegmentId());
+            return getTracker().isTracking(node.getRecordId().getSegmentId());
         }
 
         private boolean hasSegment(PropertyState property) {
             return (property instanceof SegmentPropertyState)
-                && store.containsSegment(((Record) 
property).getRecordId().getSegmentId());
+                && (getTracker().isTracking(((Record) 
property).getRecordId().getSegmentId()));
         }
 
         /**
@@ -946,7 +946,10 @@ public class SegmentWriter {
                 return true;
             }
         }
+    }
 
+    private SegmentTracker getTracker() {
+        return store.getTracker();
     }
 
 }

Modified: 
jackrabbit/oak/trunk/oak-segment-next/src/main/java/org/apache/jackrabbit/oak/plugins/segment/file/FileStore.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-next/src/main/java/org/apache/jackrabbit/oak/plugins/segment/file/FileStore.java?rev=1740086&r1=1740085&r2=1740086&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-segment-next/src/main/java/org/apache/jackrabbit/oak/plugins/segment/file/FileStore.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-segment-next/src/main/java/org/apache/jackrabbit/oak/plugins/segment/file/FileStore.java
 Wed Apr 20 10:03:38 2016
@@ -1167,10 +1167,6 @@ public class FileStore implements Segmen
 
     @Override
     public boolean containsSegment(SegmentId id) {
-        if (id.getTracker() == tracker) {
-            return true;
-        }
-
         long msb = id.getMostSignificantBits();
         long lsb = id.getLeastSignificantBits();
         return containsSegment(msb, lsb);


Reply via email to