Paul Kelly created NIFI-16098:
---------------------------------
Summary: Content can be lost due to content claim truncation
Key: NIFI-16098
URL: https://issues.apache.org/jira/browse/NIFI-16098
Project: Apache NiFi
Issue Type: Bug
Affects Versions: 2.10.0
Reporter: Paul Kelly
Attachments: Content_Loss_Sample-1.json, flowscreenshot-1.png
We recently upgraded some of our servers to NiFi 2.10.0 and started seeing
MissingFlowFileException and ContentNotFoundException occasionally in some of
our flows. Reviewing the app logs, it appears to be related to NIFI-15570
because we see the content claim being truncated while the FlowFile is still
active in a different part of the flow.
Attached is a sample flow definition that reproduces the problem. Generating
two FlowFiles of different sizes (one under the
{{nifi.content.claim.max.appendable.size}} and one big enough to trigger claim
truncation), forking a copy of the FlowFiles both to a leg containing an
ExecuteGroovyScript that simply moves the FlowFile to the REL_SUCCESS
relationship which is set to terminate and to a leg that delays the FlowFile
for more than one minute causes the content in the live leg to get truncated
and lost.
!flowscreenshot.png!
This test was conducted on a brand new deployment of NiFi 2.10.0, where the
only change made to nifi.properties was to disable the content repository
archive ({{{}nifi.content.repository.archive.enabled=false{}}}) in order to
trigger truncation to occur earlier.
App logs show that the content is truncated and could no longer be found.
{code:java}
2026-07-10 00:32:35,854 INFO [NiFi Web Server-114]
o.a.n.c.s.StandardProcessScheduler Starting
RetryFlowFile[id=a2374f4c-f914-320a-ee04-3f3287d7d3e7]
2026-07-10 00:32:35,855 INFO [NiFi Web Server-114]
o.a.n.controller.StandardProcessorNode Desired State for
RetryFlowFile[id=a2374f4c-f914-320a-ee04-3f3287d7d3e7] now set to RUNNING
2026-07-10 00:32:35,856 INFO [NiFi Web Server-114]
o.a.n.c.s.StandardProcessScheduler Starting
GenerateFlowFile[id=41672154-bb8f-3b17-8ecb-023a557f7b68]
2026-07-10 00:32:35,856 INFO [NiFi Web Server-114]
o.a.n.controller.StandardProcessorNode Desired State for
GenerateFlowFile[id=41672154-bb8f-3b17-8ecb-023a557f7b68] now set to RUNNING
2026-07-10 00:32:35,856 INFO [NiFi Web Server-114]
o.a.n.c.s.StandardProcessScheduler Starting
CryptographicHashContent[id=8af51d88-adee-3b8f-851e-b72ab8d752fa]
2026-07-10 00:32:35,857 INFO [NiFi Web Server-114]
o.a.n.controller.StandardProcessorNode Desired State for
CryptographicHashContent[id=8af51d88-adee-3b8f-851e-b72ab8d752fa] now set to
RUNNING
2026-07-10 00:32:35,857 INFO [NiFi Web Server-114]
o.a.n.c.s.StandardProcessScheduler Starting
ExecuteGroovyScript[id=26dab1f8-6aad-3b6a-2d54-741aaecd26f0]
2026-07-10 00:32:35,857 INFO [NiFi Web Server-114]
o.a.n.controller.StandardProcessorNode Desired State for
ExecuteGroovyScript[id=26dab1f8-6aad-3b6a-2d54-741aaecd26f0] now set to RUNNING
2026-07-10 00:32:35,857 INFO [NiFi Web Server-114]
o.a.n.c.s.StandardProcessScheduler Starting
GenerateFlowFile[id=3f3a0a68-e377-32c0-31b6-4f914025e627]
2026-07-10 00:32:35,857 INFO [Timer-Driven Process Thread-4]
o.a.n.c.s.TimerDrivenSchedulingAgent Scheduled
RetryFlowFile[id=a2374f4c-f914-320a-ee04-3f3287d7d3e7] to run with 1 threads
2026-07-10 00:32:35,857 INFO [Timer-Driven Process Thread-8]
o.a.n.c.s.TimerDrivenSchedulingAgent Scheduled
CryptographicHashContent[id=8af51d88-adee-3b8f-851e-b72ab8d752fa] to run with 1
threads
2026-07-10 00:32:35,857 INFO [NiFi Web Server-114]
o.a.n.controller.StandardProcessorNode Desired State for
GenerateFlowFile[id=3f3a0a68-e377-32c0-31b6-4f914025e627] now set to RUNNING
2026-07-10 00:32:35,858 INFO [Timer-Driven Process Thread-10]
o.a.n.c.s.TimerDrivenSchedulingAgent Scheduled
ExecuteGroovyScript[id=26dab1f8-6aad-3b6a-2d54-741aaecd26f0] to run with 1
threads
2026-07-10 00:32:35,862 INFO [Timer-Driven Process Thread-5]
o.a.n.c.s.TimerDrivenSchedulingAgent Scheduled
GenerateFlowFile[id=3f3a0a68-e377-32c0-31b6-4f914025e627] to run with 1 threads
2026-07-10 00:32:35,904 INFO [Timer-Driven Process Thread-3]
o.a.n.c.s.TimerDrivenSchedulingAgent Scheduled
GenerateFlowFile[id=41672154-bb8f-3b17-8ecb-023a557f7b68] to run with 1 threads
2026-07-10 00:32:36,298 INFO [Flow Service Tasks Thread-1]
o.a.nifi.controller.StandardFlowService Saved flow controller
org.apache.nifi.controller.FlowController@74bb4bb5 // Another save pending =
false
2026-07-10 00:32:47,386 INFO [Checkpoint FlowFile Repository]
o.a.n.wali.SequentialAccessWriteAheadLog Checkpointed Write-Ahead Log with 46
Records and 0 Swap Files in 28 milliseconds (Stop-the-world time = 19
milliseconds), max Transaction ID 184
2026-07-10 00:32:47,386 INFO [Checkpoint FlowFile Repository]
o.a.n.c.r.WriteAheadFlowFileRepository Successfully checkpointed FlowFile
Repository with 46 records in 28 milliseconds
2026-07-10 00:33:07,417 INFO [Checkpoint FlowFile Repository]
o.a.n.wali.SequentialAccessWriteAheadLog Checkpointed Write-Ahead Log with 126
Records and 0 Swap Files in 30 milliseconds (Stop-the-world time = 22
milliseconds), max Transaction ID 504
2026-07-10 00:33:07,417 INFO [Checkpoint FlowFile Repository]
o.a.n.c.r.WriteAheadFlowFileRepository Successfully checkpointed FlowFile
Repository with 126 records in 30 milliseconds
2026-07-10 00:33:23,751 INFO [Write-Ahead Local State Provider Maintenance]
o.a.n.wali.SequentialAccessWriteAheadLog Checkpointed Write-Ahead Log with 2
Records and 0 Swap Files in 17 milliseconds (Stop-the-world time = 13
milliseconds), max Transaction ID 4
2026-07-10 00:33:25,165 INFO [FileSystemRepository Workers Thread-4]
o.a.n.c.repository.FileSystemRepository Truncating
StandardResourceClaim[id=1783657966517-22, container=default, section=22] to
20480 bytes because the FlowFile occupying the last 3145728 bytes has been
removed
...
2026-07-10 00:44:01,738 WARN [Timer-Driven Process Thread-7]
o.a.n.c.r.StandardProcessSession Unable to find content for
StandardFlowFileRecord[uuid=88662526-ef54-47d4-9e91-d24c49a47fc7,claim=StandardContentClaim
[resourceClaim=StandardResourceClaim[id=1783657966517-22, container=default,
section=22], offset=20480,
length=3145728],offset=0,name=88662526-ef54-47d4-9e91-d24c49a47fc7,size=3145728];
dropping FlowFile
org.apache.nifi.controller.repository.ContentNotFoundException: Could not find
content for StandardContentClaim
[resourceClaim=StandardResourceClaim[id=1783657966517-22, container=default,
section=22], offset=20480, length=3145728]: Stream contained only 0 bytes but
should have contained 3145728
at
org.apache.nifi.controller.repository.io.FlowFileAccessInputStream.ensureAllContentRead(FlowFileAccessInputStream.java:49)
at
org.apache.nifi.controller.repository.io.FlowFileAccessInputStream.read(FlowFileAccessInputStream.java:84)
at
org.apache.nifi.controller.repository.io.FlowFileAccessInputStream.read(FlowFileAccessInputStream.java:99)
at
org.apache.nifi.controller.repository.io.TaskTerminationInputStream.read(TaskTerminationInputStream.java:62)
at
org.apache.nifi.processors.standard.hash.HashService.traditionalHashStreaming(HashService.java:201)
at
org.apache.nifi.processors.standard.hash.HashService.hashValueStreaming(HashService.java:113)
at
org.apache.nifi.processors.standard.CryptographicHashContent.lambda$onTrigger$0(CryptographicHashContent.java:132)
at
org.apache.nifi.controller.repository.StandardProcessSession.read(StandardProcessSession.java:2738)
at
org.apache.nifi.controller.repository.WeakHashMapProcessSessionFactory$FactoryRetainingProcessSession.read(WeakHashMapProcessSessionFactory.java:260)
at
org.apache.nifi.processors.standard.CryptographicHashContent.onTrigger(CryptographicHashContent.java:132)
at
org.apache.nifi.processor.AbstractProcessor.onTrigger(AbstractProcessor.java:27)
at
org.apache.nifi.controller.StandardProcessorNode.onTrigger(StandardProcessorNode.java:1292)
at
org.apache.nifi.controller.tasks.ConnectableTask.invoke(ConnectableTask.java:229)
at
org.apache.nifi.controller.scheduling.TimerDrivenSchedulingAgent$1.run(TimerDrivenSchedulingAgent.java:102)
at org.apache.nifi.engine.FlowEngine.lambda$wrap$1(FlowEngine.java:105)
at
java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:572)
at
java.base/java.util.concurrent.FutureTask.runAndReset(FutureTask.java:358)
at
java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:305)
at
java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144)
at
java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642)
at java.base/java.lang.Thread.run(Thread.java:1583)
2026-07-10 00:44:01,739 ERROR [Timer-Driven Process Thread-7]
o.a.n.p.s.CryptographicHashContent
CryptographicHashContent[id=8af51d88-adee-3b8f-851e-b72ab8d752fa] Processing
halted: yielding [1 sec]
org.apache.nifi.processor.exception.MissingFlowFileException: Unable to find
content for
StandardFlowFileRecord[uuid=88662526-ef54-47d4-9e91-d24c49a47fc7,claim=StandardContentClaim
[resourceClaim=StandardResourceClaim[id=1783657966517-22, container=default,
section=22], offset=20480,
length=3145728],offset=0,name=88662526-ef54-47d4-9e91-d24c49a47fc7,size=3145728];
dropping FlowFile
at
org.apache.nifi.controller.repository.StandardProcessSession.handleContentNotFound(StandardProcessSession.java:3756)
at
org.apache.nifi.controller.repository.StandardProcessSession.read(StandardProcessSession.java:2753)
at
org.apache.nifi.controller.repository.WeakHashMapProcessSessionFactory$FactoryRetainingProcessSession.read(WeakHashMapProcessSessionFactory.java:260)
at
org.apache.nifi.processors.standard.CryptographicHashContent.onTrigger(CryptographicHashContent.java:132)
at
org.apache.nifi.processor.AbstractProcessor.onTrigger(AbstractProcessor.java:27)
at
org.apache.nifi.controller.StandardProcessorNode.onTrigger(StandardProcessorNode.java:1292)
at
org.apache.nifi.controller.tasks.ConnectableTask.invoke(ConnectableTask.java:229)
at
org.apache.nifi.controller.scheduling.TimerDrivenSchedulingAgent$1.run(TimerDrivenSchedulingAgent.java:102)
at org.apache.nifi.engine.FlowEngine.lambda$wrap$1(FlowEngine.java:105)
at
java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:572)
at
java.base/java.util.concurrent.FutureTask.runAndReset(FutureTask.java:358)
at
java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:305)
at
java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144)
at
java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642)
at java.base/java.lang.Thread.run(Thread.java:1583)
Caused by: org.apache.nifi.controller.repository.ContentNotFoundException:
Could not find content for StandardContentClaim
[resourceClaim=StandardResourceClaim[id=1783657966517-22, container=default,
section=22], offset=20480, length=3145728]: Stream contained only 0 bytes but
should have contained 3145728
at
org.apache.nifi.controller.repository.io.FlowFileAccessInputStream.ensureAllContentRead(FlowFileAccessInputStream.java:49)
at
org.apache.nifi.controller.repository.io.FlowFileAccessInputStream.read(FlowFileAccessInputStream.java:84)
at
org.apache.nifi.controller.repository.io.FlowFileAccessInputStream.read(FlowFileAccessInputStream.java:99)
at
org.apache.nifi.controller.repository.io.TaskTerminationInputStream.read(TaskTerminationInputStream.java:62)
at
org.apache.nifi.processors.standard.hash.HashService.traditionalHashStreaming(HashService.java:201)
at
org.apache.nifi.processors.standard.hash.HashService.hashValueStreaming(HashService.java:113)
at
org.apache.nifi.processors.standard.CryptographicHashContent.lambda$onTrigger$0(CryptographicHashContent.java:132)
at
org.apache.nifi.controller.repository.StandardProcessSession.read(StandardProcessSession.java:2738)
... 13 common frames omitted
2026-07-10 00:44:01,739 WARN [Timer-Driven Process Thread-7]
o.a.n.controller.tasks.ConnectableTask Processing halted: uncaught exception in
Component [CryptographicHashContent[id=8af51d88-adee-3b8f-851e-b72ab8d752fa]]
org.apache.nifi.processor.exception.MissingFlowFileException: Unable to find
content for
StandardFlowFileRecord[uuid=88662526-ef54-47d4-9e91-d24c49a47fc7,claim=StandardContentClaim
[resourceClaim=StandardResourceClaim[id=1783657966517-22, container=default,
section=22], offset=20480,
length=3145728],offset=0,name=88662526-ef54-47d4-9e91-d24c49a47fc7,size=3145728];
dropping FlowFile{code}
Interestingly if you replace the nearly empty ExecuteGroovyScript processor
with an empty UpdateAttribute processor that terminates the success
relationship, the problem does not occur. I have not done much testing to see
which processors can cause it, or examined what might be different about these
two processors that could cause the problem.
Disabling content claim truncation by setting
{{nifi.content.claim.truncation.enabled=false}} in nifi.properties prevents
this problem from occurring.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)