Anuj Shah created ISPN-4497:
-------------------------------
Summary: Race condition in LocalLockMergingSegmentReadLocker results in file
content being deleted
Key: ISPN-4497
URL:
https://issues.jboss.org/browse/ISPN-4497
Project: Infinispan
Issue Type: Bug
Security Level: Public (Everyone can see)
Components: Lucene Directory
Affects Versions: 5.2.6.Final
Reporter: Anuj Shah
Assignee: Sanne Grinovero
There is a race condition in LocalLockMergingSegmentReadLocker which can lead to more
calls delete on the underlying DistributedSegmentReadLocker which results in the file
being removed from the caches.
This happens with three or more threads acquiring and releasing locks on the same file
simultaneously:
# Thread 1 (T1) acquires a lock and creates a {{LocalReadLock}}, call it L1 - the
underlying lock is acquired
# T2 starts to acquire and holds a reference to L1
# T3 starts to acquire and holds a reference to L1
# T1 releases - L1 at this stage only has value of 1 - so the underlying lock is released,
and L1 is removed from the map
# T2 continues - finds L1 with value 0 and acquires the underlying lock
# T3 continues - increments L1 value to 2
# T2 releases - creates a new {{LocalReadLock}}, L2 - this has zero value so the
underlying lock is released, and L2 is removed from the map
# T3 releases - creates a new {{LocalReadLock}}, L3 - this has zero value so the
underlying lock is released, and L3 is removed from the map
# The final step triggers a real file delete as underlying lock is released one too many
times
--
This message was sent by Atlassian JIRA
(v6.2.6#6264)