Details
-
Improvement
-
Status: Closed
-
Major
-
Resolution: Fixed
-
None
-
None
-
None
Description
When the repository is shut down, the method AbstractJournal.doUnlock(boolean successful) is sometimes not called. The method Journal.close is called, but when the journal implementation uses a reentrant lock it can't unlock because close is called from a different thread.
The reason for not calling doUnlock is that ClusterNode.stop() sets the status to "stopped", which causes all WorkspaceUpdateChannel methods to not work, including updateCommitted and updateCancelled. Therefore, it is possible that an operation is started but never completed nor cancelled.
To solve the issue, I found that it is enough to let updateCommitted and updateCancelled to complete, so that operations that are in progress can finish.