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