Author: baedke
Date: Mon Dec 5 19:58:35 2016
New Revision: 1772768
URL: http://svn.apache.org/viewvc?rev=1772768&view=rev
Log:
OAK-5125: Some implementations of CacheValue.getMemory() don't care about
integer overflow.
In case of int overflow the respective methods will now return
Integer.MAX_VALUE. This will be logged on level debug.
Modified:
jackrabbit/oak/trunk/oak-commons/src/main/java/org/apache/jackrabbit/oak/commons/StringUtils.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/cache/EmpiricalWeigher.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/DocumentNodeState.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/LocalDiffCache.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/NodeDocument.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/PathRev.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/RevisionVector.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/util/RevisionsKey.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/util/StringValue.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/util/Utils.java
jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/ExtractedTextCache.java
Modified:
jackrabbit/oak/trunk/oak-commons/src/main/java/org/apache/jackrabbit/oak/commons/StringUtils.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-commons/src/main/java/org/apache/jackrabbit/oak/commons/StringUtils.java?rev=1772768&r1=1772767&r2=1772768&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-commons/src/main/java/org/apache/jackrabbit/oak/commons/StringUtils.java
(original)
+++
jackrabbit/oak/trunk/oak-commons/src/main/java/org/apache/jackrabbit/oak/commons/StringUtils.java
Mon Dec 5 19:58:35 2016
@@ -16,11 +16,16 @@
*/
package org.apache.jackrabbit.oak.commons;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
/**
* Some string utility methods.
*/
public class StringUtils {
+ private static final Logger LOG =
LoggerFactory.getLogger(StringUtils.class);
+
private static final char[] HEX = "0123456789abcdef".toCharArray();
/**
@@ -87,6 +92,11 @@ public class StringUtils {
* @return the estimated memory usage.
*/
public static int estimateMemoryUsage(String s) {
- return s == null ? 0 : 48 + s.length() * 2;
+ long size = s == null ? 0 : 48 + (long)s.length() * 2;
+ if (size > Integer.MAX_VALUE) {
+ LOG.debug("Estimated memory footprint larger than
Integer.MAX_VALUE: {}.", size);
+ size = Integer.MAX_VALUE;
+ }
+ return (int) size;
}
}
Modified:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/cache/EmpiricalWeigher.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/cache/EmpiricalWeigher.java?rev=1772768&r1=1772767&r2=1772768&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/cache/EmpiricalWeigher.java
(original)
+++
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/cache/EmpiricalWeigher.java
Mon Dec 5 19:58:35 2016
@@ -19,6 +19,8 @@
package org.apache.jackrabbit.oak.cache;
import com.google.common.cache.Weigher;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
/**
* Determines the weight of object based on the memory taken by them. The
memory estimates
@@ -26,12 +28,18 @@ import com.google.common.cache.Weigher;
*/
public class EmpiricalWeigher implements Weigher<CacheValue, CacheValue> {
+ static final Logger LOG = LoggerFactory.getLogger(EmpiricalWeigher.class);
+
@Override
public int weigh(CacheValue key, CacheValue value) {
- int size = 168; // overhead for each cache entry
+ long size = 168; // overhead for each cache entry
size += key.getMemory(); // key
size += value.getMemory(); // value
- return size;
+ if (size > Integer.MAX_VALUE) {
+ LOG.debug("Calculated weight larger than Integer.MAX_VALUE: {}.",
size);
+ size = Integer.MAX_VALUE;
+ }
+ return (int) size;
}
}
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=1772768&r1=1772767&r2=1772768&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 Dec 5 19:58:35 2016
@@ -24,12 +24,16 @@ import org.apache.jackrabbit.oak.commons
import org.apache.jackrabbit.oak.spi.blob.AbstractBlobStore;
import com.google.common.cache.Weigher;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
/**
* A blob store with a cache.
*/
public abstract class CachingBlobStore extends AbstractBlobStore {
+ private static final Logger LOG =
LoggerFactory.getLogger(CachingBlobStore.class);
+
protected static final long DEFAULT_CACHE_SIZE = 16 * 1024 * 1024;
protected final CacheLIRS<String, byte[]> cache;
@@ -39,7 +43,12 @@ public abstract class CachingBlobStore e
private final Weigher<String, byte[]> weigher = new Weigher<String,
byte[]>() {
@Override
public int weigh(@Nonnull String key, @Nonnull byte[] value) {
- return StringUtils.estimateMemoryUsage(key) + value.length;
+ long weight = (long)StringUtils.estimateMemoryUsage(key) +
value.length;
+ if (weight > Integer.MAX_VALUE) {
+ LOG.debug("Calculated weight larger than Integer.MAX_VALUE:
{}.", weight);
+ weight = Integer.MAX_VALUE;
+ }
+ return (int) weight;
}
};
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=1772768&r1=1772767&r2=1772768&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 Dec 5 19:58:35 2016
@@ -109,7 +109,12 @@ public class DataStoreBlobStore
private final Weigher<String, byte[]> weigher = new Weigher<String,
byte[]>() {
@Override
public int weigh(@Nonnull String key, @Nonnull byte[] value) {
- return StringUtils.estimateMemoryUsage(key) + value.length;
+ long weight = (long)StringUtils.estimateMemoryUsage(key) +
value.length;
+ if (weight > Integer.MAX_VALUE) {
+ log.debug("Calculated weight larger than Integer.MAX_VALUE:
{}.", weight);
+ weight = Integer.MAX_VALUE;
+ }
+ return (int) weight;
}
};
Modified:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/DocumentNodeState.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/DocumentNodeState.java?rev=1772768&r1=1772767&r2=1772768&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/DocumentNodeState.java
(original)
+++
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/DocumentNodeState.java
Mon Dec 5 19:58:35 2016
@@ -56,6 +56,9 @@ import com.google.common.base.Function;
import com.google.common.collect.Iterables;
import com.google.common.collect.Iterators;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
import static com.google.common.base.Preconditions.checkNotNull;
import static org.apache.jackrabbit.oak.commons.PathUtils.concat;
import static
org.apache.jackrabbit.oak.commons.StringUtils.estimateMemoryUsage;
@@ -65,6 +68,8 @@ import static org.apache.jackrabbit.oak.
*/
public class DocumentNodeState extends AbstractDocumentNodeState implements
CacheValue {
+ private static final Logger log =
LoggerFactory.getLogger(DocumentNodeState.class);
+
public static final Children NO_CHILDREN = new Children();
/**
@@ -419,7 +424,7 @@ public class DocumentNodeState extends A
@Override
public int getMemory() {
- int size = 40 // shallow
+ long size = 40 // shallow
+ (lastRevision != null ? lastRevision.getMemory() : 0)
+ rootRevision.getMemory()
+ estimateMemoryUsage(path);
@@ -443,10 +448,14 @@ public class DocumentNodeState extends A
// referencing the binary in the blob store
// double the size because the parsed PropertyState
// will have a similarly sized blobId as well
- size +=
estimateMemoryUsage(getPropertyAsString(entry.getKey())) * 2;
+ size +=
(long)estimateMemoryUsage(getPropertyAsString(entry.getKey())) * 2;
}
}
- return size;
+ if (size > Integer.MAX_VALUE) {
+ log.debug("Estimated memory footprint larger than
Integer.MAX_VALUE: {}.", size);
+ size = Integer.MAX_VALUE;
+ }
+ return (int) size;
}
//------------------------------< internal
>--------------------------------
@@ -602,22 +611,27 @@ public class DocumentNodeState extends A
* Ascending sorted list of names of child nodes.
*/
final ArrayList<String> children = new ArrayList<String>();
- int cachedMemory;
+ long cachedMemory;
boolean hasMore;
@Override
public int getMemory() {
if (cachedMemory == 0) {
- int size = 48;
+ long size = 48;
if (!children.isEmpty()) {
size = 114;
for (String c : children) {
- size += estimateMemoryUsage(c) + 8;
+ size += (long)estimateMemoryUsage(c) + 8;
}
}
cachedMemory = size;
}
- return cachedMemory;
+ if (cachedMemory > Integer.MAX_VALUE) {
+ log.debug("Estimated memory footprint larger than
Integer.MAX_VALUE: {}.", cachedMemory);
+ return Integer.MAX_VALUE;
+ } else {
+ return (int)cachedMemory;
+ }
}
@Override
Modified:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/LocalDiffCache.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/LocalDiffCache.java?rev=1772768&r1=1772767&r2=1772768&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/LocalDiffCache.java
(original)
+++
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/LocalDiffCache.java
Mon Dec 5 19:58:35 2016
@@ -80,7 +80,7 @@ public class LocalDiffCache extends Diff
boolean local /*ignored*/) {
return new Entry() {
private final Map<String, String> changesPerPath =
Maps.newHashMap();
- private int size;
+ private long size;
@Override
public void append(@Nonnull String path, @Nonnull String changes) {
if (exceedsSize()){
@@ -119,9 +119,9 @@ public class LocalDiffCache extends Diff
public static final class Diff implements CacheValue {
private final Map<String, String> changes;
- private int memory;
+ private long memory;
- public Diff(Map<String, String> changes, int memory) {
+ public Diff(Map<String, String> changes, long memory) {
this.changes = changes;
this.memory = memory;
}
@@ -161,13 +161,18 @@ public class LocalDiffCache extends Diff
@Override
public int getMemory() {
if (memory == 0) {
- int m = 0;
+ long m = 0;
for (Map.Entry<String, String> e : changes.entrySet()){
m += size(e.getKey()) + size(e.getValue());
}
memory = m;
}
- return memory;
+ if (memory > Integer.MAX_VALUE) {
+ LOG.debug("Estimated memory footprint larger than
Integer.MAX_VALUE: {}.", memory);
+ return Integer.MAX_VALUE;
+ } else {
+ return (int) memory;
+ }
}
String get(String path) {
@@ -192,7 +197,7 @@ public class LocalDiffCache extends Diff
}
}
- private static int size(String s){
+ private static long size(String s){
return StringValue.getMemory(s);
}
}
Modified:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/NodeDocument.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/NodeDocument.java?rev=1772768&r1=1772767&r2=1772768&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/NodeDocument.java
(original)
+++
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/NodeDocument.java
Mon Dec 5 19:58:35 2016
@@ -2217,11 +2217,15 @@ public final class NodeDocument extends
@Override
public int getMemory() {
- int size = 114;
+ long size = 114;
for (String name : childNames) {
- size += name.length() * 2 + 56;
+ size += (long)name.length() * 2 + 56;
}
- return size;
+ if (size > Integer.MAX_VALUE) {
+ LOG.debug("Estimated memory footprint larger than
Integer.MAX_VALUE: {}.", size);
+ size = Integer.MAX_VALUE;
+ }
+ return (int) size;
}
@SuppressWarnings("unchecked")
Modified:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/PathRev.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/PathRev.java?rev=1772768&r1=1772767&r2=1772768&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/PathRev.java
(original)
+++
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/PathRev.java
Mon Dec 5 19:58:35 2016
@@ -22,6 +22,8 @@ import javax.annotation.Nonnull;
import org.apache.jackrabbit.oak.cache.CacheValue;
import org.apache.jackrabbit.oak.commons.StringUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
import static com.google.common.base.Preconditions.checkNotNull;
@@ -31,6 +33,8 @@ import static com.google.common.base.Pre
*/
public final class PathRev implements CacheValue {
+ private static final Logger LOG = LoggerFactory.getLogger(PathRev.class);
+
private final String path;
private final RevisionVector revision;
@@ -46,9 +50,14 @@ public final class PathRev implements Ca
@Override
public int getMemory() {
- return 24 // shallow size
- + StringUtils.estimateMemoryUsage(path) // path
- + revision.getMemory(); // revision
+ long size = 24 //
shallow size
+ + (long)StringUtils.estimateMemoryUsage(path) // path
+ + revision.getMemory(); //
revision
+ if (size > Integer.MAX_VALUE) {
+ LOG.debug("Estimated memory footprint larger than
Integer.MAX_VALUE: {}.", size);
+ size = Integer.MAX_VALUE;
+ }
+ return (int) size;
}
//----------------------------< Object
>------------------------------------
Modified:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/RevisionVector.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/RevisionVector.java?rev=1772768&r1=1772767&r2=1772768&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/RevisionVector.java
(original)
+++
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/RevisionVector.java
Mon Dec 5 19:58:35 2016
@@ -32,6 +32,8 @@ import com.google.common.collect.Sets;
import com.google.common.primitives.Ints;
import org.apache.jackrabbit.oak.cache.CacheValue;
import org.apache.jackrabbit.oak.plugins.document.util.Utils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
import static com.google.common.base.Preconditions.checkNotNull;
import static com.google.common.collect.Iterables.toArray;
@@ -51,6 +53,8 @@ import static java.util.Arrays.sort;
*/
public final class RevisionVector implements Iterable<Revision>,
Comparable<RevisionVector>, CacheValue {
+ private static final Logger log =
LoggerFactory.getLogger(RevisionVector.class);
+
private final static RevisionVector EMPTY = new RevisionVector();
private final Revision[] revisions;
@@ -423,8 +427,13 @@ public final class RevisionVector implem
@Override
public int getMemory() {
- return 32 // shallow size
- + revisions.length * (Revision.SHALLOW_MEMORY_USAGE + 4);
+ long size = 32 // shallow size
+ + (long)revisions.length *
(Revision.SHALLOW_MEMORY_USAGE + 4);
+ if (size > Integer.MAX_VALUE) {
+ log.debug("Estimated memory footprint larger than
Integer.MAX_VALUE: {}.", size);
+ size = Integer.MAX_VALUE;
+ }
+ return (int) size;
}
//------------------------< Comparable
>------------------------------------
Modified:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/util/RevisionsKey.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/util/RevisionsKey.java?rev=1772768&r1=1772767&r2=1772768&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/util/RevisionsKey.java
(original)
+++
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/util/RevisionsKey.java
Mon Dec 5 19:58:35 2016
@@ -21,6 +21,8 @@ import javax.annotation.Nonnull;
import org.apache.jackrabbit.oak.cache.CacheValue;
import org.apache.jackrabbit.oak.plugins.document.Revision;
import org.apache.jackrabbit.oak.plugins.document.RevisionVector;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
import static com.google.common.base.Preconditions.checkNotNull;
@@ -29,6 +31,8 @@ import static com.google.common.base.Pre
*/
public final class RevisionsKey implements CacheValue,
Comparable<RevisionsKey> {
+ private static final Logger log =
LoggerFactory.getLogger(RevisionsKey.class);
+
private final RevisionVector r1, r2;
public RevisionsKey(RevisionVector r1, RevisionVector r2) {
@@ -38,7 +42,12 @@ public final class RevisionsKey implemen
@Override
public int getMemory() {
- return 32 + r1.getMemory() + r2.getMemory();
+ long size = 32 + (long)r1.getMemory() + (long)r2.getMemory();
+ if (size > Integer.MAX_VALUE) {
+ log.debug("Estimated memory footprint larger than
Integer.MAX_VALUE: {}.", size);
+ size = Integer.MAX_VALUE;
+ }
+ return (int) size;
}
@Override
Modified:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/util/StringValue.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/util/StringValue.java?rev=1772768&r1=1772767&r2=1772768&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/util/StringValue.java
(original)
+++
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/util/StringValue.java
Mon Dec 5 19:58:35 2016
@@ -21,6 +21,8 @@ package org.apache.jackrabbit.oak.plugin
import javax.annotation.Nonnull;
import org.apache.jackrabbit.oak.cache.CacheValue;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
import static com.google.common.base.Preconditions.checkNotNull;
@@ -29,6 +31,8 @@ import static com.google.common.base.Pre
*/
public final class StringValue implements CacheValue {
+ private static final Logger log =
LoggerFactory.getLogger(StringValue.class);
+
private final String value;
public StringValue(@Nonnull String value) {
@@ -41,8 +45,13 @@ public final class StringValue implement
}
public static int getMemory(@Nonnull String s) {
- return 16 // shallow size
- + 40 + s.length() * 2; // value
+ long size = 16 // shallow size
+ + 40 + (long)s.length() * 2; // value
+ if (size > Integer.MAX_VALUE) {
+ log.debug("Estimated memory footprint larger than
Integer.MAX_VALUE: {}.", size);
+ size = Integer.MAX_VALUE;
+ }
+ return (int) size;
}
@Override
Modified:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/util/Utils.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/util/Utils.java?rev=1772768&r1=1772767&r2=1772768&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/util/Utils.java
(original)
+++
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/util/Utils.java
Mon Dec 5 19:58:35 2016
@@ -130,7 +130,7 @@ public class Utils {
if (map == null) {
return 0;
}
- int size = 0;
+ long size = 0;
for (Entry<?, Object> e : map.entrySet()) {
if (e.getKey() instanceof Revision) {
@@ -148,7 +148,7 @@ public class Utils {
} else if (o instanceof Integer) {
size += 8;
} else if (o instanceof Map) {
- size += 8 + estimateMemoryUsage((Map<String, Object>) o);
+ size += 8 + (long)estimateMemoryUsage((Map<String, Object>) o);
} else if (o == null) {
// zero
} else {
@@ -160,9 +160,13 @@ public class Utils {
// TreeMap (80) + unmodifiable wrapper (32)
size += 112;
// 64 bytes per entry
- size += map.size() * 64;
+ size += (long)map.size() * 64;
- return size;
+ if (size > Integer.MAX_VALUE) {
+ LOG.debug("Estimated memory footprint larger than
Integer.MAX_VALUE: {}.", size);
+ size = Integer.MAX_VALUE;
+ }
+ return (int) size;
}
public static String escapePropertyName(String propertyName) {
Modified:
jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/ExtractedTextCache.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/ExtractedTextCache.java?rev=1772768&r1=1772767&r2=1772768&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/ExtractedTextCache.java
(original)
+++
jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/ExtractedTextCache.java
Mon Dec 5 19:58:35 2016
@@ -40,7 +40,7 @@ import static org.apache.jackrabbit.oak.
class ExtractedTextCache {
private static final String EMPTY_STRING = "";
- private final Logger log = LoggerFactory.getLogger(getClass());
+ private static final Logger log =
LoggerFactory.getLogger(ExtractedTextCache.class);
private volatile PreExtractedTextProvider extractedTextProvider;
private int textExtractionCount;
private long totalBytesRead;
@@ -199,17 +199,21 @@ class ExtractedTextCache {
private EmpiricalWeigher() {
}
- private static int getMemory(@Nonnull String s) {
- return 16 // shallow size
- + 40 + s.length() * 2; // value
+ private static long getMemory(@Nonnull String s) {
+ return 16 // shallow size
+ + 40 + (long)s.length() * 2; // value
}
@Override
public int weigh(String key, String value) {
- int size = 168; // overhead for each cache entry
+ long size = 168; // overhead for each cache entry
size += getMemory(key); // key
size += getMemory(value); // value
- return size;
+ if (size > Integer.MAX_VALUE) {
+ log.debug("Calculated weight larger than Integer.MAX_VALUE:
{}.", size);
+ size = Integer.MAX_VALUE;
+ }
+ return (int) size;
}
}
}