Подтвердить что ты не робот

Используя Pentaho Kettle, как я могу автоматически повторять запросы на отдых, которые не срабатывают из-за икоты соединения?

Как мы можем заставить Pentaho запрашивать запросы на повторную проверку при ошибках соединения?

У нас есть система Pentaho BI, которая, среди множества источников данных, запрашивает конкретный REST api для более чем 20k вариантов запросов, каждый из которых выполняется.

Предположительно, на большинстве прогонов некоторые из этих запросов будут терпеть неудачу из-за сбоев соединения. Они обычно проявляются в журнале Pentaho как org.pentaho.di.core.exception.KettleException из-за javax.net.ssl.SSLHandshakeException: Remote host closed connection during handshake, что в конечном итоге вызвано java.io.EOFException: SSL peer shut down incorrectly.

После очистки интернета и форумов Pentaho мы не можем найти никаких инструкций по добавлению простого подхода повторения в таких случаях. Волосы вырваны.

Помогите мне StackOverflow, вы - моя единственная надежда!

Обновление 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
4b9b3361

Ответ 1

или использовать обработку ошибок шагов на шаге клиента-клиента и направить поля ошибки на другой шаг клиента клиента.

очевидно, что вы можете повторять столько раз, сколько у вас есть шаги, но в любом случае повторная попытка повторения не повторяется.

Ответ 2

Используйте источник, Люк.

В org.pentaho.di.trans.steps.rest.Rest.processRow(Rest.java:385) вы найдете

    } 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");
        }

    }

Кажется, что вы можете настроить обработку ошибок на основе строки. Кажется, это то, что вам нужно.