[ https://issues.apache.org/jira/browse/LUCENE-5738?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14018948#comment-14018948 ]
Simon Willnauer commented on LUCENE-5738: ----------------------------------------- Ok this gets more funky... I modified the test since it is not exactly what I was seeing.... {code} public static void main(String[] foo) throws IOException, InterruptedException { NativeFSLockFactory lockFactory = new NativeFSLockFactory(new File("/tmp")); Lock lock = lockFactory.makeLock("LOCK"); if (lock.obtain()) { System.out.println("OBTAINED"); } else { System.out.println("FAILED"); } lock = lockFactory.makeLock("LOCK"); // <<<<==== this is a new lock // here when we call obtain we run into an OverlappingFileLockException // this exception closes the file channel and that causes the // internal file lock table to be invalidated. This essentially releases the W lock of the first descriptor if (lock.obtain()) { System.out.println("OBTAINED AGAIN"); } else { System.out.println("FAILED on Second"); } Thread.sleep(Integer.MAX_VALUE); } {code} it seems that the FileChannel release all locks if it is closed.. There is some funky code in FileChannelImpl.java I would't be suprised if it has bugs > NativeLock is release if Lock is closed after obtain failed > ----------------------------------------------------------- > > Key: LUCENE-5738 > URL: https://issues.apache.org/jira/browse/LUCENE-5738 > Project: Lucene - Core > Issue Type: Bug > Affects Versions: 4.8.1 > Reporter: Simon Willnauer > Fix For: 4.9, 5.0 > > > if you obtain the NativeFSLock and try to obtain it again in the same JVM and > close if if it fails another process will be able to obtain it. This is > pretty trappy though. If you execute the main class twice the problem becomes > pretty obvious. > {noformat} > import org.apache.lucene.store.Lock; > import org.apache.lucene.store.NativeFSLockFactory; > import java.io.File; > import java.io.IOException; > public class TestLock { > public static void main(String[] foo) throws IOException, > InterruptedException { > NativeFSLockFactory lockFactory = new NativeFSLockFactory(new > File("/tmp")); > Lock lock = lockFactory.makeLock("LOCK"); > if (lock.obtain()) { > System.out.println("OBTAINED"); > } else { > lock.close(); > System.out.println("FAILED"); > } > // try it again and close it if it fails > lock = lockFactory.makeLock("LOCK"); // <<<<==== this is a new lock > if (lock.obtain()) { > System.out.println("OBTAINED AGAIN"); > } else { > lock.close(); // <<<<==== this releases the lock we obtained > System.out.println("FAILED on Second"); > } > Thread.sleep(Integer.MAX_VALUE); > } > } > {noformat} -- This message was sent by Atlassian JIRA (v6.2#6252) --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@lucene.apache.org For additional commands, e-mail: dev-h...@lucene.apache.org