TransientFailureException --> Al arrendar tareas de la cola de extracción

Estamos utilizando colas de extracción con backends en nuestro escenario y nuestro backend intenta arrendar tareas de nuestra cola de extracción después de algunos intervalos fijos y, en caso de que no haya tareas, no hace nada y, en caso de que las haya, se procesan. Ayer recibimos esta excepción TransientFailureException en nuestro sistema, que está sucediendo exactamente mientras mi servlet intenta arrendar una tarea de la cola de extracción. Y la excepción siguió llegando hasta que detuvimos nuestro backend.

Nuestro fragmento de código --

{
    Boolean leasedTaskFromFastQueue = true;
    Queue fastQueue = QueueFactory.getQueue("FastQueue");
    Queue slowQueue = QueueFactory.getQueue("SlowQueue");

    List<TaskHandle> tasks = fastQueue.leaseTasks(
        3600, TimeUnit.SECONDS, 1);

    TaskHandle taskHandle = null;

    if(tasks.size() > 0) {

        taskHandle = tasks.get(0);

    }
}

No estamos recibiendo un error en la línea donde alquilamos la tarea de fastQueue, que es una cola de extracción

<queue>
  <name>FastQueue</name>
  <mode>pull</mode>

</queue>

También estoy pegando mi rastro de error, en caso de que eso ayude

com.google.appengine.api.taskqueue.TransientFailureException:
    at           com.google.appengine.api.taskqueue.QueueApiHelper.translateError(QueueApiHelper.java:79)
    at com.google.appengine.api.taskqueue.QueueApiHelper.translateError(QueueApiHelper.java:139)
    at com.google.appengine.api.taskqueue.QueueApiHelper.makeSyncCall(QueueApiHelper.java:53)
    at com.google.appengine.api.taskqueue.QueueImpl.leaseTasksInternal(QueueImpl.java:709)
    at com.google.appengine.api.taskqueue.QueueImpl.leaseTasks(QueueImpl.java:731)
    at com.implementhit.advancedsupport.server.queue.Backend.doGet(Backend.java:50)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
    at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:511)
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1166)
    at com.bitdual.appengine.tools.datastore.server.NamespaceFilter.doFilter(NamespaceFilter.java:96)
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
    at com.google.apphosting.utils.servlet.ParseBlobUploadFilter.doFilter(ParseBlobUploadFilter.java:102)
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
    at com.google.apphosting.runtime.jetty.SaveSessionFilter.doFilter(SaveSessionFilter.java:35)
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
    at com.google.apphosting.utils.servlet.TransactionCleanupFilter.doFilter(TransactionCleanupFilter.java:43)
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
    at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:388)
    at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216)
    at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:182)
    at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:765)
    at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:418)
    at com.google.apphosting.runtime.jetty.AppVersionHandlerMap.handle(AppVersionHandlerMap.java:249)
    at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
    at org.mortbay.jetty.Server.handle(Server.java:326)
    at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:542)
    at org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:923)
    at com.google.apphosting.runtime.jetty.RpcRequestParser.parseAvailable(RpcRequestParser.java:76)
    at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404)
    at com.google.apphosting.runtime.jetty.JettyServletEngineAdapter.serviceRequest(JettyServletEngineAdapter.java:135)
    at com.google.apphosting.runtime.JavaRuntime$RequestRunnable.run(JavaRuntime.java:477)
    at com.google.tracing.TraceContext$TraceContextRunnable.runInContext(TraceContext.java:449)
    at com.google.tracing.TraceContext$TraceContextRunnable$1.run(TraceContext.java:455)
    at com.google.tracing.TraceContext.runInContext(TraceContext.java:695)
    at com.google.tracing.TraceContext$AbstractTraceContextCallback.runInInheritedContextNoUnref(TraceContext.java:333)
    at com.google.tracing.TraceContext$AbstractTraceContextCallback.runInInheritedContext(TraceContext.java:325)
    at com.google.tracing.TraceContext$TraceContextRunnable.run(TraceContext.java:453)
    at com.google.apphosting.runtime.ThreadGroupPool$PoolEntry.run(ThreadGroupPool.java:251)
    at java.lang.Thread.run(Thread.java:679)

preguntado el 04 de julio de 12 a las 05:07

1 Respuestas

También nos pasó a nosotros, TransientFailureException es un error interno que, por lo que pudimos ver, no tenía nada que ver con nuestro código. Terminamos reiniciando automáticamente el backend si ocurrían 50 errores seguidos.

Respondido el 26 de junio de 13 a las 09:06

Sí Incluso no pudimos encontrar una razón detrás de esto, estamos haciendo que nuestro código de back-end duerma durante 5 minutos una vez que encuentra un error y luego comienza a procesarse nuevamente. ¿Puede ayudarme con la lógica que está usando para reiniciar su backend? - Smriti

@Smriti usamos un backend dinámico, una vez que la cola de tareas comienza a comportarse mal, ponemos en cola una tarea eta dentro de 10 minutos que "activará" el backend llamando a una URL con el backend como objetivo. - Shay Erlichmen

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.