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


Reply via email to