You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@cayenne.apache.org by "Marcin Skladaniec (JIRA)" <de...@cayenne.apache.org> on 2008/05/28 11:55:52 UTC

[jira] Created: (CAY-1059) (Remote)IncrementalFaultList resolveAll() fails

(Remote)IncrementalFaultList resolveAll() fails 
------------------------------------------------

                 Key: CAY-1059
                 URL: https://issues.apache.org/cayenne/browse/CAY-1059
             Project: Cayenne
          Issue Type: Bug
          Components: Cayenne Core Library
         Environment: OS X 10.5 , derby, remote cayenne
            Reporter: Marcin Skladaniec
            Assignee: Andrus Adamchik



Iterating trough all select query results is best done using non-paged query, but sometimes though it happens that the paged list has to be iterated also.
There is a method in the API resolveAll() which seems to be suited for this case, but unfortunately it does not work on big lists (in our case 50000+ records). I'm not sure if this is a derby thing only, but it seems like the generated expression (set of ObjectIdQueries) is too long.  

Exception : 
     [java] java.sql.SQLException: Java exception: ': java.lang.StackOverflowError'.
     [java] 	at org.apache.derby.impl.jdbc.SQLExceptionFactory.getSQLException(Unknown Source)
     [java] 	at org.apache.derby.impl.jdbc.Util.newEmbedSQLException(Unknown Source)
     [java] 	at org.apache.derby.impl.jdbc.Util.javaException(Unknown Source)
     [java] 	at org.apache.derby.impl.jdbc.TransactionResourceImpl.wrapInSQLException(Unknown Source)
     [java] 	at org.apache.derby.impl.jdbc.TransactionResourceImpl.handleException(Unknown Source)
     [java] 	at org.apache.derby.impl.jdbc.EmbedConnection.handleException(Unknown Source)
     [java] 	at org.apache.derby.impl.jdbc.ConnectionChild.handleException(Unknown Source)
     [java] 	at org.apache.derby.impl.jdbc.EmbedPreparedStatement.<init>(Unknown Source)
     [java] 	at org.apache.derby.impl.jdbc.EmbedPreparedStatement20.<init>(Unknown Source)
     [java] 	at org.apache.derby.impl.jdbc.EmbedPreparedStatement30.<init>(Unknown Source)
     [java] 	at org.apache.derby.jdbc.Driver30.newEmbedPreparedStatement(Unknown Source)
     [java] 	at org.apache.derby.impl.jdbc.EmbedConnection.prepareStatement(Unknown Source)
     [java] 	at org.apache.derby.impl.jdbc.EmbedConnection.prepareStatement(Unknown Source)
     [java] 	at org.apache.cayenne.conn.ConnectionWrapper.prepareStatement(ConnectionWrapper.java:274)
     [java] 	at org.apache.cayenne.conn.ConnectionWrapper.prepareStatement(ConnectionWrapper.java:280)
     [java] 	at org.apache.cayenne.access.TransactionConnectionDecorator.prepareStatement(TransactionConnectionDecorator.java:179)
     [java] 	at org.apache.cayenne.access.trans.QueryAssembler.createStatement(QueryAssembler.java:118)
     [java] 	at org.apache.cayenne.access.jdbc.SelectAction.performAction(SelectAction.java:72)
     [java] 	at org.apache.cayenne.access.DataNodeQueryAction.runQuery(DataNodeQueryAction.java:58)
     [java] 	at org.apache.cayenne.access.DataNode.performQueries(DataNode.java:230)
     [java] 	at org.apache.cayenne.access.DataDomainQueryAction.runQuery(DataDomainQueryAction.java:424)
     [java] 	at org.apache.cayenne.access.DataDomainQueryAction.access$000(DataDomainQueryAction.java:68)
     [java] 	at org.apache.cayenne.access.DataDomainQueryAction$2.transform(DataDomainQueryAction.java:397)
     [java] 	at org.apache.cayenne.access.DataDomain.runInTransaction(DataDomain.java:847)
     [java] 	at org.apache.cayenne.access.DataDomainQueryAction.runQueryInTransaction(DataDomainQueryAction.java:394)
     [java] 	at org.apache.cayenne.access.DataDomainQueryAction.execute(DataDomainQueryAction.java:120)
     [java] 	at org.apache.cayenne.access.DataDomain.onQuery(DataDomain.java:740)
     [java] 	at org.apache.cayenne.util.ObjectContextQueryAction.runQuery(ObjectContextQueryAction.java:317)
     [java] 	at org.apache.cayenne.util.ObjectContextQueryAction.execute(ObjectContextQueryAction.java:96)
     [java] 	at org.apache.cayenne.access.DataContext.onQuery(DataContext.java:1336)
     [java] 	at org.apache.cayenne.access.DataContext.performQuery(DataContext.java:1325)
     [java] 	at org.apache.cayenne.access.IncrementalFaultList.resolveInterval(IncrementalFaultList.java:353)
     [java] 	at org.apache.cayenne.access.IncrementalFaultList.subList(IncrementalFaultList.java:687)
     [java] 	at org.apache.cayenne.access.ClientServerChannelQueryAction.interceptSinglePageQuery(ClientServerChannelQueryAction.java:109)
     [java] 	at org.apache.cayenne.access.ClientServerChannelQueryAction.execute(ClientServerChannelQueryAction.java:65)
     [java] 	at org.apache.cayenne.access.ClientServerChannel.onQuery(ClientServerChannel.java:82)
     [java] 	at org.apache.cayenne.remote.service.DispatchHelper.dispatch(DispatchHelper.java:40)
     [java] 	at org.apache.cayenne.remote.service.BaseRemoteService.processMessage(BaseRemoteService.java:153)
     [java] 	at sun.reflect.GeneratedMethodAccessor11.invoke(Unknown Source)
     [java] 	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
     [java] 	at java.lang.reflect.Method.invoke(Method.java:585)
     [java] 	at com.caucho.hessian.server.HessianSkeleton.invoke(HessianSkeleton.java:180)
     [java] 	at com.caucho.hessian.server.HessianSkeleton.invoke(HessianSkeleton.java:109)
     [java] 	at com.caucho.hessian.server.HessianServlet.service(HessianServlet.java:393)
     [java] 	at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:487)
     [java] 	at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1093)
     [java] 	at ish.oncourse.server.SecurityFilter.doFilter(SecurityFilter.java:112)
     [java] 	at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1084)
     [java] 	at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:360)
     [java] 	at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216)
     [java] 	at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:181)
     [java] 	at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:726)
     [java] 	at org.mortbay.jetty.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:206)
     [java] 	at org.mortbay.jetty.handler.HandlerCollection.handle(HandlerCollection.java:114)
     [java] 	at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
     [java] 	at org.mortbay.jetty.Server.handle(Server.java:324)
     [java] 	at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:505)
     [java] 	at org.mortbay.jetty.HttpConnection$RequestHandler.content(HttpConnection.java:842)
     [java] 	at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:730)
     [java] 	at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:205)
     [java] 	at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:380)
     [java] 	at org.mortbay.jetty.bio.SocketConnector$Connection.run(SocketConnector.java:228)
     [java] 	at org.mortbay.thread.BoundedThreadPool$PoolThread.run(BoundedThreadPool.java:450)
     [java] Caused by: java.lang.StackOverflowError
     [java] 	at org.apache.derby.impl.sql.compile.BinaryOperatorNode.bindExpression(Unknown Source)
     [java] 	at org.apache.derby.impl.sql.compile.BinaryLogicalOperatorNode.bindExpression(Unknown Source)
     [java] 	at org.apache.derby.impl.sql.compile.OrNode.bindExpression(Unknown Source)
     [java] 	at org.apache.derby.impl.sql.compile.BinaryOperatorNode.bindExpression(Unknown Source)
     [java] 	at org.apache.derby.impl.sql.compile.BinaryLogicalOperatorNode.bindExpression(Unknown Source)
     [java] 	at org.apache.derby.impl.sql.compile.OrNode.bindExpression(Unknown Source)
     [java] 	at org.apache.derby.impl.sql.compile.BinaryOperatorNode.bindExpression(Unknown Source)
     [java] 	at org.apache.derby.impl.sql.compile.BinaryLogicalOperatorNode.bindExpression(Unknown Source)
     [java] 	at org.apache.derby.impl.sql.compile.OrNode.bindExpression(Unknown Source)
     [java] 	at org.apache.derby.impl.sql.compile.BinaryOperatorNode.bindExpression(Unknown Source)
     [java] 	at org.apache.derby.impl.sql.compile.BinaryLogicalOperatorNode.bindExpression(Unknown Source)
     [java] 	at org.apache.derby.impl.sql.compile.OrNode.bindExpression(Unknown Source)
     [java] 	at org.apache.derby.impl.sql.compile.BinaryOperatorNode.bindExpression(Unknown Source)
     [java] 	at org.apache.derby.impl.sql.compile.BinaryLogicalOperatorNode.bindExpression(Unknown Source)



