[ https://issues.apache.org/jira/browse/NIFI-5465?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16558418#comment-16558418 ]
ASF GitHub Bot commented on NIFI-5465: -------------------------------------- Github user markap14 commented on the issue: https://github.com/apache/nifi/pull/2918 An easy way to test the PR is to try running the following code (updating the URL in the second line of code to point to a running HandleHttpRequest processor): ``` public static void main(final String[] args) throws Exception { final URL url = new URL("http://localhost:8153/test"); final URLConnection conn = url.openConnection(); final HttpURLConnection connection = (HttpURLConnection) conn; connection.setRequestMethod("POST"); connection.setDoOutput(true); connection.setFixedLengthStreamingMode(1_000_000); connection.connect(); final OutputStream out = connection.getOutputStream(); for (int i=0; i < 500_000; i++) { out.write('A'); } System.out.println("Sleeping..."); Thread.sleep(35000); for (int i=0; i < 500_000; i++) { out.write('A'); } // read the output from the server final BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream())); final StringBuilder stringBuilder = new StringBuilder(); String line = null; while ((line = reader.readLine()) != null) { stringBuilder.append(line + "\n"); } System.out.println(stringBuilder.toString()); } ``` Before the PR, this caused an Exception after sleeping and NiFi did not handle the request. After the PR, NiFI handles it properly and returns the expected response. > HandleHttpRequest times out requests if it goes more than 30 seconds without > receiving data, regardless of the configured Request Timeout > ----------------------------------------------------------------------------------------------------------------------------------------- > > Key: NIFI-5465 > URL: https://issues.apache.org/jira/browse/NIFI-5465 > Project: Apache NiFi > Issue Type: Bug > Components: Extensions > Reporter: Mark Payne > Assignee: Mark Payne > Priority: Major > Fix For: 1.8.0 > > > The HTTP Context Map allows the user to configure the "Request Timeout" but > if data is written to the HTTP Request, then pauses for more than 30 seconds, > then writes more data, then the request will timeout. We should allow request > to go up to the configured "Request Timeout" before throwing a > TimeoutException. The stack trace seen is: > {code:java} > org.apache.nifi.processor.exception.FlowFileAccessException: Failed to import > data from > HttpInputOverHTTP@5f73086c[c=16384,q=0,[0]=null,s=ERROR:java.util.concurrent.TimeoutException: > Idle timeout expired: 30003/30000 ms] for > StandardFlowFileRecord[uuid=2c04929e-cd59-46b6-8612-c437c0230591,claim=,offset=0,name=84593375189600,size=0] > due to org.apache.nifi.processor.exception.FlowFileAccessException: Unable > to create ContentClaim due to java.io.IOException: > java.util.concurrent.TimeoutException: Idle timeout expired: 30003/30000 ms; > rolling back session: {} > org.apache.nifi.processor.exception.FlowFileAccessException: Failed to import > data from > HttpInputOverHTTP@5f73086c[c=16384,q=0,[0]=null,s=ERROR:java.util.concurrent.TimeoutException: > Idle timeout expired: 30003/30000 ms] for > StandardFlowFileRecord[uuid=2c04929e-cd59-46b6-8612-c437c0230591,claim=,offset=0,name=84593375189600,size=0] > due to org.apache.nifi.processor.exception.FlowFileAccessException: Unable > to create ContentClaim due to java.io.IOException: > java.util.concurrent.TimeoutException: Idle timeout expired: 30003/30000 ms > at > org.apache.nifi.controller.repository.StandardProcessSession.importFrom(StandardProcessSession.java:2942) > > at > org.apache.nifi.processors.standard.HandleHttpRequest.onTrigger(HandleHttpRequest.java:507) > > at > org.apache.nifi.processor.AbstractProcessor.onTrigger(AbstractProcessor.java:27) > > at > org.apache.nifi.controller.StandardProcessorNode.onTrigger(StandardProcessorNode.java:1122) > > at > org.apache.nifi.controller.tasks.ContinuallyRunProcessorTask.call(ContinuallyRunProcessorTask.java:147) > > at > org.apache.nifi.controller.tasks.ContinuallyRunProcessorTask.call(ContinuallyRunProcessorTask.java:47) > > at > org.apache.nifi.controller.scheduling.TimerDrivenSchedulingAgent$1.run(TimerDrivenSchedulingAgent.java:128) > > at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source) > at java.util.concurrent.FutureTask.runAndReset(Unknown Source) > at > java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(Unknown > Source) > at > java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(Unknown > Source) > at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) > at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) > at java.lang.Thread.run(Unknown Source) > Caused by: org.apache.nifi.processor.exception.FlowFileAccessException: > Unable to create ContentClaim due to java.io.IOException: > java.util.concurrent.TimeoutException: Idle timeout expired: 30003/30000 ms > at > org.apache.nifi.controller.repository.StandardProcessSession.importFrom(StandardProcessSession.java:2935) > > ... 13 common frames omitted > Caused by: java.io.IOException: java.util.concurrent.TimeoutException: Idle > timeout expired: 30003/30000 ms > at > org.eclipse.jetty.server.HttpInput$ErrorState.noContent(HttpInput.java:1047) > at org.eclipse.jetty.server.HttpInput.read(HttpInput.java:307) > at java.io.InputStream.read(Unknown Source) > at org.apache.nifi.stream.io.StreamUtils.copy(StreamUtils.java:35) > at > org.apache.nifi.controller.repository.FileSystemRepository.importFrom(FileSystemRepository.java:734) > > at > org.apache.nifi.controller.repository.StandardProcessSession.importFrom(StandardProcessSession.java:2932) > > ... 13 common frames omitted > Caused by: java.util.concurrent.TimeoutException: Idle timeout expired: > 30003/30000 ms > at org.eclipse.jetty.io.IdleTimeout.checkIdleTimeout(IdleTimeout.java:166) > at org.eclipse.jetty.io.IdleTimeout$1.run(IdleTimeout.java:50) > at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source) > at java.util.concurrent.FutureTask.run(Unknown Source) > at > java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(Unknown > Source) > ... 4 common frames omitted{code} -- This message was sent by Atlassian JIRA (v7.6.3#76005)