[
https://issues.apache.org/jira/browse/LUCENE-5738?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Simon Willnauer updated LUCENE-5738:
------------------------------------
Attachment: LUCENE-5738.patch
here is a patch that adds a more elegant static map and fixed the stress test
to fail without the map. It now passes but we should stress it a bit more and
run it for a while.
> 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
> Assignee: Simon Willnauer
> Fix For: 4.9, 5.0
>
> Attachments: LUCENE-5738.patch
>
>
> 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: [email protected]
For additional commands, e-mail: [email protected]