-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


[jira] Commented: (CAY-1059) (Remote)IncrementalFaultList resolveAll() fails

Posted by "Andrus Adamchik (JIRA)" <de...@cayenne.apache.org>.
    [ https://issues.apache.org/cayenne/browse/CAY-1059?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12870#action_12870 ] 

Andrus Adamchik commented on CAY-1059:
--------------------------------------

Actually IncrementalFaultList (server-side one) has a property "maxFetchSize" which is by default set to 10000. This was done to address a similar problem for PostgreSQL. There's currently no way to change this parameter via ROP (or via a SelectQuery)... As a quick fix you may try some lower default values, and see which threshold works for Derby. If it is not too low, we can change that in Cayenne. For the future I guess that should become one of the query hints...

> (Remote)IncrementalFaultList resolveAll() fails 
> ------------------------------------------------
>
>                 Key: CAY-1059
>                 URL: https://issues.apache.org/cayenne/browse/CAY-1059
>             Project: Cayenne
>          Issue Type: Bug
>          Components: Cayenne Core Library
>         Environment: OS X 10.5 , derby, remote cayenne
>            Reporter: Marcin Skladaniec
>            Assignee: Andrus Adamchik
>
> Iterating trough all select query results is best done using non-paged query, but sometimes though it happens that the paged list has to be iterated also.
> There is a method in the API resolveAll() which seems to be suited for this case, but unfortunately it does not work on big lists (in our case 50000+ records). I'm not sure if this is a derby thing only, but it seems like the generated expression (set of ObjectIdQueries) is too long.  
> Exception : 
>      [java] java.sql.SQLException: Java exception: ': java.lang.StackOverflowError'.
>      [java] 	at org.apache.derby.impl.jdbc.SQLExceptionFactory.getSQLException(Unknown Source)
>      [java] 	at org.apache.derby.impl.jdbc.Util.newEmbedSQLException(Unknown Source)
>      [java] 	at org.apache.derby.impl.jdbc.Util.javaException(Unknown Source)
>      [java] 	at org.apache.derby.impl.jdbc.TransactionResourceImpl.wrapInSQLException(Unknown Source)
>      [java] 	at org.apache.derby.impl.jdbc.TransactionResourceImpl.handleException(Unknown Source)
>      [java] 	at org.apache.derby.impl.jdbc.EmbedConnection.handleException(Unknown Source)
>      [java] 	at org.apache.derby.impl.jdbc.ConnectionChild.handleException(Unknown Source)
>      [java] 	at org.apache.derby.impl.jdbc.EmbedPreparedStatement.<init>(Unknown Source)
>      [java] 	at org.apache.derby.impl.jdbc.EmbedPreparedStatement20.<init>(Unknown Source)
>      [java] 	at org.apache.derby.impl.jdbc.EmbedPreparedStatement30.<init>(Unknown Source)
>      [java] 	at org.apache.derby.jdbc.Driver30.newEmbedPreparedStatement(Unknown Source)
>      [java] 	at org.apache.derby.impl.jdbc.EmbedConnection.prepareStatement(Unknown Source)
>      [java] 	at org.apache.derby.impl.jdbc.EmbedConnection.prepareStatement(Unknown Source)
>      [java] 	at org.apache.cayenne.conn.ConnectionWrapper.prepareStatement(ConnectionWrapper.java:274)
>      [java] 	at org.apache.cayenne.conn.ConnectionWrapper.prepareStatement(ConnectionWrapper.java:280)
>      [java] 	at org.apache.cayenne.access.TransactionConnectionDecorator.prepareStatement(TransactionConnectionDecorator.java:179)
>      [java] 	at org.apache.cayenne.access.trans.QueryAssembler.createStatement(QueryAssembler.java:118)
>      [java] 	at org.apache.cayenne.access.jdbc.SelectAction.performAction(SelectAction.java:72)
>      [java] 	at org.apache.cayenne.access.DataNodeQueryAction.runQuery(DataNodeQueryAction.java:58)
>      [java] 	at org.apache.cayenne.access.DataNode.performQueries(DataNode.java:230)
>      [java] 	at org.apache.cayenne.access.DataDomainQueryAction.runQuery(DataDomainQueryAction.java:424)
>      [java] 	at org.apache.cayenne.access.DataDomainQueryAction.access$000(DataDomainQueryAction.java:68)
>      [java] 	at org.apache.cayenne.access.DataDomainQueryAction$2.transform(DataDomainQueryAction.java:397)
>      [java] 	at org.apache.cayenne.access.DataDomain.runInTransaction(DataDomain.java:847)
>      [java] 	at org.apache.cayenne.access.DataDomainQueryAction.runQueryInTransaction(DataDomainQueryAction.java:394)
>      [java] 	at org.apache.cayenne.access.DataDomainQueryAction.execute(DataDomainQueryAction.java:120)
>      [java] 	at org.apache.cayenne.access.DataDomain.onQuery(DataDomain.java:740)
>      [java] 	at org.apache.cayenne.util.ObjectContextQueryAction.runQuery(ObjectContextQueryAction.java:317)
>      [java] 	at org.apache.cayenne.util.ObjectContextQueryAction.execute(ObjectContextQueryAction.java:96)
>      [java] 	at org.apache.cayenne.access.DataContext.onQuery(DataContext.java:1336)
>      [java] 	at org.apache.cayenne.access.DataContext.performQuery(DataContext.java:1325)
>      [java] 	at org.apache.cayenne.access.IncrementalFaultList.resolveInterval(IncrementalFaultList.java:353)
>      [java] 	at org.apache.cayenne.access.IncrementalFaultList.subList(IncrementalFaultList.java:687)
>      [java] 	at org.apache.cayenne.access.ClientServerChannelQueryAction.interceptSinglePageQuery(ClientServerChannelQueryAction.java:109)
>      [java] 	at org.apache.cayenne.access.ClientServerChannelQueryAction.execute(ClientServerChannelQueryAction.java:65)
>      [java] 	at org.apache.cayenne.access.ClientServerChannel.onQuery(ClientServerChannel.java:82)
>      [java] 	at org.apache.cayenne.remote.service.DispatchHelper.dispatch(DispatchHelper.java:40)
>      [java] 	at org.apache.cayenne.remote.service.BaseRemoteService.processMessage(BaseRemoteService.java:153)
>      [java] 	at sun.reflect.GeneratedMethodAccessor11.invoke(Unknown Source)
>      [java] 	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
>      [java] 	at java.lang.reflect.Method.invoke(Method.java:585)
>      [java] 	at com.caucho.hessian.server.HessianSkeleton.invoke(HessianSkeleton.java:180)
>      [java] 	at com.caucho.hessian.server.HessianSkeleton.invoke(HessianSkeleton.java:109)
>      [java] 	at com.caucho.hessian.server.HessianServlet.service(HessianServlet.java:393)
>      [java] 	at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:487)
>      [java] 	at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1093)
>      [java] 	at ish.oncourse.server.SecurityFilter.doFilter(SecurityFilter.java:112)
>      [java] 	at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1084)
>      [java] 	at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:360)
>      [java] 	at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216)
>      [java] 	at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:181)
>      [java] 	at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:726)
>      [java] 	at org.mortbay.jetty.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:206)
>      [java] 	at org.mortbay.jetty.handler.HandlerCollection.handle(HandlerCollection.java:114)
>      [java] 	at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
>      [java] 	at org.mortbay.jetty.Server.handle(Server.java:324)
>      [java] 	at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:505)
>      [java] 	at org.mortbay.jetty.HttpConnection$RequestHandler.content(HttpConnection.java:842)
>      [java] 	at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:730)
>      [java] 	at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:205)
>      [java] 	at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:380)
>      [java] 	at org.mortbay.jetty.bio.SocketConnector$Connection.run(SocketConnector.java:228)
>      [java] 	at org.mortbay.thread.BoundedThreadPool$PoolThread.run(BoundedThreadPool.java:450)
>      [java] Caused by: java.lang.StackOverflowError
>      [java] 	at org.apache.derby.impl.sql.compile.BinaryOperatorNode.bindExpression(Unknown Source)
>      [java] 	at org.apache.derby.impl.sql.compile.BinaryLogicalOperatorNode.bindExpression(Unknown Source)
>      [java] 	at org.apache.derby.impl.sql.compile.OrNode.bindExpression(Unknown Source)
>      [java] 	at org.apache.derby.impl.sql.compile.BinaryOperatorNode.bindExpression(Unknown Source)
>      [java] 	at org.apache.derby.impl.sql.compile.BinaryLogicalOperatorNode.bindExpression(Unknown Source)
>      [java] 	at org.apache.derby.impl.sql.compile.OrNode.bindExpression(Unknown Source)
>      [java] 	at org.apache.derby.impl.sql.compile.BinaryOperatorNode.bindExpression(Unknown Source)
>      [java] 	at org.apache.derby.impl.sql.compile.BinaryLogicalOperatorNode.bindExpression(Unknown Source)
>      [java] 	at org.apache.derby.impl.sql.compile.OrNode.bindExpression(Unknown Source)
>      [java] 	at org.apache.derby.impl.sql.compile.BinaryOperatorNode.bindExpression(Unknown Source)
>      [java] 	at org.apache.derby.impl.sql.compile.BinaryLogicalOperatorNode.bindExpression(Unknown Source)
>      [java] 	at org.apache.derby.impl.sql.compile.OrNode.bindExpression(Unknown Source)
>      [java] 	at org.apache.derby.impl.sql.compile.BinaryOperatorNode.bindExpression(Unknown Source)
>      [java] 	at org.apache.derby.impl.sql.compile.BinaryLogicalOperatorNode.bindExpression(Unknown Source)

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.