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 ju...@apache.org on 2014/02/26 21:47:06 UTC
svn commit: r1572249 - in
/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment:
AbstractStore.java ExternalBlob.java SegmentStore.java SegmentWriter.java
file/FileBlob.java file/FileStore.java
Author: jukka
Date: Wed Feb 26 20:47:06 2014
New Revision: 1572249
URL: http://svn.apache.org/r1572249
Log:
OAK-1391: Use an existing data store during migration
Drop the ExternalBlob interface in favor of Blob.getReference()
Removed:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/ExternalBlob.java
Modified:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/AbstractStore.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentStore.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentWriter.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/file/FileBlob.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/file/FileStore.java
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/AbstractStore.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/AbstractStore.java?rev=1572249&r1=1572248&r2=1572249&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/AbstractStore.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/AbstractStore.java Wed Feb 26 20:47:06 2014
@@ -23,9 +23,10 @@ import java.nio.ByteBuffer;
import java.util.Set;
import java.util.UUID;
+import javax.annotation.CheckForNull;
import javax.annotation.Nonnull;
-import javax.annotation.Nullable;
+import org.apache.jackrabbit.oak.api.Blob;
import org.apache.jackrabbit.oak.cache.CacheLIRS;
import com.google.common.cache.Cache;
@@ -173,9 +174,8 @@ public abstract class AbstractStore impl
return type.isInstance(object) && ((Record) object).getStore() == this;
}
- @Nullable
- @Override
- public ExternalBlob readBlob(String reference) {
+ @Override @CheckForNull
+ public Blob readBlob(String reference) {
return null;
}
}
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentStore.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentStore.java?rev=1572249&r1=1572248&r2=1572249&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentStore.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentStore.java Wed Feb 26 20:47:06 2014
@@ -20,6 +20,8 @@ import java.util.UUID;
import javax.annotation.CheckForNull;
+import org.apache.jackrabbit.oak.api.Blob;
+
public interface SegmentStore {
SegmentWriter getWriter();
@@ -73,5 +75,6 @@ public interface SegmentStore {
* @param reference blob reference
* @return external blob
*/
- ExternalBlob readBlob(String reference);
+ Blob readBlob(String reference);
+
}
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentWriter.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentWriter.java?rev=1572249&r1=1572248&r2=1572249&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentWriter.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentWriter.java Wed Feb 26 20:47:06 2014
@@ -669,20 +669,19 @@ public class SegmentWriter {
}
public SegmentBlob writeBlob(Blob blob) throws IOException {
- if (blob instanceof ExternalBlob) {
- return writeBlob((ExternalBlob) blob);
- } else if (store.isInstance(blob, SegmentBlob.class)) {
+ if (store.isInstance(blob, SegmentBlob.class)) {
return (SegmentBlob) blob;
} else {
- return writeStream(blob.getNewStream());
+ String reference = blob.getReference();
+ if (reference != null) {
+ RecordId id = writeValueRecord(reference, blob.length());
+ return new SegmentBlob(dummySegment, id);
+ } else {
+ return writeStream(blob.getNewStream());
+ }
}
}
- private SegmentBlob writeBlob(ExternalBlob blob) {
- RecordId id = writeValueRecord(blob.getReference(), blob.length());
- return new SegmentBlob(dummySegment, id);
- }
-
/**
* Writes a stream value record. The given stream is consumed
* <em>and closed</em> by this method.
@@ -692,17 +691,17 @@ public class SegmentWriter {
* @throws IOException if the stream could not be read
*/
public SegmentBlob writeStream(InputStream stream) throws IOException {
- RecordId id = SegmentStream.getRecordIdIfAvailable(stream, store);
- if (id == null) {
- boolean threw = true;
- try {
+ boolean threw = true;
+ try {
+ RecordId id = SegmentStream.getRecordIdIfAvailable(stream, store);
+ if (id == null) {
id = internalWriteStream(stream);
- threw = false;
- } finally {
- Closeables.close(stream, threw);
}
+ threw = false;
+ return new SegmentBlob(dummySegment, id);
+ } finally {
+ Closeables.close(stream, threw);
}
- return new SegmentBlob(dummySegment, id);
}
private RecordId internalWriteStream(InputStream stream)
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/file/FileBlob.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/file/FileBlob.java?rev=1572249&r1=1572248&r2=1572249&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/file/FileBlob.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/file/FileBlob.java Wed Feb 26 20:47:06 2014
@@ -16,15 +16,16 @@
*/
package org.apache.jackrabbit.oak.plugins.segment.file;
-import org.apache.jackrabbit.oak.plugins.segment.ExternalBlob;
+import org.apache.jackrabbit.oak.api.Blob;
import javax.annotation.Nonnull;
+
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
-public class FileBlob implements ExternalBlob {
+public class FileBlob implements Blob {
private final String path;
@@ -32,8 +33,9 @@ public class FileBlob implements Externa
this.path = path;
}
+ @Override
public String getReference() {
- return path;
+ return path; // FIXME: should be a secure reference
}
@Nonnull
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/file/FileStore.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/file/FileStore.java?rev=1572249&r1=1572248&r2=1572249&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/file/FileStore.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/file/FileStore.java Wed Feb 26 20:47:06 2014
@@ -37,8 +37,8 @@ import java.util.concurrent.atomic.Atomi
import javax.annotation.Nonnull;
+import org.apache.jackrabbit.oak.api.Blob;
import org.apache.jackrabbit.oak.plugins.segment.AbstractStore;
-import org.apache.jackrabbit.oak.plugins.segment.ExternalBlob;
import org.apache.jackrabbit.oak.plugins.segment.Journal;
import org.apache.jackrabbit.oak.plugins.segment.RecordId;
import org.apache.jackrabbit.oak.plugins.segment.Segment;
@@ -329,8 +329,8 @@ public class FileStore extends AbstractS
}
@Override
- public ExternalBlob readBlob(String reference) {
- return new FileBlob(reference);
+ public Blob readBlob(String reference) {
+ return new FileBlob(reference); // FIXME: proper reference lookup
}
}