Description
IndexNode uses a ReadWriteLock which is "acquired" and "released".
boolean acquire() { lock.readLock().lock(); if (closed) { lock.readLock().unlock(); return false; } else { refreshPolicy.refreshOnReadIfRequired(refreshCallback); return true; } }
Its possible that any exception thrown in RefreshPolicy#refreshOnReadIfRequired can lead to lock being acquired but not released causing the lock to be lost and any further attempt to close such IndexNode instance would block indefinitely.
As a fix the acquire call should account for any potential exception thrown in any call made from within that method call
Attachments
Attachments
Issue Links
- is related to
-
OAK-5661 Make NRT indexing resilient against unbounded growth
- Open