Sorry for the late response, somehow I missed your reply.

No, just using the default GAE stuff with annotations on the persisted
objects.

Code is under http://code.google.com/p/appengine-closure-chat/, app ID
is ptucker.

Code:

Persisted objects:
http://code.google.com/p/appengine-closure-chat/source/browse/trunk/src/com/honkentuber/chat/Room.java
http://code.google.com/p/appengine-closure-chat/source/browse/trunk/src/com/honkentuber/chat/Message.java

See selectMessages and persistMessage here:
http://code.google.com/p/appengine-closure-chat/source/browse/trunk/src/com/honkentuber/chat/ChatServlet.java

All other classes under 
http://code.google.com/p/appengine-closure-chat/source/browse/trunk/src.

Thanks for taking a look,
Philip


On Dec 23 2009, 5:46 pm, "Jason (Google)" <[email protected]> wrote:
> This is definitely odd. Are you using any frameworks or libraries aside from
> the App Engine-supplied JDO/JPA implementation? I assume you're using a
> query to fetch the most recent n messages sorted by a date -- can you reply
> with your app ID, a snippet of your fetching and persisting code, and any
> extra information that might be relevant?
>
> Thanks,
> - Jason
>
>
>
> On Mon, Dec 21, 2009 at 11:51 PM, Philip Tucker <[email protected]> wrote:
> > I've got a very simple application with very little data in it. It's a
> > simple chat app with 2 tables, Room and Message. Each server requests
> > stores a message and returns the most recent n messages, where n is on
> > the order of 1-5.
>
> > Each request is taking 2-3 seconds. I'm doing 3 datastore
> > transactions; look up room by ID, insert message, look up most recent
> > n message by room ID. I know there's some optimization I could do to
> > skip the room lookup, but this is still way slower than I would
> > expect.
>
> > I've also been getting a few of these errors, maybe 1/20 requests or
> > so:
>
> > com.honkentuber.Servlet doIt: error on ChatServlet
> > com.google.appengine.api.datastore.DatastoreTimeoutException: Unknown
> >        at
> > com.google.appengine.api.datastore.DatastoreApiHelper.translateError
> > (DatastoreApiHelper.java:42)
> >        at
> > com.google.appengine.api.datastore.DatastoreApiHelper.makeSyncCall
> > (DatastoreApiHelper.java:60)
> >        at com.google.appengine.api.datastore.DatastoreServiceImpl$2.run
> > (DatastoreServiceImpl.java:173)
> >        at
> > com.google.appengine.api.datastore.TransactionRunner.runInTransaction
> > (TransactionRunner.java:30)
> >        at com.google.appengine.api.datastore.DatastoreServiceImpl.put
> > (DatastoreServiceImpl.java:161)
> >        at com.google.appengine.api.datastore.DatastoreServiceImpl.put
> > (DatastoreServiceImpl.java:141)
> >        at com.google.appengine.api.datastore.DatastoreServiceImpl.put
> > (DatastoreServiceImpl.java:133)
> >        at
>
> > org.datanucleus.store.appengine.RuntimeExceptionWrappingDatastoreService.pu 
> > t
> > (RuntimeExceptionWrappingDatastoreService.java:93)
> >        at org.datanucleus.store.appengine.DatastorePersistenceHandler.put
> > (DatastorePersistenceHandler.java:165)
> >        at org.datanucleus.store.appengine.DatastorePersistenceHandler.put
> > (DatastorePersistenceHandler.java:112)
> >        at
> > org.datanucleus.store.appengine.DatastorePersistenceHandler.insertObjects
> > (DatastorePersistenceHandler.java:239)
> >        at
> > org.datanucleus.store.appengine.DatastorePersistenceHandler.insertObject
> > (DatastorePersistenceHandler.java:225)
> >        at org.datanucleus.state.JDOStateManagerImpl.internalMakePersistent
> > (JDOStateManagerImpl.java:3185)
> >        at org.datanucleus.state.JDOStateManagerImpl.makePersistent
> > (JDOStateManagerImpl.java:3161)
> >        at org.datanucleus.ObjectManagerImpl.persistObjectInternal
> > (ObjectManagerImpl.java:1298)
> >        at org.datanucleus.ObjectManagerImpl.persistObject
> > (ObjectManagerImpl.java:1175)
> >        at org.datanucleus.jdo.JDOPersistenceManager.jdoMakePersistent
> > (JDOPersistenceManager.java:669)
> >        at org.datanucleus.jdo.JDOPersistenceManager.makePersistent
> > (JDOPersistenceManager.java:694)
> >        at com.honkentuber.chat.ChatServlet.persistMessage(ChatServlet.java:
> > 83)
> >        at com.honkentuber.chat.ChatServlet.newJspResponse(ChatServlet.java:
> > 21)
> >        at com.honkentuber.Servlet.doIt(Servlet.java:42)
> >        at com.honkentuber.Servlet.doPost(Servlet.java:29)
> >        at javax.servlet.http.HttpServlet.service(HttpServlet.java:713)
> >        at javax.servlet.http.HttpServlet.service(HttpServlet.java:806)
> >        at
> > org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:
> > 487)
> >        at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter
> > (ServletHandler.java:1093)
> >        at
> > com.google.apphosting.utils.servlet.ParseBlobUploadFilter.doFilter
> > (ParseBlobUploadFilter.java:97)
> >        at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter
> > (ServletHandler.java:1084)
> >        at com.google.apphosting.runtime.jetty.SaveSessionFilter.doFilter
> > (SaveSessionFilter.java:35)
> >        at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter
> > (ServletHandler.java:1084)
> >        at
> > com.google.apphosting.utils.servlet.TransactionCleanupFilter.doFilter
> > (TransactionCleanupFilter.java:43)
> >        at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter
> > (ServletHandler.java:1084)
> >        at org.mortbay.jetty.servlet.ServletHandler.handle
> > (ServletHandler.java:360)
> >        at org.mortbay.jetty.security.SecurityHandler.handle
> > (SecurityHandler.java:216)
> >        at org.mortbay.jetty.servlet.SessionHandler.handle
> > (SessionHandler.java:181)
> >        at org.mortbay.jetty.handler.ContextHandler.handle
> > (ContextHandler.java:712)
> >        at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:
> > 405)
> >        at com.google.apphosting.runtime.jetty.AppVersionHandlerMap.handle
> > (AppVersionHandlerMap.java:238)
> >        at org.mortbay.jetty.handler.HandlerWrapper.handle
> > (HandlerWrapper.java:139)
> >        at org.mortbay.jetty.Server.handle(Server.java:313)
> >        at
> > org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:
> > 506)
> >        at org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete
> > (HttpConnection.java:830)
> >        at
> > com.google.apphosting.runtime.jetty.RpcRequestParser.parseAvailable
> > (RpcRequestParser.java:76)
> >        at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:381)
> >        at
>
> > com.google.apphosting.runtime.jetty.JettyServletEngineAdapter.serviceReques 
> > t
> > (JettyServletEngineAdapter.java:135)
> >        at com.google.apphosting.runtime.JavaRuntime.handleRequest
> > (JavaRuntime.java:235)
> >        at com.google.apphosting.base.RuntimePb$EvaluationRuntime
> > $6.handleBlockingRequest(RuntimePb.java:5235)
> >        at com.google.apphosting.base.RuntimePb$EvaluationRuntime
> > $6.handleBlockingRequest(RuntimePb.java:5233)
> >        at com.google.net.rpc.impl.BlockingApplicationHandler.handleRequest
> > (BlockingApplicationHandler.java:24)
> >        at com.google.net.rpc.impl.RpcUtil.runRpcInApplication(RpcUtil.java:
> > 363)
> >        at com.google.net.rpc.impl.Server$2.run(Server.java:838)
> >        at com.google.tracing.LocalTraceSpanRunnable.run
> > (LocalTraceSpanRunnable.java:56)
> >        at com.google.tracing.LocalTraceSpanBuilder.internalContinueSpan
> > (LocalTraceSpanBuilder.java:536)
> >        at com.google.net.rpc.impl.Server.startRpc(Server.java:793)
> >        at com.google.net.rpc.impl.Server.processRequest(Server.java:368)
> >        at com.google.net.rpc.impl.ServerConnection.messageReceived
> > (ServerConnection.java:448)
> >        at com.google.net.rpc.impl.RpcConnection.parseMessages
> > (RpcConnection.java:319)
> >        at com.google.net.rpc.impl.RpcConnection.dataReceived
> > (RpcConnection.java:290)
> >        at com.google.net.async.Connection.handleReadEvent(Connection.java:
> > 466)
> >        at com.google.net.async.EventDispatcher.processNetworkEvents
> > (EventDispatcher.java:759)
> >        at com.google.net.async.EventDispatcher.internalLoop
> > (EventDispatcher.java:205)
> >        at com.google.net.async.EventDispatcher.loop(EventDispatcher.java:
> > 101)
> >        at com.google.net.rpc.RpcService.runUntilServerShutdown
> > (RpcService.java:251)
> >        at com.google.apphosting.runtime.JavaRuntime$RpcRunnable.run
> > (JavaRuntime.java:394)
> >        at java.lang.Thread.run(Unknown Source)
>
> > --
>
> > You received this message because you are subscribed to the Google Groups
> > "Google App Engine" group.
> > To post to this group, send email to [email protected].
> > To unsubscribe from this group, send email to
> > [email protected]<google-appengine%2Bunsubscrib 
> > [email protected]>
> > .
> > For more options, visit this group at
> >http://groups.google.com/group/google-appengine?hl=en.
-- 
You received this message because you are subscribed to the Google Groups 
"Google App Engine" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/google-appengine?hl=en.


Reply via email to