[ 
https://issues.apache.org/jira/browse/LUCENE-2421?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12862973#action_12862973
 ] 

Shai Erera commented on LUCENE-2421:
------------------------------------

bq. Lock factories do not have to work with all other lock factories...you need 
to use the same lock factory across all process'.

I agree, but I've grown accustomed here that we try to protect users from their 
own mistakes. I.e., if the factory is a parameter to the application, this can 
certainly happen, w/o any of the application owners even realize that ... so it 
just seems dangerous to me, and I think that the alternative of keeping the 
file there and failing elsewhere is not good.

Another scenario - one application opens the index on a local file system 
(which is shared) and uses Native, while the other, for safety reason, opens 
the index using Simple lock because it reads the index from a remote share ... 
does not make a lot of sense - but possible.

bq. or even that the native lock feel needs to be in the same dir (eg it could 
be in a tmp dir)

Good point - but it's irrelevant to that issue - one can already shoot himself 
in the leg today by doing that. That's something I don't think we can protect 
from ... but allowing two lock files in the same directory - that just seems 
like a bug. Still, one could impl MyOwnNativeFSLock and create "my.lock.file" 
... but we cannot protect from that either. So at least, and that's my own 
opinion, the core factories that are provided w/ Lucene should behave well.

So Mark - I agreed w/ you before on that, until Uwe brought up the reason why 
NativeFSLock was fixed in 2.9 to use the same lock file as Simple ... it seems 
like a good catch to me, and I think if it was fixed once already, do we really 
want to break that fix? That will certainly be a bw break, because now 
NativeFSLock could obtain a lock if a lock file is there (I'm not sure if we 
have tests that cover that scenario, but I have a feeling some will fail if we 
change that).

If the result of that discussion is that we should not fail if the lock file 
cannot be deleted, then I think we should rename it too, so that Native and 
Simple use different files and it is clear that you're using two different LFs, 
which is not supported?

> Hardening of NativeFSLock
> -------------------------
>
>                 Key: LUCENE-2421
>                 URL: https://issues.apache.org/jira/browse/LUCENE-2421
>             Project: Lucene - Java
>          Issue Type: Improvement
>          Components: Index
>            Reporter: Shai Erera
>            Assignee: Shai Erera
>             Fix For: 3.1
>
>         Attachments: LUCENE-2421.patch, LUCENE-2421.patch
>
>
> NativeFSLock create a test lock file which its name might collide w/ another 
> JVM that is running. Very unlikely, but still it happened a couple of times 
> already, since the tests were parallelized. This may result in a false 
> exception thrown from release(), when the lock file's delete() is called and 
> returns false, because the file does not exist (deleted by another JVM 
> already). In addition, release() should give a second attempt to delete() if 
> it fails, since the file may be held temporarily by another process (like 
> AntiVirus) before it fails. The proposed changes are:
> 1) Use ManagementFactory.getRuntimeMXBean().getName() as part of the test 
> lock name (should include the process Id)
> 2) In release(), if delete() fails, check if the file indeed exists. If it 
> is, let's attempt a re-delete() few ms later.
> 3) If (3) still fails, throw an exception. Alternatively, we can attempt a 
> deleteOnExit.
> I'll post a patch later today.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@lucene.apache.org
For additional commands, e-mail: dev-h...@lucene.apache.org

Reply via email to