On Tue, Jun 21, 2011 at 6:33 PM, Tom Phillips <tphill0...@gmail.com> wrote: > Hi Jon, > > I raised issue http://code.google.com/p/googleappengine/issues/detail?id=5214 > on the non-loading requests resulting in instance deaths with > threadsafe on. It was a bit more verbose than it probably needs to be, > but it describes the problem.
Thanks! It's very helpful. > > If anyone knows another way to detect loading requests that works with > threadsafe on, let me know. There is no guarantee that the servlet > context is loaded during the loading request, so that's out for now, > but if anyone knows another trick it will create options to work > around the problem until a fix is available. > > Otherwise, I can disable threadsafe for now. But I'm reluctant - the > efficiency is strangely reassuring.. Of course, you've got another workaround so that's better than turning off threadsafe. Makes sense. > > /Tom > > > > On Jun 21, 1:25 pm, Jon McAlister <jon...@google.com> wrote: >> Hi Tom, >> >> I'm not sure about the servlet context listener code. >> >> However, thanks for pointing out the behavior of the interaction of >> loading requests and threadsafe apps. We are indeed sending down >> non-loading-requests while the instance is still processing the >> loading request. This is problematic (for the reasons you list) and >> something we didn't anticipate. We'll try to get a fix in to one of >> the next releases. If you file it as an external issue we can use that >> to notify when its closed. Until then your suggested workaround is >> good, the other known workaround being to turn off threadsafe. >> >> Thanks for bringing this to our attention. >> >> On Sun, Jun 19, 2011 at 5:11 PM, Tom Phillips <tphill0...@gmail.com> wrote: >> > The GAE documentation says you can detect loading requests like this: >> >> > // web.xml snippet >> > <listener> >> > <listener-class> >> > com.example.LogLoadingRequest >> > </listener-class> >> > </listener> >> >> > // LogLoadingRequest.java >> > public class LogLoadingRequest implements ServletContextListener { >> > private static final Logger logger = >> > Logger.getLogger(LogLoadingRequest.class.getName()); >> > public void contextInitialized(ServletContextEvent sce) { >> > logger.log(Level.INFO, "Loading request occuring."); >> > } >> >> > public void contextDestroyed(ServletContextEvent sce) { >> > } >> > } >> >> > But I'm finding from my logs that what GAE thinks is a loading request >> > (identified in log as loading_request=1) and which is given longer >> > deadline, does NOT always match the request that logs the above >> > "Loading request occuring." when Threadsafe is on. >> >> > Should it, or is this method obsolete for threadsafe instances? Is >> > there some other way I can detect loading vs non-loading requests with >> > threadsafe on? >> >> > With threadsafe on, non-loading requests are being assigned by GAE to >> > instances while the loading request is still happening, resulting in >> > all sort of (Hard)DeadlineExceeded issues in the non-loading requests. >> > Reason is, loading requests are showing huge slow down and variance in >> > loading times lately, often exceeding the 30 seconds that non-loading >> > request are allowed - even though in my case loading should only take >> > about 4 seconds (jaxb,PMF) plus whatever classloading and jvm startup >> > takes. Worst thing is, these exceptions bring down the instance before >> > loading can even finish, requiring multiple startup attempts. I'm >> > trying to work around it by detecting loading vs. non-loading requests >> > and in non-loading either doing a no-op if not critical, or proxying >> > via urlfetch through to a backend until the loading request is >> > complete. >> >> > -- >> > You received this message because you are subscribed to the Google Groups >> > "Google App Engine for Java" group. >> > To post to this group, send email to >> > google-appengine-java@googlegroups.com. >> > To unsubscribe from this group, send email to >> > google-appengine-java+unsubscr...@googlegroups.com. >> > For more options, visit this group >> > athttp://groups.google.com/group/google-appengine-java?hl=en. >> >> > > -- > You received this message because you are subscribed to the Google Groups > "Google App Engine for Java" group. > To post to this group, send email to google-appengine-java@googlegroups.com. > To unsubscribe from this group, send email to > google-appengine-java+unsubscr...@googlegroups.com. > For more options, visit this group at > http://groups.google.com/group/google-appengine-java?hl=en. > > -- You received this message because you are subscribed to the Google Groups "Google App Engine for Java" group. To post to this group, send email to google-appengine-java@googlegroups.com. To unsubscribe from this group, send email to google-appengine-java+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/google-appengine-java?hl=en.