hitachi gratis desde descargar data cero business http rest pentaho kettle

http - gratis - Con Pentaho Kettle, ¿cómo reintento automáticamente las solicitudes de descanso que fallan debido a problemas de conexión?



pentaho desde cero (2)

¿Cómo podemos hacer que Pentaho vuelva a intentar las solicitudes de descanso en los errores de conexión?

Tenemos un sistema Pentaho BI que, entre numerosas fuentes de datos, está consultando una API REST particular para más de 20k variaciones de consulta cada ejecución.

Predeciblemente, en la mayoría de las ejecuciones, algunas de estas solicitudes fallarán debido a problemas de conexión. Estos usualmente se manifiestan en el registro de Pentaho como org.pentaho.di.core.exception.KettleException debido a javax.net.ssl.SSLHandshakeException: Remote host closed connection during handshake , causada en última instancia por java.io.EOFException: SSL peer shut down incorrectly

Después de recorrer los foros de Internet y Pentaho, no podemos encontrar instrucciones sobre cómo agregar un método de reintento simple en casos como este. El pelo está siendo arrancado.

Ayúdame a StackOverflow, eres mi única esperanza!

Actualización 1: Stacktrace:

ERROR 29-11 11:02:17,659 - B - org.pentaho.di.core.exception.KettleException: Can not result from [https://<DOMAIN>/<PATH>?<PARAMS>] javax.net.ssl.SSLHandshakeException: Remote host closed connection during handshake at org.pentaho.di.trans.steps.rest.Rest.callRest(Rest.java:190) at org.pentaho.di.trans.steps.rest.Rest.processRow(Rest.java:385) at org.pentaho.di.trans.step.RunThread.run(RunThread.java:40) at java.lang.Thread.run(Thread.java:662) Caused by: com.sun.jersey.api.client.ClientHandlerException: javax.net.ssl.SSLHandshakeException: Remote host closed connection during handshake at com.sun.jersey.client.apache.DefaultApacheHttpMethodExecutor.executeMethod(DefaultApacheHttpMethodExecutor.java:213) at com.sun.jersey.client.apache.ApacheHttpClientHandler.handle(ApacheHttpClientHandler.java:175) at com.sun.jersey.api.client.filter.HTTPBasicAuthFilter.handle(HTTPBasicAuthFilter.java:81) at com.sun.jersey.api.client.Client.handle(Client.java:648) at com.sun.jersey.api.client.WebResource.handle(WebResource.java:670) at com.sun.jersey.api.client.WebResource.get(WebResource.java:191) at org.pentaho.di.trans.steps.rest.Rest.callRest(Rest.java:141) ... 3 more Caused by: javax.net.ssl.SSLHandshakeException: Remote host closed connection during handshake at com.sun.net.ssl.internal.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:817) at com.sun.net.ssl.internal.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1138) at com.sun.net.ssl.internal.ssl.SSLSocketImpl.writeRecord(SSLSocketImpl.java:632) at com.sun.net.ssl.internal.ssl.AppOutputStream.write(AppOutputStream.java:59) at java.io.BufferedOutputStream.flushBuffer(BufferedOutputStream.java:65) at java.io.BufferedOutputStream.flush(BufferedOutputStream.java:123) at org.apache.commons.httpclient.HttpConnection.flushRequestOutputStream(HttpConnection.java:827) at org.apache.commons.httpclient.MultiThreadedHttpConnectionManager$HttpConnectionAdapter.flushRequestOutputStream(MultiThreadedHttpConnectionManager.java:1525) at org.apache.commons.httpclient.HttpMethodBase.writeRequest(HttpMethodBase.java:1975) at org.apache.commons.httpclient.HttpMethodBase.execute(HttpMethodBase.java:993) at org.apache.commons.httpclient.HttpMethodDirector.executeWithRetry(HttpMethodDirector.java:397) at org.apache.commons.httpclient.HttpMethodDirector.executeMethod(HttpMethodDirector.java:170) at org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.java:396) at com.sun.jersey.client.apache.DefaultApacheHttpMethodExecutor.executeMethod(DefaultApacheHttpMethodExecutor.java:210) ... 9 more Caused by: java.io.EOFException: SSL peer shut down incorrectly at com.sun.net.ssl.internal.ssl.InputRecord.read(InputRecord.java:333) at com.sun.net.ssl.internal.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:798) ... 22 more


Usa la fuente, Luke.

En org.pentaho.di.trans.steps.rest.Rest.processRow (Rest.java:385) encontrará

} catch(KettleException e) { boolean sendToErrorRow=false; String errorMessage = null; if (getStepMeta().isDoingErrorHandling()){ sendToErrorRow = true; errorMessage = e.toString(); } else { logError(BaseMessages.getString(PKG, "Rest.ErrorInStepRunning")+e.getMessage()); //$NON-NLS-1$ setErrors(1); logError(Const.getStackTracker(e)); stopAll(); setOutputDone(); // signal end to receiver(s) return false; } if (sendToErrorRow) { // Simply add this row to the error row putError(getInputRowMeta(), r, 1, errorMessage, null, "Rest001"); } }

Parece que puede configurar el manejo de errores en una base de fila. Esto parece ser lo que buscas.


o utilice la gestión de errores de paso en el paso del cliente de descanso y dirija los campos de error a otro paso del cliente de descanso.

obviamente, eso solo te permite volver a intentarlo tantas veces como tengas pasos, pero no tiene sentido volver a intentarlo más de una vez.