mirror of https://github.com/apache/nifi.git
NIFI-3194: Fixed error handling in PutElasticsearchHttp
Thise closes #1327 Signed-off-by: jpercivall <JPercivall@apache.org>
This commit is contained in:
parent
aef17f9a8b
commit
3b91635398
|
@ -321,9 +321,16 @@ public class PutElasticsearchHttp extends AbstractElasticsearchHttpProcessor {
|
|||
final Response getResponse;
|
||||
try {
|
||||
getResponse = sendRequestToElasticsearch(okHttpClient, url, username, password, "PUT", requestBody);
|
||||
} catch (IllegalStateException | IOException ioe) {
|
||||
throw new ProcessException(ioe);
|
||||
} catch (final Exception e) {
|
||||
logger.error("Routing to {} due to exception: {}", new Object[]{REL_FAILURE.getName(), e}, e);
|
||||
flowFilesToTransfer.forEach((flowFileToTransfer) -> {
|
||||
flowFileToTransfer = session.penalize(flowFileToTransfer);
|
||||
session.transfer(flowFileToTransfer, REL_FAILURE);
|
||||
});
|
||||
flowFilesToTransfer.clear();
|
||||
return;
|
||||
}
|
||||
|
||||
final int statusCode = getResponse.code();
|
||||
|
||||
if (isSuccess(statusCode)) {
|
||||
|
|
|
@ -37,6 +37,7 @@ import org.mockito.invocation.InvocationOnMock;
|
|||
import org.mockito.stubbing.Answer;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.net.ConnectException;
|
||||
import java.util.HashMap;
|
||||
|
||||
import static org.junit.Assert.assertNotNull;
|
||||
|
@ -221,6 +222,25 @@ public class TestPutElasticsearchHttp {
|
|||
runner.assertAllFlowFilesTransferred(PutElasticsearchHttp.REL_RETRY, 1);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testPutElasticSearchOnTriggerWithConnectException() throws IOException {
|
||||
PutElasticsearchTestProcessor processor = new PutElasticsearchTestProcessor(true);
|
||||
processor.setStatus(-1, "Connection Exception");
|
||||
runner = TestRunners.newTestRunner(processor); // simulate failures
|
||||
runner.setValidateExpressionUsage(false);
|
||||
runner.setProperty(AbstractElasticsearchHttpProcessor.ES_URL, "http://127.0.0.1:9200");
|
||||
runner.setProperty(PutElasticsearchHttp.INDEX, "doc");
|
||||
runner.setProperty(PutElasticsearchHttp.TYPE, "status");
|
||||
runner.setProperty(PutElasticsearchHttp.BATCH_SIZE, "1");
|
||||
runner.setProperty(PutElasticsearchHttp.ID_ATTRIBUTE, "doc_id");
|
||||
|
||||
runner.enqueue(docExample, new HashMap<String, String>() {{
|
||||
put("doc_id", "28039652140");
|
||||
}});
|
||||
runner.run(1, true, true);
|
||||
runner.assertAllFlowFilesTransferred(PutElasticsearchHttp.REL_FAILURE, 1);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testPutElasticsearchOnTriggerWithNoIdAttribute() throws IOException {
|
||||
runner = TestRunners.newTestRunner(new PutElasticsearchTestProcessor(true)); // simulate failures
|
||||
|
@ -328,6 +348,8 @@ public class TestPutElasticsearchHttp {
|
|||
|
||||
@Override
|
||||
public Call answer(InvocationOnMock invocationOnMock) throws Throwable {
|
||||
final Call call = mock(Call.class);
|
||||
if (statusCode != -1) {
|
||||
Request realRequest = (Request) invocationOnMock.getArguments()[0];
|
||||
StringBuilder sb = new StringBuilder("{\"took\": 1, \"errors\": \"");
|
||||
sb.append(responseHasFailures);
|
||||
|
@ -351,8 +373,11 @@ public class TestPutElasticsearchHttp {
|
|||
.message(statusMessage)
|
||||
.body(ResponseBody.create(MediaType.parse("application/json"), sb.toString()))
|
||||
.build();
|
||||
final Call call = mock(Call.class);
|
||||
|
||||
when(call.execute()).thenReturn(mockResponse);
|
||||
} else {
|
||||
when(call.execute()).thenThrow(ConnectException.class);
|
||||
}
|
||||
return call;
|
||||
}
|
||||
});
|
||||
|
|
Loading…
Reference in New Issue