Author: mreutegg
Date: Wed Feb 28 17:08:35 2018
New Revision: 1825587

URL: http://svn.apache.org/viewvc?rev=1825587&view=rev
Log:
OAK-7216: Remove support for binaries and documents in persistent cache

Modified:
    
jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/DocumentNodeStoreBuilder.java
    
jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/DocumentNodeStoreService.java
    
jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/persistentCache/BlobCache.java
    
jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/persistentCache/CacheType.java
    
jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/persistentCache/PersistentCache.java
    
jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/persistentCache/CacheTest.java

Modified: 
jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/DocumentNodeStoreBuilder.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/DocumentNodeStoreBuilder.java?rev=1825587&r1=1825586&r2=1825587&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/DocumentNodeStoreBuilder.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/DocumentNodeStoreBuilder.java
 Wed Feb 28 17:08:35 2018
@@ -718,10 +718,6 @@ public class DocumentNodeStoreBuilder<T
 
     protected void setGCBlobStore(GarbageCollectableBlobStore s) {
         configureBlobStore(s);
-        PersistentCache p = getPersistentCache();
-        if (p != null) {
-            s = p.wrapBlobStore(s);
-        }
         this.blobStore = s;
     }
 

Modified: 
jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/DocumentNodeStoreService.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/DocumentNodeStoreService.java?rev=1825587&r1=1825586&r2=1825587&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/DocumentNodeStoreService.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/DocumentNodeStoreService.java
 Wed Feb 28 17:08:35 2018
