[ 
https://issues.apache.org/jira/browse/NIFI-12468?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17793011#comment-17793011
 ] 

Michael W Moser commented on NIFI-12468:
----------------------------------------

Hi [~exceptionfactory]  I was able to duplicate this with a simpler scenario.  
Connect a debugger to NiFi and set a breakpoint in the UpdateAttribute 
onPropertyModified method.  Drop an UpdateAttribute on the graph and modify the 
"Delete Attributes Expression" property.  The breakpoint should be hit, and I 
waited more than 5 minutes.  Then I released the breakpoint and got the error.

I admit this is a contrived example, but exceptions happen in strange ways in 
real world scenarios too.  I thought it was best to report this, and if the 
appropriate action is to restart NiFi, then at least this won't surprise us in 
the future.

> Xodus Flow Configuration History does not recover from exception
> ----------------------------------------------------------------
>
>                 Key: NIFI-12468
>                 URL: https://issues.apache.org/jira/browse/NIFI-12468
>             Project: Apache NiFi
>          Issue Type: Bug
>    Affects Versions: 2.0.0-M1
>            Reporter: Michael W Moser
>            Priority: Major
>
> I caused Xodus to timeout writing a transation to flow configuration history. 
>  Thereafter, every operation that would update flow configuration history, or 
> trying to view flow configuration history, continues to throw an exception.  
> The UI shows "An unexpected error has occurred. Please check the logs for 
> additional details" based on a 500 response from the REST API 
> /nifi-api/flow/history
> I had to restart NiFi to recover. Hopefully, this code can be improved to 
> detect exceptions and recover on its own.
> I caused the initial problem by setting a breakpoint while a debugger was 
> attached to NiFi.  I dragged a new Process Group onto the graph from a flow 
> definition file and let it sit at the breakpoint for a while.
> {noformat}
> 2023-12-04 16:32:00,448 ERROR [NiFi Web Server-466] 
> jetbrains.exodus.env.EnvironmentImpl Failed to flush transaction
> java.io.IOException: Stream Closed
>     at java.base/java.io.RandomAccessFile.length0(Native Method)
>     at java.base/java.io.RandomAccessFile.length(RandomAccessFile.java:653)
>     at jetbrains.exodus.io.FileDataWriter.ensureFile(FileDataWriter.kt:172)
>     at jetbrains.exodus.io.FileDataWriter.write(FileDataWriter.kt:59)
>     at 
> jetbrains.exodus.log.BufferedDataWriter.writePage(BufferedDataWriter.java:264)
>     at 
> jetbrains.exodus.log.BufferedDataWriter.flush(BufferedDataWriter.java:176)
>     at jetbrains.exodus.log.Log.flush(Log.kt:631)
>     at jetbrains.exodus.log.Log.flush$default(Log.kt:630)
>     at jetbrains.exodus.log.Log.flush(Log.kt)
>     at 
> jetbrains.exodus.env.EnvironmentImpl.flushTransaction(EnvironmentImpl.java:731)
>     at 
> jetbrains.exodus.env.EnvironmentImpl.commitTransaction(EnvironmentImpl.java:684)
>     at 
> jetbrains.exodus.env.ReadWriteTransaction.commit(ReadWriteTransaction.java:96)
>     at 
> jetbrains.exodus.entitystore.PersistentStoreTransaction.doCommit(PersistentStoreTransaction.java:192)
>     at 
> jetbrains.exodus.entitystore.PersistentStoreTransaction.commit(PersistentStoreTransaction.java:180)
>     at 
> jetbrains.exodus.entitystore.PersistentEntityStoreImpl.executeInExclusiveTransaction(PersistentEntityStoreImpl.java:720)
>     at 
> org.apache.nifi.admin.service.EntityStoreAuditService.addActions(EntityStoreAuditService.java:116)
>     at org.apache.nifi.audit.NiFiAuditor.saveActions(NiFiAuditor.java:66)
>     at org.apache.nifi.audit.NiFiAuditor.saveAction(NiFiAuditor.java:53)
>     at 
> org.apache.nifi.audit.ProcessGroupAuditor.saveUpdateAction(ProcessGroupAuditor.java:359)
>     at 
> org.apache.nifi.audit.ProcessGroupAuditor.updateProcessGroupFlowAdvice(ProcessGroupAuditor.java:305)
>     at 
> java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)
> {noformat}
> Afterwards, any attempt to read or write from Xodus produces an exception 
> similar to this:
> {noformat}
> 2023-12-04 16:32:53,111 WARN [NiFi Web Server-371] 
> o.apache.nifi.audit.ProcessGroupAuditor Unable to record actions: 
> jetbrains.exodus.ExodusException: Environment is inoperative
>     at 
> jetbrains.exodus.ExodusException.toExodusException(ExodusException.java:49)
>     at 
> jetbrains.exodus.env.EnvironmentImpl.checkIsOperative(EnvironmentImpl.java:1069)
>     at 
> jetbrains.exodus.env.EnvironmentImpl.beginTransaction(EnvironmentImpl.java:613)
>     at 
> jetbrains.exodus.env.EnvironmentImpl.beginExclusiveTransaction(EnvironmentImpl.java:264)
>     at 
> jetbrains.exodus.entitystore.PersistentStoreTransaction.<init>(PersistentStoreTransaction.java:130)
>     at 
> jetbrains.exodus.entitystore.PersistentEntityStoreImpl.beginExclusiveTransaction(PersistentEntityStoreImpl.java:539)
>     at 
> jetbrains.exodus.entitystore.PersistentEntityStoreImpl.executeInExclusiveTransaction(PersistentEntityStoreImpl.java:717)
>     at 
> org.apache.nifi.admin.service.EntityStoreAuditService.addActions(EntityStoreAuditService.java:116)
>     at org.apache.nifi.audit.NiFiAuditor.saveActions(NiFiAuditor.java:66)
>     at org.apache.nifi.audit.NiFiAuditor.saveAction(NiFiAuditor.java:53)
>     at 
> org.apache.nifi.audit.ProcessGroupAuditor.saveUpdateAction(ProcessGroupAuditor.java:359)
>     at 
> org.apache.nifi.audit.ProcessGroupAuditor.updateProcessGroupFlowAdvice(ProcessGroupAuditor.java:305)
>     at 
> java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)
> ...
> ...
> Caused by: java.io.IOException: Stream Closed
>     at java.base/java.io.RandomAccessFile.length0(Native Method)
>     at java.base/java.io.RandomAccessFile.length(RandomAccessFile.java:653)
>     at jetbrains.exodus.io.FileDataWriter.ensureFile(FileDataWriter.kt:172)
>     at jetbrains.exodus.io.FileDataWriter.write(FileDataWriter.kt:59)
>     at 
> jetbrains.exodus.log.BufferedDataWriter.writePage(BufferedDataWriter.java:264)
>     at 
> jetbrains.exodus.log.BufferedDataWriter.flush(BufferedDataWriter.java:176)
>     at jetbrains.exodus.log.Log.flush(Log.kt:631)
>     at jetbrains.exodus.log.Log.flush$default(Log.kt:630)
>     at jetbrains.exodus.log.Log.flush(Log.kt)
>     at 
> jetbrains.exodus.env.EnvironmentImpl.flushTransaction(EnvironmentImpl.java:731)
>     at 
> jetbrains.exodus.env.EnvironmentImpl.commitTransaction(EnvironmentImpl.java:684)
>     at 
> jetbrains.exodus.env.ReadWriteTransaction.commit(ReadWriteTransaction.java:96)
>     at 
> jetbrains.exodus.entitystore.PersistentStoreTransaction.doCommit(PersistentStoreTransaction.java:192)
>     at 
> jetbrains.exodus.entitystore.PersistentStoreTransaction.commit(PersistentStoreTransaction.java:180)
>     at 
> jetbrains.exodus.entitystore.PersistentEntityStoreImpl.executeInExclusiveTransaction(PersistentEntityStoreImpl.java:720)
>     at 
> org.apache.nifi.admin.service.EntityStoreAuditService.addActions(EntityStoreAuditService.java:116)
>     at org.apache.nifi.audit.NiFiAuditor.saveActions(NiFiAuditor.java:66)
>     at org.apache.nifi.audit.NiFiAuditor.saveAction(NiFiAuditor.java:53)
>     at 
> org.apache.nifi.audit.ProcessGroupAuditor.saveUpdateAction(ProcessGroupAuditor.java:359)
>     at 
> org.apache.nifi.audit.ProcessGroupAuditor.updateProcessGroupFlowAdvice(ProcessGroupAuditor.java:305)
>     at 
> java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)
> {noformat}



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to