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
     }
 
 }