@@ -136,7 +136,7 @@ public class DocumentNodeStoreService {
     static final int DEFAULT_BLOB_CACHE_SIZE = 16;
     static final String DEFAULT_DB = "oak";
     static final boolean DEFAULT_SO_KEEP_ALIVE = false;
-    static final String DEFAULT_PERSISTENT_CACHE = "cache,binary=0";
+    static final String DEFAULT_PERSISTENT_CACHE = "cache";
     static final String DEFAULT_JOURNAL_CACHE = "diff-cache";
     static final boolean DEFAULT_CUSTOM_BLOB_STORE = false;
     public static final String CONTINUOUS_RGC_EXPR = "*/5 * * * * ?";

Modified: 
jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/persistentCache/BlobCache.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/persistentCache/BlobCache.java?rev=1825587&r1=1825586&r2=1825587&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/persistentCache/BlobCache.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/persistentCache/BlobCache.java
 Wed Feb 28 17:08:35 2018
@@ -1,236 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.oak.plugins.document.persistentCache;
-
-import java.io.Closeable;
-import java.io.IOException;
-import java.io.InputStream;
-import java.nio.ByteBuffer;
-import java.util.Iterator;
-import java.util.List;
-
-import javax.annotation.CheckForNull;
-import javax.annotation.Nonnull;
-
-import 
org.apache.jackrabbit.oak.plugins.document.persistentCache.PersistentCache.GenerationCache;
-import org.apache.jackrabbit.oak.spi.blob.BlobOptions;
-import org.apache.jackrabbit.oak.spi.blob.GarbageCollectableBlobStore;
-import org.h2.mvstore.MVMap;
-import org.h2.mvstore.StreamStore;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-/**
- * A persistent blob cache. Only blobs that are smaller than 10% of the maximum
- * cache size are stored.
- */
-public class BlobCache implements GarbageCollectableBlobStore, 
GenerationCache, Closeable {
-
-    static final Logger LOG = LoggerFactory.getLogger(BlobCache.class);
-
-    private final GarbageCollectableBlobStore base;
-    private final PersistentCache cache;
-    private final MultiGenerationMap<String, byte[]> meta;
-    private MultiGenerationMap<Long, byte[]> data;
-    private StreamStore streamStore;
-    private long maxEntrySize;
-    
-    public BlobCache(
-            PersistentCache cache, 
-            GarbageCollectableBlobStore base) {
-        this.cache = cache;
-        this.base = base;
-        data = new MultiGenerationMap<Long, byte[]>();
-        meta = new MultiGenerationMap<String, byte[]>();
-        maxEntrySize = cache.getMaxBinaryEntrySize();
-    }
-    
-    @Override
-    public CacheType getType() {
-        return CacheType.BLOB;
-    }
-    
-    @Override
-    public void addGeneration(int generation, boolean readOnly) {
-        CacheMap<Long, byte[]> d = cache.openMap(generation, "data", 
-                new MVMap.Builder<Long, byte[]>());
-        data.addReadMap(generation, d);
-        CacheMap<String, byte[]> m = cache.openMap(generation, "meta", 
-                new MVMap.Builder<String, byte[]>());
-        meta.addReadMap(generation, m);
-        if (!readOnly) {
-            // the order is important:
-            // if we switch the data first,
-            // we could end up with the data in store 1
-            // but the metadata in store 2 - which could
-            // result in a data block not found if store 1
-            // is removed later on
-            meta.setWriteMap(m);
-            data.setWriteMap(d);
-        }
-        if (streamStore == null) {
-            streamStore = new StreamStore(data);
-        }
-    }    
-    
-    @Override
-    public void removeGeneration(int generation) {
-        data.removeReadMap(generation);
-        meta.removeReadMap(generation);
-    }
-    
-    @Override
-    public InputStream getInputStream(String blobId) throws IOException {
-        if (streamStore == null) {
-            return base.getInputStream(blobId);
-        }
-        cache.switchGenerationIfNeeded();
-        byte[] id = meta.get(blobId);
-        if (id == null) {
-            long length = base.getBlobLength(blobId);
-            InputStream in = base.getInputStream(blobId);
-            if (length < base.getBlockSizeMin()) {
-                // in-place
-                return in;
-            }
-            if (length > maxEntrySize) {
-                // too large, don't cache
-                return in;
-            }
-            id = streamStore.put(in);
-            in.close();
-            meta.put(blobId, id);
-        }
-        return streamStore.get(id);
-    }
-
-    @Override
-    public String writeBlob(InputStream in) throws IOException {
-        // TODO maybe copy the binary to the cache in a background thread
-        return base.writeBlob(in);
-    }
-
-    /**
-     * Ignores the options provided and delegates to {@link 
#writeBlob(InputStream)}.
-     *
-     * @param in the input stream to write
-     * @param options the options to use
-     * @return
-     * @throws IOException
-     */
-    @Override
-    public String writeBlob(InputStream in, BlobOptions options) throws 
IOException {
-        return writeBlob(in);
-    }
-
-    @Override
-    public int readBlob(String blobId, long pos, byte[] buff, int off,
-            int length) throws IOException {
-        InputStream in = getInputStream(blobId);
-        long remainingSkip = pos;
-        while (remainingSkip > 0) {
-            remainingSkip -= in.skip(remainingSkip);
-        }
-        return in.read(buff, off, length);
-    }
-
-    @Override
-    public long getBlobLength(String blobId) throws IOException {
-        return base.getBlobLength(blobId);
-    }
-
-    @Override
-    @CheckForNull
-    public String getBlobId(@Nonnull String reference) {
-        return base.getBlobId(reference);
-    }
-
-    @Override
-    @CheckForNull
-    public String getReference(@Nonnull String blobId) {
-        return base.getReference(blobId);
-    }
-
-    @Override
-    public void clearCache() {
-        base.clearCache();
-    }
-
-    @Override
-    public void clearInUse() {
-        base.clearInUse();
-    }
-
-    @Override
-    @Deprecated
-    public boolean deleteChunks(List<String> chunkIds, long 
maxLastModifiedTime) throws Exception {
-        return base.deleteChunks(chunkIds, maxLastModifiedTime);
-    }
-
-    @Override
-    public long countDeleteChunks(List<String> chunkIds, long 
maxLastModifiedTime) throws Exception {
-        return base.countDeleteChunks(chunkIds, maxLastModifiedTime);
-    }
-    
-    @Override
-    public Iterator<String> getAllChunkIds(long maxLastModifiedTime) throws 
Exception {
-        return base.getAllChunkIds(maxLastModifiedTime);
-    }
-
-    @Override
-    public long getBlockSizeMin() {
-        return base.getBlockSizeMin();
-    }
-
-    @Override
-    public Iterator<String> resolveChunks(String blobId) throws IOException {
-        return base.resolveChunks(blobId);
-    }
-
-    @Override
-    public void setBlockSize(int x) {
-        base.setBlockSize(x);
-    }
-
-    @Override
-    public void startMark() throws IOException {
-        base.startMark();
-    }
-
-    @Override
-    public int sweep() throws IOException {
-        return base.sweep();
-    }
-
-    @Override
-    public String writeBlob(String tempFileName) throws IOException {
-        return base.writeBlob(tempFileName);
-    }
-
-    @Override
-    public void receive(ByteBuffer buff) {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public void close() throws IOException {
-        if (base instanceof Closeable) {
-            ((Closeable)base).close();
-        }
-    }
-    
-}

Modified: 
jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/persistentCache/CacheType.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/persistentCache/CacheType.java?rev=1825587&r1=1825586&r2=1825587&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/persistentCache/CacheType.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/persistentCache/CacheType.java
 Wed Feb 28 17:08:35 2018
@@ -126,63 +126,31 @@ public enum CacheType {
         }
     },
 
-    DOC_CHILDREN {
-        @Override
-        public <K> String keyToString(K key) {
-            return ((StringValue) key).asString();
-        }
-        @SuppressWarnings("unchecked")
-        @Override
-        public <K> K keyFromString(String key) {
-            return (K) StringValue.fromString(key);
-        }
-        @Override
-        public <K> int compareKeys(K a, K b) {
-            return ((StringValue) a).asString().compareTo(((StringValue) 
b).asString());
-        }            
-        @Override
-        public <V> String valueToString(V value) {
-            return ((NodeDocument.Children) value).asString();
-        }
-        @SuppressWarnings("unchecked")
-        @Override
-        public <V> V valueFromString(
-                DocumentNodeStore store, DocumentStore docStore, String value) 
{
-            return (V) NodeDocument.Children.fromString(value);
-        }
-        @Override
-        public <K> boolean shouldCache(DocumentNodeStore store, K key) {
-            return true;
-        }
-    }, 
-    
     DOCUMENT {
         @Override
         public <K> String keyToString(K key) {
-            return ((StringValue) key).asString();
+            throw new UnsupportedOperationException();
         }
-        @SuppressWarnings("unchecked")
         @Override
         public <K> K keyFromString(String key) {
-            return (K) StringValue.fromString(key);
+            throw new UnsupportedOperationException();
         }
         @Override
         public <K> int compareKeys(K a, K b) {
-            return ((StringValue) a).asString().compareTo(((StringValue) 
b).asString());
+            throw new UnsupportedOperationException();
         }            
         @Override
         public <V> String valueToString(V value) {
-            return ((NodeDocument) value).asString();
+            throw new UnsupportedOperationException();
         }
-        @SuppressWarnings("unchecked")
         @Override
         public <V> V valueFromString(
                 DocumentNodeStore store, DocumentStore docStore, String value) 
{
-            return (V) NodeDocument.fromString(docStore, value);
+            throw new UnsupportedOperationException();
         }
         @Override
         public <K> boolean shouldCache(DocumentNodeStore store, K key) {
-            return true;
+            return false;
         }
     },
 
@@ -244,40 +212,6 @@ public enum CacheType {
         public <K> boolean shouldCache(DocumentNodeStore store, K key) {
             return true;
         }
-    },
-    
-    BLOB {
-
-        @Override
-        public <K> String keyToString(K key) {
-            throw new UnsupportedOperationException();
-        }
-
-        @Override
-        public <K> K keyFromString(String key) {
-            throw new UnsupportedOperationException();
-        }
-
-        @Override
-        public <K> int compareKeys(K a, K b) {
-            throw new UnsupportedOperationException();
-        }
-
-        @Override
-        public <V> String valueToString(V value) {
-            throw new UnsupportedOperationException();
-        }
-
-        @Override
-        public <V> V valueFromString(DocumentNodeStore store,
-                DocumentStore docStore, String value) {
-            throw new UnsupportedOperationException();
-        }
-        @Override
-        public <K> boolean shouldCache(DocumentNodeStore store, K key) {
-            return true;
-        }
-        
     };
     
     public static final CacheType[] VALUES = CacheType.values();

Modified: 
jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/persistentCache/PersistentCache.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/persistentCache/PersistentCache.java?rev=1825587&r1=1825586&r2=1825587&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/persistentCache/PersistentCache.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/persistentCache/PersistentCache.java
 Wed Feb 28 17:08:35 2018
@@ -33,7 +33,6 @@ import org.apache.jackrabbit.oak.plugins
 import 
org.apache.jackrabbit.oak.plugins.document.persistentCache.broadcast.InMemoryBroadcaster;
 import 
org.apache.jackrabbit.oak.plugins.document.persistentCache.broadcast.TCPBroadcaster;
 import 
org.apache.jackrabbit.oak.plugins.document.persistentCache.broadcast.UDPBroadcaster;
-import org.apache.jackrabbit.oak.spi.blob.GarbageCollectableBlobStore;
 import org.apache.jackrabbit.oak.stats.StatisticsProvider;
 import org.h2.mvstore.FileStore;
 import org.h2.mvstore.MVMap;
@@ -63,8 +62,6 @@ public class PersistentCache implements
     private boolean cacheDiff = true;
     private boolean cacheLocalDiff = true;
     private boolean cachePrevDocs = true;
-    private boolean cacheDocs;
-    private boolean cacheDocChildren;
     private boolean compactOnClose;
     private boolean compress = true;
     private boolean asyncCache = true;
@@ -79,7 +76,6 @@ public class PersistentCache implements
     private int memCache = -1;
     private int readGeneration = -1;
     private int writeGeneration;
-    private long maxBinaryEntry = 1024 * 1024;
     private int autoCompact = 0;
     private boolean appendOnly;
     private boolean manualCommit;
@@ -107,15 +103,11 @@ public class PersistentCache implements
         String broadcast = "disabled";
         for (String p : parts) {
             if (p.equals("+docs")) {
-                // enabling this can lead to consistency problems,
-                // specially if multiple cluster nodes are used
-                cacheDocs = true;
+                logUnsupportedWarning("docs");
             } else if (p.equals("-prevDocs")) {
                 cachePrevDocs = false;
             } else if (p.equals("+docChildren")) {
-                // enabling this can lead to consistency problems,
-                // specially if multiple cluster nodes are used
-                cacheDocChildren = true;
+                logUnsupportedWarning("docChildren");
             } else if (p.equals("-nodes")) {
                 cacheNodes = false;
             } else if (p.equals("-children")) {
@@ -125,8 +117,7 @@ public class PersistentCache implements
             } else if (p.equals("-localDiff")) {
                 cacheLocalDiff = false;
             } else if (p.equals("+all")) {
-                cacheDocs = true;
-                cacheDocChildren = true;
+                logUnsupportedWarning("all");
             } else if (p.equals("-compact")) {
                 compactOnClose = false;
             } else if (p.equals("+compact")) {
@@ -140,7 +131,7 @@ public class PersistentCache implements
             } else if (p.startsWith("memCache=")) {
                 memCache = Integer.parseInt(p.split("=")[1]);
             } else if (p.startsWith("binary=")) {
-                maxBinaryEntry = Long.parseLong(p.split("=")[1]);
+                logUnsupportedWarning("binary");
             } else if (p.startsWith("autoCompact=")) {
                 autoCompact = Integer.parseInt(p.split("=")[1]);
             } else if (p.equals("appendOnly")) {
@@ -215,6 +206,11 @@ public class PersistentCache implements
         writeDispatcherThread.setDaemon(true);
         writeDispatcherThread.start();
     }
+
+    private void logUnsupportedWarning(String configKey) {
+        LOG.warn("Support for '{}' has been removed from persistent cache. " +
+                "Please update the configuration.", configKey);
+    }
     
     private void initBroadcast(String broadcast) {
         if (broadcast == null) {
@@ -384,16 +380,6 @@ public class PersistentCache implements
         writeBuffer.remove();
     }
     
-    public synchronized GarbageCollectableBlobStore wrapBlobStore(
-            GarbageCollectableBlobStore base) {
-        if (maxBinaryEntry == 0) {
-            return base;
-        }
-        BlobCache c = new BlobCache(this, base);
-        initGenerationCache(c);
-        return c;
-    }
-    
     public synchronized <K, V> Cache<K, V> wrap(
             DocumentNodeStore docNodeStore, 
             DocumentStore docStore,
@@ -423,12 +409,6 @@ public class PersistentCache implements
             wrap = cacheLocalDiff;
             async = asyncDiffCache;
             break;
-        case DOC_CHILDREN:
-            wrap = cacheDocChildren;
-            break;
-        case DOCUMENT:
-            wrap = cacheDocs;
-            break;
         case PREV_DOCUMENT:
             wrap = cachePrevDocs;
             break;
@@ -510,10 +490,6 @@ public class PersistentCache implements
         return maxSizeMB;
     }
     
-    public long getMaxBinaryEntrySize() {
-        return maxBinaryEntry;
-    }
-    
     public int getOpenCount() {
         return writeStore.getOpenCount();
     }

Modified: 
jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/persistentCache/CacheTest.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/persistentCache/CacheTest.java?rev=1825587&r1=1825586&r2=1825587&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/persistentCache/CacheTest.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/persistentCache/CacheTest.java
 Wed Feb 28 17:08:35 2018
@@ -22,10 +22,8 @@ import static org.junit.Assert.assertEqu
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertTrue;
 
-import java.io.ByteArrayInputStream;
 import java.io.File;
 import java.io.FileOutputStream;
-import java.util.Random;
 
 import com.google.common.cache.Cache;
 import org.apache.commons.io.FileUtils;
@@ -34,8 +32,6 @@ import org.apache.jackrabbit.oak.plugins
 import org.apache.jackrabbit.oak.plugins.document.Revision;
 import org.apache.jackrabbit.oak.plugins.document.RevisionVector;
 import org.apache.jackrabbit.oak.plugins.document.util.StringValue;
-import org.apache.jackrabbit.oak.spi.blob.BlobStore;
-import org.apache.jackrabbit.oak.spi.blob.MemoryBlobStore;
 import org.junit.Test;
 
 public class CacheTest {
@@ -96,26 +92,6 @@ public class CacheTest {
     }
 
     @Test
-    public void test() throws Exception {
-        FileUtils.deleteDirectory(new File("target/cacheTest"));
-        PersistentCache cache = new 
PersistentCache("target/cacheTest,size=1,-compress");
-        try {
-            MemoryBlobStore mem = new MemoryBlobStore();
-            mem.setBlockSizeMin(100);
-            BlobStore b = cache.wrapBlobStore(mem);
-            Random r = new Random();
-            for (int i = 0; i < 10000; i++) {
-                byte[] data = new byte[100];
-                r.nextBytes(data);
-                String id = b.writeBlob(new ByteArrayInputStream(data));
-                b.readBlob(id, 0, new byte[1], 0, 1);
-            }
-        } finally {
-            cache.close();
-        }
-    }
-    
-    @Test
     public void interrupt() throws Exception {
         FileUtils.deleteDirectory(new File("target/cacheTest"));
         PersistentCache cache = new 
PersistentCache("target/cacheTest,size=1,-compress");


Reply via email to