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