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 md...@apache.org on 2015/07/13 15:57:33 UTC
svn commit: r1690672 - in /jackrabbit/oak/trunk/oak-core/src:
main/java/org/apache/jackrabbit/oak/cache/
main/java/org/apache/jackrabbit/oak/plugins/blob/
main/java/org/apache/jackrabbit/oak/plugins/blob/datastore/
main/java/org/apache/jackrabbit/oak/p...
Author: mduerig
Date: Mon Jul 13 13:57:33 2015
New Revision: 1690672
URL: http://svn.apache.org/r1690672
Log:
OAK-3094: Potential ClassCastException with LIRS cache builder
- proper type parametrisation of LIRS cache builder.
- Remove test case as it fails at compile time already now
Modified:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/cache/CacheLIRS.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/blob/CachingBlobStore.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/blob/datastore/DataStoreBlobStore.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/DocumentMK.java
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/persistentCache/CacheTest.java
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/cache/CacheLIRS.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/cache/CacheLIRS.java?rev=1690672&r1=1690671&r2=1690672&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/cache/CacheLIRS.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/cache/CacheLIRS.java Mon Jul 13 13:57:33 2015
@@ -1398,40 +1398,40 @@ public class CacheLIRS<K, V> implements
/**
* A builder for the cache.
*/
- public static class Builder {
+ public static class Builder<K, V> {
- private Weigher<?, ?> weigher;
+ private Weigher<K, V> weigher;
private long maxWeight;
private int averageWeight = 100;
private int segmentCount = 16;
private int stackMoveDistance = 16;
- public Builder recordStats() {
+ public Builder<K, V> recordStats() {
return this;
}
- public <K, V> Builder weigher(Weigher<K, V> weigher) {
+ public Builder<K, V> weigher(Weigher<K, V> weigher) {
this.weigher = weigher;
return this;
}
- public Builder maximumWeight(long maxWeight) {
+ public Builder<K, V> maximumWeight(long maxWeight) {
this.maxWeight = maxWeight;
return this;
}
- public Builder averageWeight(int averageWeight) {
+ public Builder<K, V> averageWeight(int averageWeight) {
this.averageWeight = averageWeight;
return this;
}
- public Builder maximumSize(int maxSize) {
+ public Builder<K, V> maximumSize(int maxSize) {
this.maxWeight = maxSize;
this.averageWeight = 1;
return this;
}
- public Builder segmentCount(int segmentCount) {
+ public Builder<K, V> segmentCount(int segmentCount) {
if (Integer.bitCount(segmentCount) != 1 || segmentCount < 0 || segmentCount > 65536) {
LOG.warn("Illegal segment count: " + segmentCount + ", using 16");
segmentCount = 16;
@@ -1440,7 +1440,7 @@ public class CacheLIRS<K, V> implements
return this;
}
- public Builder stackMoveDistance(int stackMoveDistance) {
+ public Builder<K, V> stackMoveDistance(int stackMoveDistance) {
if (stackMoveDistance < 0) {
LOG.warn("Illegal stack move distance: " + stackMoveDistance + ", using 16");
stackMoveDistance = 16;
@@ -1449,15 +1449,12 @@ public class CacheLIRS<K, V> implements
return this;
}
- public <K, V> CacheLIRS<K, V> build() {
+ public CacheLIRS<K, V> build() {
return build(null);
}
- public <K, V> CacheLIRS<K, V> build(
- CacheLoader<K, V> cacheLoader) {
- @SuppressWarnings("unchecked")
- Weigher<K, V> w = (Weigher<K, V>) weigher;
- return new CacheLIRS<K, V>(w, maxWeight, averageWeight,
+ public CacheLIRS<K, V> build(CacheLoader<K, V> cacheLoader) {
+ return new CacheLIRS<K, V>(weigher, maxWeight, averageWeight,
segmentCount, stackMoveDistance, cacheLoader);
}
@@ -1468,8 +1465,8 @@ public class CacheLIRS<K, V> implements
*
* @return the builder
*/
- public static Builder newBuilder() {
- return new Builder();
+ public static <K, V> Builder<K, V> newBuilder() {
+ return new Builder<K, V>();
}
@Override
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/blob/CachingBlobStore.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/blob/CachingBlobStore.java?rev=1690672&r1=1690671&r2=1690672&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/blob/CachingBlobStore.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/blob/CachingBlobStore.java Mon Jul 13 13:57:33 2015
@@ -34,7 +34,7 @@ public abstract class CachingBlobStore e
public CachingBlobStore(long cacheSize) {
this.blobCacheSize = cacheSize;
- cache = CacheLIRS.newBuilder().
+ cache = CacheLIRS.<String, byte[]>newBuilder().
maximumWeight(cacheSize).
averageWeight(getBlockSize() / 2).
weigher(new Weigher<String, byte[]>() {
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/blob/datastore/DataStoreBlobStore.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/blob/datastore/DataStoreBlobStore.java?rev=1690672&r1=1690671&r2=1690672&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/blob/datastore/DataStoreBlobStore.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/blob/datastore/DataStoreBlobStore.java Mon Jul 13 13:57:33 2015
@@ -19,6 +19,10 @@
package org.apache.jackrabbit.oak.plugins.blob.datastore;
+import static com.google.common.base.Preconditions.checkNotNull;
+import static com.google.common.collect.Iterators.filter;
+import static com.google.common.collect.Iterators.transform;
+
import java.io.BufferedInputStream;
import java.io.ByteArrayInputStream;
import java.io.File;
@@ -56,10 +60,6 @@ import org.apache.jackrabbit.oak.spi.blo
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import static com.google.common.base.Preconditions.checkNotNull;
-import static com.google.common.collect.Iterators.filter;
-import static com.google.common.collect.Iterators.transform;
-
/**
* BlobStore wrapper for DataStore. Wraps Jackrabbit 2 DataStore and expose them as BlobStores
* It also handles inlining binaries if there size is smaller than
@@ -106,7 +106,7 @@ public class DataStoreBlobStore implemen
this.delegate = delegate;
this.encodeLengthInId = encodeLengthInId;
- this.cache = CacheLIRS.newBuilder()
+ this.cache = CacheLIRS.<String, byte[]>newBuilder()
.maximumWeight(cacheSizeInMB * FileUtils.ONE_MB)
.weigher(new Weigher<String, byte[]>() {
@Override
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/DocumentMK.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/DocumentMK.java?rev=1690672&r1=1690671&r2=1690672&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/DocumentMK.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/DocumentMK.java Mon Jul 13 13:57:33 2015
@@ -16,6 +16,8 @@
*/
package org.apache.jackrabbit.oak.plugins.document;
+import static com.google.common.base.Preconditions.checkArgument;
+
import java.io.InputStream;
import java.util.Set;
import java.util.concurrent.Executor;
@@ -31,7 +33,6 @@ import com.google.common.cache.Weigher;
import com.google.common.collect.Sets;
import com.google.common.util.concurrent.MoreExecutors;
import com.mongodb.DB;
-
import org.apache.jackrabbit.oak.api.CommitFailedException;
import org.apache.jackrabbit.oak.cache.CacheLIRS;
import org.apache.jackrabbit.oak.cache.CacheValue;
@@ -59,8 +60,6 @@ import org.apache.jackrabbit.oak.stats.C
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import static com.google.common.base.Preconditions.checkArgument;
-
/**
* A JSON-based wrapper around the NodeStore implementation that stores the
* data in a {@link DocumentStore}. It is used for testing purpose only.
@@ -917,8 +916,13 @@ public class DocumentMK {
useLirs = LIRS_CACHE;
}
if (useLirs) {
- return CacheLIRS.newBuilder().
- weigher(weigher).
+ return CacheLIRS.<K, V>newBuilder().
+ weigher(new Weigher<K, V>() {
+ @Override
+ public int weigh(K key, V value) {
+ return weigher.weigh(key, value);
+ }
+ }).
averageWeight(2000).
maximumWeight(maxWeight).
segmentCount(cacheSegmentCount).
Modified: jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/persistentCache/CacheTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/persistentCache/CacheTest.java?rev=1690672&r1=1690671&r2=1690672&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/persistentCache/CacheTest.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/persistentCache/CacheTest.java Mon Jul 13 13:57:33 2015
@@ -27,38 +27,19 @@ import java.io.File;
import java.io.FileOutputStream;
import java.util.Random;
-import com.google.common.cache.Weigher;
+import com.google.common.cache.Cache;
import org.apache.commons.io.FileUtils;
import org.apache.jackrabbit.oak.cache.CacheLIRS;
-import org.apache.jackrabbit.oak.plugins.document.util.StringValue;
-
-import com.google.common.cache.Cache;
-
import org.apache.jackrabbit.oak.plugins.document.PathRev;
import org.apache.jackrabbit.oak.plugins.document.Revision;
+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.Ignore;
import org.junit.Test;
public class CacheTest {
@Test
- @Ignore("OAK-3094") // FIXME OAK-3094
- public void builder() {
- CacheLIRS<Integer, String> cache = CacheLIRS.newBuilder()
- .weigher(new Weigher<String, Integer>() {
- @Override
- public int weigh(String key, Integer value) {
- return 0;
- }
- })
- .build();
-
- cache.put(0, "s");
- }
-
- @Test
public void recoverIfCorrupt() throws Exception {
FileUtils.deleteDirectory(new File("target/cacheTest"));
new File("target/cacheTest").mkdirs();