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

Shubham Sharma commented on NIFI-12468:
---------------------------------------

[~exceptionfactory] [~mosermw] , there is an easier way to reproduce this issue 
where if action record count in flow configuration history has reached 800K or 
beyond, and if we try to run purge api for this amount of records it will get 
timed out after 2 minutes and this will make environment inoperative as 
mentioned in above description. It will still allow operations to proceed and 
they will skip updating xodus but it will only get fixed after hitting restart. 
Also after running Xodus it doesn't compact files or reduce count or size of 
database repository as it maybe waiting on some space threshold triggers.

> Xodus Flow Configuration History Environment Inoperative after Stream Closed
> ----------------------------------------------------------------------------
>
>                 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: Minor
>
> 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