i working on port of our web application gae , google cloud sql. using mysql 5.6 , devappserver locally during development, , have queries take longer 5 seconds return. there seems sort of default timeout , query fails after approximately 5 seconds in devappserver. have not yet tried running in gae directly (mainly because can't complete page because query keeps failing).
here call stack:
aug 08, 2016 10:34:05 org.glassfish.jersey.server.serverruntime$responder mapexception finer: starting mapping of exception. org.glassfish.jersey.server.internal.process.mappableexception: com.mysql.jdbc.exceptions.jdbc4.communicationsexception: communications link failure last packet received server 5,006 milliseconds ago. last packet sent server 5,001 milliseconds ago. @ org.glassfish.jersey.server.model.internal.abstractjavaresourcemethoddispatcher.maptargettoruntimeex(abstractjavaresourcemethoddispatcher.java:179) @ org.glassfish.jersey.server.model.internal.abstractjavaresourcemethoddispatcher.access$200(abstractjavaresourcemethoddispatcher.java:72) @ org.glassfish.jersey.server.model.internal.abstractjavaresourcemethoddispatcher$1.run(abstractjavaresourcemethoddispatcher.java:149) @ org.glassfish.jersey.server.model.internal.abstractjavaresourcemethoddispatcher.invoke(abstractjavaresourcemethoddispatcher.java:161) @ org.glassfish.jersey.server.model.internal.javaresourcemethoddispatcherprovider$responseoutinvoker.dodispatch(javaresourcemethoddispatcherprovider.java:160) @ org.glassfish.jersey.server.model.internal.abstractjavaresourcemethoddispatcher.dispatch(abstractjavaresourcemethoddispatcher.java:99) @ org.glassfish.jersey.server.model.resourcemethodinvoker.invoke(resourcemethodinvoker.java:389) @ org.glassfish.jersey.server.model.resourcemethodinvoker.apply(resourcemethodinvoker.java:347) @ org.glassfish.jersey.server.model.resourcemethodinvoker.apply(resourcemethodinvoker.java:102) @ org.glassfish.jersey.server.serverruntime$2.run(serverruntime.java:326) @ org.glassfish.jersey.internal.errors$1.call(errors.java:271) @ org.glassfish.jersey.internal.errors$1.call(errors.java:267) @ org.glassfish.jersey.internal.errors.process(errors.java:315) @ org.glassfish.jersey.internal.errors.process(errors.java:297) @ org.glassfish.jersey.internal.errors.process(errors.java:267) @ org.glassfish.jersey.process.internal.requestscope.runinscope(requestscope.java:317) @ org.glassfish.jersey.server.serverruntime.process(serverruntime.java:305) @ org.glassfish.jersey.server.applicationhandler.handle(applicationhandler.java:1154) @ org.glassfish.jersey.servlet.webcomponent.serviceimpl(webcomponent.java:473) @ org.glassfish.jersey.servlet.webcomponent.service(webcomponent.java:427) @ org.glassfish.jersey.servlet.servletcontainer.service(servletcontainer.java:388) @ org.glassfish.jersey.servlet.servletcontainer.service(servletcontainer.java:341) @ org.glassfish.jersey.servlet.servletcontainer.service(servletcontainer.java:228) @ org.mortbay.jetty.servlet.servletholder.handle(servletholder.java:511) @ org.mortbay.jetty.servlet.servlethandler$cachedchain.dofilter(servlethandler.java:1166) @ com.google.appengine.api.socket.dev.devsocketfilter.dofilter(devsocketfilter.java:74) @ org.mortbay.jetty.servlet.servlethandler$cachedchain.dofilter(servlethandler.java:1157) @ com.google.appengine.tools.development.responserewriterfilter.dofilter(responserewriterfilter.java:128) @ org.mortbay.jetty.servlet.servlethandler$cachedchain.dofilter(servlethandler.java:1157) @ com.google.appengine.tools.development.headerverificationfilter.dofilter(headerverificationfilter.java:34) @ org.mortbay.jetty.servlet.servlethandler$cachedchain.dofilter(servlethandler.java:1157) @ com.google.appengine.api.blobstore.dev.serveblobfilter.dofilter(serveblobfilter.java:63) @ org.mortbay.jetty.servlet.servlethandler$cachedchain.dofilter(servlethandler.java:1157) @ com.google.apphosting.utils.servlet.transactioncleanupfilter.dofilter(transactioncleanupfilter.java:50) @ org.mortbay.jetty.servlet.servlethandler$cachedchain.dofilter(servlethandler.java:1157) @ com.google.appengine.tools.development.staticfilefilter.dofilter(staticfilefilter.java:125) @ org.mortbay.jetty.servlet.servlethandler$cachedchain.dofilter(servlethandler.java:1157) @ com.google.appengine.tools.development.devappservermodulesfilter.dodirectrequest(devappservermodulesfilter.java:366) @ com.google.appengine.tools.development.devappservermodulesfilter.dodirectmodulerequest(devappservermodulesfilter.java:349) @ com.google.appengine.tools.development.devappservermodulesfilter.dofilter(devappservermodulesfilter.java:116) @ org.mortbay.jetty.servlet.servlethandler$cachedchain.dofilter(servlethandler.java:1157) @ org.mortbay.jetty.servlet.servlethandler.handle(servlethandler.java:388) @ org.mortbay.jetty.security.securityhandler.handle(securityhandler.java:216) @ org.mortbay.jetty.servlet.sessionhandler.handle(sessionhandler.java:182) @ org.mortbay.jetty.handler.contexthandler.handle(contexthandler.java:765) @ org.mortbay.jetty.webapp.webappcontext.handle(webappcontext.java:418) @ com.google.appengine.tools.development.devappenginewebappcontext.handle(devappenginewebappcontext.java:98) @ org.mortbay.jetty.handler.handlerwrapper.handle(handlerwrapper.java:152) @ com.google.appengine.tools.development.jettycontainerservice$apiproxyhandler.handle(jettycontainerservice.java:511) @ org.mortbay.jetty.handler.handlerwrapper.handle(handlerwrapper.java:152) @ org.mortbay.jetty.server.handle(server.java:326) @ org.mortbay.jetty.httpconnection.handlerequest(httpconnection.java:542) @ org.mortbay.jetty.httpconnection$requesthandler.headercomplete(httpconnection.java:923) @ org.mortbay.jetty.httpparser.parsenext(httpparser.java:547) @ org.mortbay.jetty.httpparser.parseavailable(httpparser.java:212) @ org.mortbay.jetty.httpconnection.handle(httpconnection.java:404) @ org.mortbay.io.nio.selectchannelendpoint.run(selectchannelendpoint.java:409) @ org.mortbay.thread.queuedthreadpool$poolthread.run(queuedthreadpool.java:582) caused by: com.mysql.jdbc.exceptions.jdbc4.communicationsexception: communications link failure last packet received server 5,006 milliseconds ago. last packet sent server 5,001 milliseconds ago. @ sun.reflect.nativeconstructoraccessorimpl.newinstance0(native method) @ sun.reflect.nativeconstructoraccessorimpl.newinstance(nativeconstructoraccessorimpl.java:57) @ sun.reflect.delegatingconstructoraccessorimpl.newinstance(delegatingconstructoraccessorimpl.java:45) @ java.lang.reflect.constructor.newinstance(constructor.java:526) @ com.google.appengine.tools.development.agent.runtime.runtime.newinstance_(runtime.java:142) @ com.google.appengine.tools.development.agent.runtime.runtime.newinstance(runtime.java:150) @ com.mysql.jdbc.util.handlenewinstance(util.java:404) @ com.mysql.jdbc.sqlerror.createcommunicationsexception(sqlerror.java:981) @ com.mysql.jdbc.mysqlio.reuseandreadpacket(mysqlio.java:3465) @ com.mysql.jdbc.mysqlio.reuseandreadpacket(mysqlio.java:3365) @ com.mysql.jdbc.mysqlio.checkerrorpacket(mysqlio.java:3805) @ com.mysql.jdbc.mysqlio.sendcommand(mysqlio.java:2478) @ com.mysql.jdbc.mysqlio.sqlquerydirect(mysqlio.java:2625) @ com.mysql.jdbc.connectionimpl.execsql(connectionimpl.java:2551) @ com.mysql.jdbc.preparedstatement.executeinternal(preparedstatement.java:1861) @ com.mysql.jdbc.preparedstatement.executequery(preparedstatement.java:1962) @ com.mysql.jdbc.callablestatement.executequery(callablestatement.java:858) @ com.[redacted].[redacted].sql.sqlquery.executequery(sqlquery.java:132) @ com.[redacted].[redacted].business.user.interfacemanager.performdqlsearch(interfacemanager.java:216) @ com.[redacted].[redacted].business.user.interfacemanager.performfiltersearch(interfacemanager.java:275) @ com.[redacted].[redacted].rest.client.search.searchfilter(search.java:139) @ sun.reflect.nativemethodaccessorimpl.invoke0(native method) @ sun.reflect.nativemethodaccessorimpl.invoke(nativemethodaccessorimpl.java:57) @ sun.reflect.delegatingmethodaccessorimpl.invoke(delegatingmethodaccessorimpl.java:43) @ java.lang.reflect.method.invoke(method.java:606) @ com.google.appengine.tools.development.agent.runtime.runtime.invoke(runtime.java:130) @ org.glassfish.jersey.server.model.internal.resourcemethodinvocationhandlerfactory$1.invoke(resourcemethodinvocationhandlerfactory.java:81) @ org.glassfish.jersey.server.model.internal.abstractjavaresourcemethoddispatcher$1.run(abstractjavaresourcemethoddispatcher.java:144) ... 55 more caused by: java.net.socketexception: socket operation timed out: api call remote_socket.receive() took long respond , cancelled. @ com.google.appengine.api.socket.socketapihelper.makesynccall(socketapihelper.java:76) @ com.google.appengine.api.socket.appenginesocketimpl.receive(appenginesocketimpl.java:710) @ com.google.appengine.api.socket.appenginesocketinputstream.read(appenginesocketinputstream.java:35) @ com.mysql.jdbc.util.readaheadinputstream.fill(readaheadinputstream.java:100) @ com.mysql.jdbc.util.readaheadinputstream.readfromunderlyingstreamifnecessary(readaheadinputstream.java:143) @ com.mysql.jdbc.util.readaheadinputstream.read(readaheadinputstream.java:173) @ com.mysql.jdbc.mysqlio.readfully(mysqlio.java:2954) @ com.mysql.jdbc.mysqlio.reuseandreadpacket(mysqlio.java:3375) ... 74 more aug 08, 2016 10:34:05 com.[redacted].[redacted].rest.internal.genericexceptionmapper toresponse severe: communications link failure last packet received server 5,006 milliseconds ago. last packet sent server 5,001 milliseconds ago. com.mysql.jdbc.exceptions.jdbc4.communicationsexception: communications link failure last packet received server 5,006 milliseconds ago. last packet sent server 5,001 milliseconds ago. @ sun.reflect.nativeconstructoraccessorimpl.newinstance0(native method) @ sun.reflect.nativeconstructoraccessorimpl.newinstance(nativeconstructoraccessorimpl.java:57) @ sun.reflect.delegatingconstructoraccessorimpl.newinstance(delegatingconstructoraccessorimpl.java:45) @ java.lang.reflect.constructor.newinstance(constructor.java:526) @ com.google.appengine.tools.development.agent.runtime.runtime.newinstance_(runtime.java:142) @ com.google.appengine.tools.development.agent.runtime.runtime.newinstance(runtime.java:150) @ com.mysql.jdbc.util.handlenewinstance(util.java:404) @ com.mysql.jdbc.sqlerror.createcommunicationsexception(sqlerror.java:981) @ com.mysql.jdbc.mysqlio.reuseandreadpacket(mysqlio.java:3465) @ com.mysql.jdbc.mysqlio.reuseandreadpacket(mysqlio.java:3365) @ com.mysql.jdbc.mysqlio.checkerrorpacket(mysqlio.java:3805) @ com.mysql.jdbc.mysqlio.sendcommand(mysqlio.java:2478) @ com.mysql.jdbc.mysqlio.sqlquerydirect(mysqlio.java:2625) @ com.mysql.jdbc.connectionimpl.execsql(connectionimpl.java:2551) @ com.mysql.jdbc.preparedstatement.executeinternal(preparedstatement.java:1861) @ com.mysql.jdbc.preparedstatement.executequery(preparedstatement.java:1962) @ com.mysql.jdbc.callablestatement.executequery(callablestatement.java:858) @ com.[redacted].[redacted].sql.sqlquery.executequery(sqlquery.java:132) @ com.[redacted].[redacted].business.user.interfacemanager.performdqlsearch(interfacemanager.java:216) @ com.[redacted].[redacted].business.user.interfacemanager.performfiltersearch(interfacemanager.java:275) @ com.[redacted].[redacted].rest.client.search.searchfilter(search.java:139) @ sun.reflect.nativemethodaccessorimpl.invoke0(native method) @ sun.reflect.nativemethodaccessorimpl.invoke(nativemethodaccessorimpl.java:57) @ sun.reflect.delegatingmethodaccessorimpl.invoke(delegatingmethodaccessorimpl.java:43) @ java.lang.reflect.method.invoke(method.java:606) @ com.google.appengine.tools.development.agent.runtime.runtime.invoke(runtime.java:130) @ org.glassfish.jersey.server.model.internal.resourcemethodinvocationhandlerfactory$1.invoke(resourcemethodinvocationhandlerfactory.java:81) @ org.glassfish.jersey.server.model.internal.abstractjavaresourcemethoddispatcher$1.run(abstractjavaresourcemethoddispatcher.java:144) @ org.glassfish.jersey.server.model.internal.abstractjavaresourcemethoddispatcher.invoke(abstractjavaresourcemethoddispatcher.java:161) @ org.glassfish.jersey.server.model.internal.javaresourcemethoddispatcherprovider$responseoutinvoker.dodispatch(javaresourcemethoddispatcherprovider.java:160) @ org.glassfish.jersey.server.model.internal.abstractjavaresourcemethoddispatcher.dispatch(abstractjavaresourcemethoddispatcher.java:99) @ org.glassfish.jersey.server.model.resourcemethodinvoker.invoke(resourcemethodinvoker.java:389) @ org.glassfish.jersey.server.model.resourcemethodinvoker.apply(resourcemethodinvoker.java:347) @ org.glassfish.jersey.server.model.resourcemethodinvoker.apply(resourcemethodinvoker.java:102) @ org.glassfish.jersey.server.serverruntime$2.run(serverruntime.java:326) @ org.glassfish.jersey.internal.errors$1.call(errors.java:271) @ org.glassfish.jersey.internal.errors$1.call(errors.java:267) @ org.glassfish.jersey.internal.errors.process(errors.java:315) @ org.glassfish.jersey.internal.errors.process(errors.java:297) @ org.glassfish.jersey.internal.errors.process(errors.java:267) @ org.glassfish.jersey.process.internal.requestscope.runinscope(requestscope.java:317) @ org.glassfish.jersey.server.serverruntime.process(serverruntime.java:305) @ org.glassfish.jersey.server.applicationhandler.handle(applicationhandler.java:1154) @ org.glassfish.jersey.servlet.webcomponent.serviceimpl(webcomponent.java:473) @ org.glassfish.jersey.servlet.webcomponent.service(webcomponent.java:427) @ org.glassfish.jersey.servlet.servletcontainer.service(servletcontainer.java:388) @ org.glassfish.jersey.servlet.servletcontainer.service(servletcontainer.java:341) @ org.glassfish.jersey.servlet.servletcontainer.service(servletcontainer.java:228) @ org.mortbay.jetty.servlet.servletholder.handle(servletholder.java:511) @ org.mortbay.jetty.servlet.servlethandler$cachedchain.dofilter(servlethandler.java:1166) @ com.google.appengine.api.socket.dev.devsocketfilter.dofilter(devsocketfilter.java:74) @ org.mortbay.jetty.servlet.servlethandler$cachedchain.dofilter(servlethandler.java:1157) @ com.google.appengine.tools.development.responserewriterfilter.dofilter(responserewriterfilter.java:128) @ org.mortbay.jetty.servlet.servlethandler$cachedchain.dofilter(servlethandler.java:1157) @ com.google.appengine.tools.development.headerverificationfilter.dofilter(headerverificationfilter.java:34) @ org.mortbay.jetty.servlet.servlethandler$cachedchain.dofilter(servlethandler.java:1157) @ com.google.appengine.api.blobstore.dev.serveblobfilter.dofilter(serveblobfilter.java:63) @ org.mortbay.jetty.servlet.servlethandler$cachedchain.dofilter(servlethandler.java:1157) @ com.google.apphosting.utils.servlet.transactioncleanupfilter.dofilter(transactioncleanupfilter.java:50) @ org.mortbay.jetty.servlet.servlethandler$cachedchain.dofilter(servlethandler.java:1157) @ com.google.appengine.tools.development.staticfilefilter.dofilter(staticfilefilter.java:125) @ org.mortbay.jetty.servlet.servlethandler$cachedchain.dofilter(servlethandler.java:1157) @ com.google.appengine.tools.development.devappservermodulesfilter.dodirectrequest(devappservermodulesfilter.java:366) @ com.google.appengine.tools.development.devappservermodulesfilter.dodirectmodulerequest(devappservermodulesfilter.java:349) @ com.google.appengine.tools.development.devappservermodulesfilter.dofilter(devappservermodulesfilter.java:116) @ org.mortbay.jetty.servlet.servlethandler$cachedchain.dofilter(servlethandler.java:1157) @ org.mortbay.jetty.servlet.servlethandler.handle(servlethandler.java:388) @ org.mortbay.jetty.security.securityhandler.handle(securityhandler.java:216) @ org.mortbay.jetty.servlet.sessionhandler.handle(sessionhandler.java:182) @ org.mortbay.jetty.handler.contexthandler.handle(contexthandler.java:765) @ org.mortbay.jetty.webapp.webappcontext.handle(webappcontext.java:418) @ com.google.appengine.tools.development.devappenginewebappcontext.handle(devappenginewebappcontext.java:98) @ org.mortbay.jetty.handler.handlerwrapper.handle(handlerwrapper.java:152) @ com.google.appengine.tools.development.jettycontainerservice$apiproxyhandler.handle(jettycontainerservice.java:511) @ org.mortbay.jetty.handler.handlerwrapper.handle(handlerwrapper.java:152) @ org.mortbay.jetty.server.handle(server.java:326) @ org.mortbay.jetty.httpconnection.handlerequest(httpconnection.java:542) @ org.mortbay.jetty.httpconnection$requesthandler.headercomplete(httpconnection.java:923) @ org.mortbay.jetty.httpparser.parsenext(httpparser.java:547) @ org.mortbay.jetty.httpparser.parseavailable(httpparser.java:212) @ org.mortbay.jetty.httpconnection.handle(httpconnection.java:404) @ org.mortbay.io.nio.selectchannelendpoint.run(selectchannelendpoint.java:409) @ org.mortbay.thread.queuedthreadpool$poolthread.run(queuedthreadpool.java:582) caused by: java.net.socketexception: socket operation timed out: api call remote_socket.receive() took long respond , cancelled. @ com.google.appengine.api.socket.socketapihelper.makesynccall(socketapihelper.java:76) @ com.google.appengine.api.socket.appenginesocketimpl.receive(appenginesocketimpl.java:710) @ com.google.appengine.api.socket.appenginesocketinputstream.read(appenginesocketinputstream.java:35) @ com.mysql.jdbc.util.readaheadinputstream.fill(readaheadinputstream.java:100) @ com.mysql.jdbc.util.readaheadinputstream.readfromunderlyingstreamifnecessary(readaheadinputstream.java:143) @ com.mysql.jdbc.util.readaheadinputstream.read(readaheadinputstream.java:173) @ com.mysql.jdbc.mysqlio.readfully(mysqlio.java:2954) @ com.mysql.jdbc.mysqlio.reuseandreadpacket(mysqlio.java:3375) ... 74 more aug 08, 2016 10:34:05 com.[redacted].[redacted].rest.internal.responseutils addcommonheaders fine: set response header -> access-control-allow-origin: * aug 08, 2016 10:34:05 org.glassfish.jersey.server.serverruntime$responder mapexception finer: exception 'communications link failure last packet received server 5,006 milliseconds ago. last packet sent server 5,001 milliseconds ago.' has been mapped 'com.[redacted].[redacted].rest.internal.genericexceptionmapper' response 'internal server error' (500:server_error).
it able put break point in mysql driver code , found exception:
java.net.socketexception: socket operation timed out: api call remote_socket.receive() took long respond , cancelled.
socket operation timed out: api call remote_socket.receive() took long respond , cancelled.
now have tried running same sp call using library code outside of gae devappserver , works fine:
package com.[redacted].poc.sql.testsql; import java.util.logging.level; import java.util.logging.logger; import org.apache.commons.lang3.time.stopwatch; import com.[redacted].[redacted].data.datatable; import com.[redacted].[redacted].sql.autoconnection; import com.[redacted].[redacted].sql.databasemanager; import com.[redacted].[redacted].sql.resultsetex; import com.[redacted].[redacted].sql.sqlintegerparameter; import com.[redacted].[redacted].sql.sqlquery; import com.[redacted].[redacted].sql.sqlstringparameter; /** * hello world! * */ public class app { private static final logger logger = logger.getlogger(app.class.getname()); public static void main(string[] args) { try { databasemanager.initialize("jdbc:mysql://127.0.0.1:3306/[redacted]?user=[redacted]&password=[redacted]"); final string xml = [redacted]; final stopwatch swtotal = new stopwatch(); final stopwatch swrs1 = new stopwatch(); final stopwatch swrs2 = new stopwatch(); try (autoconnection db = new autoconnection(databasemanager.getdbconnection())) { assert (db != null); assert (db.getconnection() != null); try (final sqlquery sql = databasemanager.buildstoredprocedurecall(logger, db.getconnection(), "text_search", new sqlintegerparameter("user_id", integer.valueof(2)), new sqlintegerparameter("project_id", integer.valueof(2)), new sqlstringparameter("search_criteria_xml", xml), new sqlintegerparameter("page_number", 1), new sqlintegerparameter("page_size", 25))) { logger.info("running query"); swtotal.start(); swrs1.start(); try (final resultsetex rs = new resultsetex(sql.executequery())) { swrs1.stop(); final datatable dt = databasemanager.copytodatatable(rs); logger.info(string.format("returned %d rows", dt.gettotalrows())); boolean pagingok = false; if (sql.getmoreresults()) { swrs2.start(); try (final resultsetex rs2 = new resultsetex(sql.getresultset())) { swrs2.stop(); if (rs2.next()) { pagingok = true; final int totalrows = rs2.getint("total_rows"); final int lastpagenum = rs2.getint("page_number"); final int lastpagesize = rs2.getint("page_size"); final int totalpages = rs2.getint("total_pages"); final string searchxml = rs2.getstring("search_criteria_xml"); dt.settotalrows(totalrows); dt.setpagenumber(lastpagenum); dt.setpagesize(lastpagesize); dt.settotalpages(totalpages); dt.setsearchxml(searchxml); } } } if (!pagingok) { throw new exception("paging information results missing"); } } } } { logger.info("total elapsed time : " + swtotal.tostring()); logger.info("1st result set time :" + swrs1.tostring()); logger.info("2nd result set time :" + swrs2.tostring()); } } catch (exception ex) { logger.log(level.severe, ex.getmessage(), ex); } } }
here output:
aug 08, 2016 10:42:46 com.[redacted].poc.sql.testsql.app main info: running query aug 08, 2016 10:42:55 com.[redacted].poc.sql.testsql.app main info: returned 25 rows aug 08, 2016 10:42:55 com.[redacted].poc.sql.testsql.app main info: total elapsed time : 00:00:08.900 aug 08, 2016 10:42:55 com.[redacted].poc.sql.testsql.app main info: 1st result set time :00:00:08.876 aug 08, 2016 10:42:55 com.[redacted].poc.sql.testsql.app main info: 2nd result set time :00:00:00.000
so appears me inside gae library forcibly killing sql connection @ socket level. application needs process query result, can't ignore it. has found setting or other way resolve issue? i've gone on gae docs @ nausium, , done plenty of google searching no avail. seems odd me there hard 5 second limit on query unable override. know allow 60 second max timeout on urlfetch , task queue calls, hoping missing something...
i submitted bug google, , verified it's issue, guess not me. :)
https://code.google.com/p/googleappengine/issues/detail?id=13194
Comments
Post a Comment