Author: baedke Date: Mon Dec 5 20:50:25 2016 New Revision: 1772798 URL: http://svn.apache.org/viewvc?rev=1772798&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/branches/1.4/ (props changed) jackrabbit/oak/branches/1.4/oak-commons/src/main/java/org/apache/jackrabbit/oak/commons/StringUtils.java jackrabbit/oak/branches/1.4/oak-core/src/main/java/org/apache/jackrabbit/oak/cache/EmpiricalWeigher.java jackrabbit/oak/branches/1.4/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/blob/CachingBlobStore.java jackrabbit/oak/branches/1.4/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/blob/datastore/DataStoreBlobStore.java jackrabbit/oak/branches/1.4/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/DocumentNodeState.java jackrabbit/oak/branches/1.4/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/LocalDiffCache.java jackrabbit/oak/branches/1.4/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/NodeDocument.java jackrabbit/oak/branches/1.4/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/PathRev.java jackrabbit/oak/branches/1.4/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/RevisionVector.java jackrabbit/oak/branches/1.4/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/util/RevisionsKey.java jackrabbit/oak/branches/1.4/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/util/StringValue.java jackrabbit/oak/branches/1.4/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/util/Utils.java jackrabbit/oak/branches/1.4/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/ExtractedTextCache.java Propchange: jackrabbit/oak/branches/1.4/ ------------------------------------------------------------------------------ --- svn:mergeinfo (original) +++ svn:mergeinfo Mon Dec 5 20:50:25 2016 @@ -1,3 +1,3 @@ /jackrabbit/oak/branches/1.0:1665962 -/jackrabbit/oak/trunk:1733615,1733875,1733913,1733929,1734230,1734254,1734279,1734941,1735052,1735081,1735109,1735141,1735267,1735405,1735484,1735549,1735564,1735588,1735622,1735638,1735919,1735983,1736176,1737309-1737310,1737334,1737349,1737998,1738004,1738136,1738138,1738207,1738234,1738252,1738775,1738795,1738833,1738950,1738957,1738963,1739712,1739760,1739867,1739894,1739959-1739960,1740114,1740116,1740250,1740333,1740349,1740360,1740625-1740626,1740774,1740837,1740879,1740971,1741016,1741032,1741339,1741343,1742077,1742117,1742125,1742363,1742520,1742888,1742916,1743097,1743172,1743343,1743674,1744265,1744292,1744589,1744670,1744672,1744959,1745038,1745127,1745197,1745336,1745368,1746086,1746117,1746342,1746345,1746408,1746696,1746981,1747198,1747200,1747341-1747342,1747380,1747387,1747406,1747492,1747512,1747654,1748505,1748553,1748722,1748870,1749275,1749350,1749424,1749443,1749464,1749475,1749645,1749662,1749815,1749872,1749875,1749899,1750052,1750076-1750077,1750287,1750457 ,1750462,1750465,1750495,1750626,1750809,1750886-1750887,1751396,1751410,1751419,1751445-1751446,1751478,1751748,1751753,1751755,1751871,1752198,1752202,1752259,1752273-1752274,1752283,1752292,1752438,1752447-1752448,1752508,1752596,1752616,1752659,1752672,1753262,1753331-1753332,1753335-1753336,1753355,1753444,1754117,1754239,1755157,1755191,1756520,1756580,1757119,1757166,1758213,1758713,1759433,1759795,1759826,1760326,1760340,1760373,1760387,1760486,1760492,1760494,1760661-1760662,1761412,1761444,1761571,1761762,1761787,1761876,1762453,1762612,1762632,1762635,1763347,1763355-1763356,1763378,1763465,1763735,1764678,1764705,1764814,1764898,1765817,1765983,1766071,1766423,1766496,1766519,1766554,1766644,1767265,1768446,1768637,1770982,1771022,1771093,1771098,1771739,1771852,1771870,1771902,1772155,1772228,1772593 +/jackrabbit/oak/trunk:1733615,1733875,1733913,1733929,1734230,1734254,1734279,1734941,1735052,1735081,1735109,1735141,1735267,1735405,1735484,1735549,1735564,1735588,1735622,1735638,1735919,1735983,1736176,1737309-1737310,1737334,1737349,1737998,1738004,1738136,1738138,1738207,1738234,1738252,1738775,1738795,1738833,1738950,1738957,1738963,1739712,1739760,1739867,1739894,1739959-1739960,1740114,1740116,1740250,1740333,1740349,1740360,1740625-1740626,1740774,1740837,1740879,1740971,1741016,1741032,1741339,1741343,1742077,1742117,1742125,1742363,1742520,1742888,1742916,1743097,1743172,1743343,1743674,1744265,1744292,1744589,1744670,1744672,1744959,1745038,1745127,1745197,1745336,1745368,1746086,1746117,1746342,1746345,1746408,1746696,1746981,1747198,1747200,1747341-1747342,1747380,1747387,1747406,1747492,1747512,1747654,1748505,1748553,1748722,1748870,1749275,1749350,1749424,1749443,1749464,1749475,1749645,1749662,1749815,1749872,1749875,1749899,1750052,1750076-1750077,1750287,1750457 ,1750462,1750465,1750495,1750626,1750809,1750886-1750887,1751396,1751410,1751419,1751445-1751446,1751478,1751748,1751753,1751755,1751871,1752198,1752202,1752259,1752273-1752274,1752283,1752292,1752438,1752447-1752448,1752508,1752596,1752616,1752659,1752672,1753262,1753331-1753332,1753335-1753336,1753355,1753444,1754117,1754239,1755157,1755191,1756520,1756580,1757119,1757166,1758213,1758713,1759433,1759795,1759826,1760326,1760340,1760373,1760387,1760486,1760492,1760494,1760661-1760662,1761412,1761444,1761571,1761762,1761787,1761876,1762453,1762612,1762632,1762635,1763347,1763355-1763356,1763378,1763465,1763735,1764678,1764705,1764814,1764898,1765817,1765983,1766071,1766423,1766496,1766519,1766554,1766644,1767265,1768446,1768637,1770982,1771022,1771093,1771098,1771739,1771852,1771870,1771902,1772155,1772228,1772593,1772768 /jackrabbit/trunk:1345480 Modified: jackrabbit/oak/branches/1.4/oak-commons/src/main/java/org/apache/jackrabbit/oak/commons/StringUtils.java URL: http://svn.apache.org/viewvc/jackrabbit/oak/branches/1.4/oak-commons/src/main/java/org/apache/jackrabbit/oak/commons/StringUtils.java?rev=1772798&r1=1772797&r2=1772798&view=diff ============================================================================== --- jackrabbit/oak/branches/1.4/oak-commons/src/main/java/org/apache/jackrabbit/oak/commons/StringUtils.java (original) +++ jackrabbit/oak/branches/1.4/oak-commons/src/main/java/org/apache/jackrabbit/oak/commons/StringUtils.java Mon Dec 5 20:50:25 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 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/branches/1.4/oak-core/src/main/java/org/apache/jackrabbit/oak/cache/EmpiricalWeigher.java URL: http://svn.apache.org/viewvc/jackrabbit/oak/branches/1.4/oak-core/src/main/java/org/apache/jackrabbit/oak/cache/EmpiricalWeigher.java?rev=1772798&r1=1772797&r2=1772798&view=diff ============================================================================== --- jackrabbit/oak/branches/1.4/oak-core/src/main/java/org/apache/jackrabbit/oak/cache/EmpiricalWeigher.java (original) +++ jackrabbit/oak/branches/1.4/oak-core/src/main/java/org/apache/jackrabbit/oak/cache/EmpiricalWeigher.java Mon Dec 5 20:50:25 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/branches/1.4/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/blob/CachingBlobStore.java URL: http://svn.apache.org/viewvc/jackrabbit/oak/branches/1.4/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/blob/CachingBlobStore.java?rev=1772798&r1=1772797&r2=1772798&view=diff ============================================================================== --- jackrabbit/oak/branches/1.4/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/blob/CachingBlobStore.java (original) +++ jackrabbit/oak/branches/1.4/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/blob/CachingBlobStore.java Mon Dec 5 20:50:25 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/branches/1.4/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/blob/datastore/DataStoreBlobStore.java URL: http://svn.apache.org/viewvc/jackrabbit/oak/branches/1.4/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/blob/datastore/DataStoreBlobStore.java?rev=1772798&r1=1772797&r2=1772798&view=diff ============================================================================== --- jackrabbit/oak/branches/1.4/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/blob/datastore/DataStoreBlobStore.java (original) +++ jackrabbit/oak/branches/1.4/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/blob/datastore/DataStoreBlobStore.java Mon Dec 5 20:50:25 2016 @@ -103,7 +103,12 @@ public class DataStoreBlobStore implemen 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/branches/1.4/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/DocumentNodeState.java URL: http://svn.apache.org/viewvc/jackrabbit/oak/branches/1.4/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/DocumentNodeState.java?rev=1772798&r1=1772797&r2=1772798&view=diff ============================================================================== --- jackrabbit/oak/branches/1.4/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/DocumentNodeState.java (original) +++ jackrabbit/oak/branches/1.4/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/DocumentNodeState.java Mon Dec 5 20:50:25 2016 @@ -51,6 +51,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.StringUtils.estimateMemoryUsage; @@ -59,6 +62,7 @@ import static org.apache.jackrabbit.oak. */ public class DocumentNodeState extends AbstractDocumentNodeState implements CacheValue { + private static final Logger log = LoggerFactory.getLogger(DocumentNodeState.class); private static final PerfLogger perfLogger = new PerfLogger( LoggerFactory.getLogger(DocumentNodeState.class.getName() + ".perf")); @@ -399,7 +403,7 @@ public class DocumentNodeState extends A @Override public int getMemory() { - int size = 40 // shallow + long size = 40 // shallow + readRevision.getMemory() + (lastRevision != null ? lastRevision.getMemory() : 0) + rootRevision.getMemory() @@ -424,10 +428,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 >-------------------------------- @@ -553,22 +561,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/branches/1.4/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/LocalDiffCache.java URL: http://svn.apache.org/viewvc/jackrabbit/oak/branches/1.4/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/LocalDiffCache.java?rev=1772798&r1=1772797&r2=1772798&view=diff ============================================================================== --- jackrabbit/oak/branches/1.4/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/LocalDiffCache.java (original) +++ jackrabbit/oak/branches/1.4/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/LocalDiffCache.java Mon Dec 5 20:50:25 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/branches/1.4/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/NodeDocument.java URL: http://svn.apache.org/viewvc/jackrabbit/oak/branches/1.4/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/NodeDocument.java?rev=1772798&r1=1772797&r2=1772798&view=diff ============================================================================== --- jackrabbit/oak/branches/1.4/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/NodeDocument.java (original) +++ jackrabbit/oak/branches/1.4/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/NodeDocument.java Mon Dec 5 20:50:25 2016 @@ -2087,11 +2087,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/branches/1.4/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/PathRev.java URL: http://svn.apache.org/viewvc/jackrabbit/oak/branches/1.4/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/PathRev.java?rev=1772798&r1=1772797&r2=1772798&view=diff ============================================================================== --- jackrabbit/oak/branches/1.4/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/PathRev.java (original) +++ jackrabbit/oak/branches/1.4/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/PathRev.java Mon Dec 5 20:50:25 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; @@ -42,9 +46,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/branches/1.4/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/RevisionVector.java URL: http://svn.apache.org/viewvc/jackrabbit/oak/branches/1.4/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/RevisionVector.java?rev=1772798&r1=1772797&r2=1772798&view=diff ============================================================================== --- jackrabbit/oak/branches/1.4/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/RevisionVector.java (original) +++ jackrabbit/oak/branches/1.4/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/RevisionVector.java Mon Dec 5 20:50:25 2016 @@ -34,6 +34,8 @@ 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; @@ -53,6 +55,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; @@ -395,8 +399,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/branches/1.4/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/util/RevisionsKey.java URL: http://svn.apache.org/viewvc/jackrabbit/oak/branches/1.4/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/util/RevisionsKey.java?rev=1772798&r1=1772797&r2=1772798&view=diff ============================================================================== --- jackrabbit/oak/branches/1.4/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/util/RevisionsKey.java (original) +++ jackrabbit/oak/branches/1.4/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/util/RevisionsKey.java Mon Dec 5 20:50:25 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/branches/1.4/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/util/StringValue.java URL: http://svn.apache.org/viewvc/jackrabbit/oak/branches/1.4/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/util/StringValue.java?rev=1772798&r1=1772797&r2=1772798&view=diff ============================================================================== --- jackrabbit/oak/branches/1.4/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/util/StringValue.java (original) +++ jackrabbit/oak/branches/1.4/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/util/StringValue.java Mon Dec 5 20:50:25 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/branches/1.4/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/util/Utils.java URL: http://svn.apache.org/viewvc/jackrabbit/oak/branches/1.4/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/util/Utils.java?rev=1772798&r1=1772797&r2=1772798&view=diff ============================================================================== --- jackrabbit/oak/branches/1.4/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/util/Utils.java (original) +++ jackrabbit/oak/branches/1.4/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/util/Utils.java Mon Dec 5 20:50:25 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/branches/1.4/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/ExtractedTextCache.java URL: http://svn.apache.org/viewvc/jackrabbit/oak/branches/1.4/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/ExtractedTextCache.java?rev=1772798&r1=1772797&r2=1772798&view=diff ============================================================================== --- jackrabbit/oak/branches/1.4/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/ExtractedTextCache.java (original) +++ jackrabbit/oak/branches/1.4/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/ExtractedTextCache.java Mon Dec 5 20:50:25 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; } } }