[ 
https://issues.apache.org/jira/browse/CASSANDRA-3861?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13202416#comment-13202416
 ] 

Jonathan Ellis commented on CASSANDRA-3861:
-------------------------------------------

I dunno, I'd rather emphasize that passing MAX_VALUE is a Very Bad Idea.  If 
you're sure you have less than N keys, then you should be using N as your 
limit.  That way, if you're wrong you just get capped at N instead of working 
fine in testing and OOMing in production.
                
> get_indexed_slices throws OOM Error when is called with too big 
> indexClause.count
> ---------------------------------------------------------------------------------
>
>                 Key: CASSANDRA-3861
>                 URL: https://issues.apache.org/jira/browse/CASSANDRA-3861
>             Project: Cassandra
>          Issue Type: Bug
>          Components: API, Core
>    Affects Versions: 1.0.7
>            Reporter: Vladimir Tsanev
>            Assignee: Sylvain Lebresne
>             Fix For: 1.0.8
>
>         Attachments: 3861.patch
>
>
> I tried to call get_index_slices with Integer.MAX_VALUE as IndexClause.count. 
> Unfortunately the node died with OOM. In the log there si following error:
> ERROR [Thrift:4] 2012-02-06 17:43:39,224 Cassandra.java (line 3252) Internal 
> error processing get_indexed_slices
> java.lang.OutOfMemoryError: Java heap space
>       at java.util.ArrayList.<init>(ArrayList.java:112)
>       at 
> org.apache.cassandra.service.StorageProxy.scan(StorageProxy.java:1067)
>       at 
> org.apache.cassandra.thrift.CassandraServer.get_indexed_slices(CassandraServer.java:746)
>       at 
> org.apache.cassandra.thrift.Cassandra$Processor$get_indexed_slices.process(Cassandra.java:3244)
>       at 
> org.apache.cassandra.thrift.Cassandra$Processor.process(Cassandra.java:2889)
>       at 
> org.apache.cassandra.thrift.CustomTThreadPoolServer$WorkerProcess.run(CustomTThreadPoolServer.java:187)
>       at 
> java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
>       at 
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
>       at java.lang.Thread.run(Thread.java:662)
> Is it necessary to allocate all the memory in advance. I only have 3 KEYS 
> that match my caluse. I do not known the exact number but in general I am 
> sure that they wil fit in the memory.
> I can/will implement some calls with paging, but wanted to test and I am not 
> happy with the fact the node disconnected.
> I wonder why ArrayList is used here?
> I think the result is never accessed by index (but only iterated) and the 
> subList for non RandomAccess Lists (for example LinkedList) will do the same 
> job if you are not using other operations than iteration.
> Is this related to the problem described in CASSANDRA-691.

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: 
https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

Reply via email to