[ 
https://issues.apache.org/jira/browse/LUCENE-5738?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Simon Willnauer updated LUCENE-5738:
------------------------------------

    Description: 
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");
        if (lock.obtain()) {
            System.out.println("OBTAINED AGAIN");
        } else {
            lock.close();
            System.out.println("FAILED on Second");
        }
        Thread.sleep(Integer.MAX_VALUE);
    }
}

{noformat}

  was:
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");
        }
        if (lock.obtain()) {
            System.out.println("OBTAINED AGAIN");
        } else {
            lock.close();
            System.out.println("FAILED on Second");
        }
        Thread.sleep(Integer.MAX_VALUE);
    }
}

{noformat}


> 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");
>         if (lock.obtain()) {
>             System.out.println("OBTAINED AGAIN");
>         } else {
>             lock.close();
>             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

Reply via email to