Details
-
Bug
-
Status: Closed
-
Critical
-
Resolution: Fixed
-
None
Description
There is the potential for a deadlock between concurrent calls to TarWriter#createNextGeneration() and TarWriter#flush(): both methods try to acquire a lock on this and another lock on TarWriter.file but in different order. I observed the deadlock when running CompactionAndCleanupIT.randomAccessFileConcurrentReadAndLength().
This is a regression introduced with OAK-4746: the method TarWriter.createNextGeneration() seems over eagerly synchronized. I would argue that we could drop synchronization for that method entirely as the part after the call to close() will in any case only ever be executed once by a single thread. All other threads will fail with an IllegalStateException).
alexparvulescu, WDYT?
Attachments
Issue Links
- supercedes
-
OAK-4746 Move writeFile into the TarWriter
- Closed