Description
In ProcessorStateManager in the lockStateDirectory method, we close a channel if the lock is null. However, as described in https://docs.oracle.com/javase/7/docs/api/java/nio/channels/FileLock.html, "...closing a channel releases all locks held by the Java virtual machine on the underlying file regardless of whether the locks were acquired via that channel or via another channel open on the same file. It is strongly recommended that, within a program, a unique channel be used to acquire all locks on any given file.". Thus closing this channel sometimes leads to the other lock in ProcessorStateManager, called directoryLock to be released.
Problem is reproduced as part of the steps in KAFKA-3805, when two processes are using the same state directory.
Attachments
Issue Links
- relates to
-
KAFKA-3805 Running multiple instances of a Streams app on the same machine results in Java_org_rocksdb_RocksDB_write error
- Resolved
- links to