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

Marvin Humphrey commented on LUCENE-1877:
-----------------------------------------

> http://www.h2database.com/html/advanced.html#file_locking_protocols

I'm a little concerned about the suitability of the polling approach for a
low-level library like Lucene -- shouldn't active code like that live in the
application layer?  Is it possible to exceed the polling interval for a low
priority process on a system under heavy load?  What happens when the app
sleeps?

For removing stale lock files, another technique is to incorporate the host
name and the pid.  So long as you can determine that the lock file belongs to
your machine and that the PID is not active, you can safely zap it.

Then tricky bit is how you get that information into the lock file.  If you
try to write that info to the lock file itself after an O_EXCL open, creating
a fully valid lock file is no longer an atomic operation.  

The approach suggested by the creat(2) man page and endorsed in the Linux NFS
FAQ involves hard links:

{noformat}
    The solution for performing atomic file locking using a lockfile
    is to create a unique file on the same file system (e.g.,
    incorporating hostname and pid), use link(2) to make a link to the
    lockfile. If link() returns 0, the lock is successful. Otherwise,
    use stat(2) on the unique file to check if its link count has
    increased to 2, in which case the lock is also successful. 
{noformat}

This approach should also work on Windows for NTFS file systems since Windows
2000 thanks to the CreateHardLink() function.  (Samba file shares, you're out
of luck.)  However, I'm not sure about the state of support for hard links in
Java.

If you're interested in continuing this discussion, we should probably take it
somewhere other than this closed issue.

> Use NativeFSLockFactory as default for new API (direct ctors & FSDir.open)
> --------------------------------------------------------------------------
>
>                 Key: LUCENE-1877
>                 URL: https://issues.apache.org/jira/browse/LUCENE-1877
>             Project: Lucene - Java
>          Issue Type: Improvement
>          Components: Javadocs
>            Reporter: Mark Miller
>            Assignee: Uwe Schindler
>             Fix For: 2.9
>
>         Attachments: LUCENE-1877.patch, LUCENE-1877.patch, LUCENE-1877.patch, 
> LUCENE-1877.patch
>
>
> A user requested we add a note in IndexWriter alerting the availability of 
> NativeFSLockFactory (allowing you to avoid retaining locks on abnormal jvm 
> exit). Seems reasonable to me - we want users to be able to easily stumble 
> upon this class. The below code looks like a good spot to add a note - could 
> also improve whats there a bit - opening an IndexWriter does not necessarily 
> create a lock file - that would depend on the LockFactory used.
> {code}  <p>Opening an <code>IndexWriter</code> creates a lock file for the 
> directory in use. Trying to open
>   another <code>IndexWriter</code> on the same directory will lead to a
>   {...@link LockObtainFailedException}. The {...@link 
> LockObtainFailedException}
>   is also thrown if an IndexReader on the same directory is used to delete 
> documents
>   from the index.</p>{code}
> Anyone remember why NativeFSLockFactory is not the default over 
> SimpleFSLockFactory?

-- 
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: java-dev-unsubscr...@lucene.apache.org
For additional commands, e-mail: java-dev-h...@lucene.apache.org

Reply via email to