This is an automated email from the ASF dual-hosted git repository.

kturner pushed a commit to branch 1.7
in repository https://gitbox.apache.org/repos/asf/accumulo.git


The following commit(s) were added to refs/heads/1.7 by this push:
     new 6ead474  ACCUMULO-4716 Don't cache blks over max array size
6ead474 is described below

commit 6ead4740dbc24485b51d73d0a006d44bb2f52833
Author: Mark Owens <jmark...@gmail.com>
AuthorDate: Thu Oct 5 18:02:18 2017 -0400

    ACCUMULO-4716 Don't cache blks over max array size
    
    Prevents byte array from caching up to Integer.MAX_VALUE to prevent
    possible OutofMemory error as described in StackOverflow post
    https://stackoverflow.com/a/8381338
---
 .../apache/accumulo/core/file/blockfile/impl/CachableBlockFile.java | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

diff --git 
a/core/src/main/java/org/apache/accumulo/core/file/blockfile/impl/CachableBlockFile.java
 
b/core/src/main/java/org/apache/accumulo/core/file/blockfile/impl/CachableBlockFile.java
index 7daacb7..3c5095e 100644
--- 
a/core/src/main/java/org/apache/accumulo/core/file/blockfile/impl/CachableBlockFile.java
+++ 
b/core/src/main/java/org/apache/accumulo/core/file/blockfile/impl/CachableBlockFile.java
@@ -145,6 +145,10 @@ public class CachableBlockFile {
     private boolean closed = false;
     private AccumuloConfiguration accumuloConfiguration = null;
 
+    // ACCUMULO-4716 - Define MAX_ARRAY_SIZE smaller than Integer.MAX_VALUE to 
prevent possible OutOfMemory
+    // errors when allocating arrays - described in stackoverflow post: 
https://stackoverflow.com/a/8381338
+    private static final int MAX_ARRAY_SIZE = Integer.MAX_VALUE - 8;
+
     private interface BlockLoader {
       BlockReader get() throws IOException;
 
@@ -321,7 +325,7 @@ public class CachableBlockFile {
 
     private BlockRead cacheBlock(String _lookup, BlockCache cache, BlockReader 
_currBlock, String block) throws IOException {
 
-      if ((cache == null) || (_currBlock.getRawSize() > cache.getMaxSize())) {
+      if ((cache == null) || (_currBlock.getRawSize() > 
Math.min(cache.getMaxSize(), MAX_ARRAY_SIZE))) {
         return new BlockRead(_currBlock, _currBlock.getRawSize());
       } else {
 

-- 
To stop receiving notification emails like this one, please contact
['"commits@accumulo.apache.org" <commits@accumulo.apache.org>'].

Reply via email to