Mark Payne created NIFI-9741:
--------------------------------
Summary: Encountering "IOException: Stream is closed" when using
Avro Writer
Key: NIFI-9741
URL: https://issues.apache.org/jira/browse/NIFI-9741
Project: Apache NiFi
Issue Type: Bug
Reporter: Mark Payne
The Avro Writer (WriteAvroResultWithExternalSchema) has a close method that is
not idempotent. As a result, if the close() method is called multiple times, it
can cause Exceptions to be thrown and potentially even cause data duplication
or corruption, depending on the underlying OutputStream, as it could flush data
to an OutputStream, and the OutputStream may block close() methods; a second
call to WriteAvroResultWithExternalSchema.close() could then flush more data to
the stream.
This can produce a stack trace such as:
{code:java}
2022-03-01 11:06:11,677 ERROR [Timer-Driven Process Thread-5]
o.a.n.processors.standard.ValidateRecord
ValidateRecord[id=39b23e8a-5b1a-110d-3bcc-5dca95722468] Failed to close Record
Writer: java.io.IOException: Stream is closed
↳ causes: org.apache.nifi.processor.exception.FlowFileAccessException: Failed
to write to Content Repository for
StandardFlowFileRecord[uuid=b57f14e0-2498-4e9d-8730-4b2e0c9dc874,claim=,offset=0,name=0076a439-5911-4178-b0e6-c7296c0f09ae,size=0]
org.apache.nifi.processor.exception.FlowFileAccessException: Failed to write to
Content Repository for
StandardFlowFileRecord[uuid=b57f14e0-2498-4e9d-8730-4b2e0c9dc874,claim=,offset=0,name=0076a439-5911-4178-b0e6-c7296c0f09ae,size=0]
at
org.apache.nifi.controller.repository.StandardProcessSession$7.write(StandardProcessSession.java:2994)
at
org.apache.nifi.controller.repository.io.TaskTerminationOutputStream.write(TaskTerminationOutputStream.java:62)
at
java.io.BufferedOutputStream.flushBuffer(BufferedOutputStream.java:82)
at java.io.BufferedOutputStream.flush(BufferedOutputStream.java:140)
at
org.apache.avro.io.BufferedBinaryEncoder$OutputStreamSink.innerFlush(BufferedBinaryEncoder.java:220)
at
org.apache.avro.io.BufferedBinaryEncoder.flush(BufferedBinaryEncoder.java:85)
at
org.apache.avro.io.BlockingBinaryEncoder.flush(BlockingBinaryEncoder.java:251)
at
org.apache.nifi.avro.WriteAvroResultWithExternalSchema.flush(WriteAvroResultWithExternalSchema.java:95)
at
org.apache.nifi.avro.WriteAvroResultWithExternalSchema.close(WriteAvroResultWithExternalSchema.java:112)
at sun.reflect.GeneratedMethodAccessor444.invoke(Unknown Source)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at
org.apache.nifi.controller.service.StandardControllerServiceInvocationHandler.invoke(StandardControllerServiceInvocationHandler.java:254)
at
org.apache.nifi.controller.service.StandardControllerServiceInvocationHandler.access$100(StandardControllerServiceInvocationHandler.java:38)
at
org.apache.nifi.controller.service.StandardControllerServiceInvocationHandler$ProxiedReturnObjectInvocationHandler.invoke(StandardControllerServiceInvocationHandler.java:240)
at com.sun.proxy.$Proxy193.close(Unknown Source)
at
org.apache.nifi.processors.standard.ValidateRecord.closeQuietly(ValidateRecord.java:459)
at
org.apache.nifi.processors.standard.ValidateRecord.onTrigger(ValidateRecord.java:434)
at
org.apache.nifi.processor.AbstractProcessor.onTrigger(AbstractProcessor.java:27)
at
org.apache.nifi.controller.StandardProcessorNode.onTrigger(StandardProcessorNode.java:1284)
at
org.apache.nifi.controller.tasks.ConnectableTask.invoke(ConnectableTask.java:214)
at
org.apache.nifi.controller.scheduling.TimerDrivenSchedulingAgent$1.run(TimerDrivenSchedulingAgent.java:103)
at org.apache.nifi.engine.FlowEngine$2.run(FlowEngine.java:110)
at
java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:308)
at
java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:180)
at
java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:294)
at
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
Caused by: java.io.IOException: Stream is closed
at
org.apache.nifi.controller.repository.io.DisableOnCloseOutputStream.write(DisableOnCloseOutputStream.java:46)
at
org.apache.nifi.stream.io.ByteCountingOutputStream.write(ByteCountingOutputStream.java:49)
at
org.apache.nifi.controller.repository.StandardProcessSession$7.write(StandardProcessSession.java:2989)
... 29 common frames omitted {code}
--
This message was sent by Atlassian Jira
(v8.20.1#820001)