[ 
http://issues.apache.org/jira/browse/LUCENE-715?page=comments#action_12450913 ] 
            
Michael McCandless commented on LUCENE-715:
-------------------------------------------

Don't worry about it :)  This is what open source is all about!

OK this looks good to me.  I will commit.  Thanks Matthew, keep the patches 
coming!

> IndexWriter does not release its write lock when trying to open an index 
> which does not yet exist
> -------------------------------------------------------------------------------------------------
>
>                 Key: LUCENE-715
>                 URL: http://issues.apache.org/jira/browse/LUCENE-715
>             Project: Lucene - Java
>          Issue Type: Bug
>          Components: Index
>    Affects Versions: 2.0.0
>         Environment: Windows XP, Java 1.5, IntelliJ 6
>            Reporter: Matthew Bogosian
>         Attachments: LUCENE-715.patch, LUCENE-715.patch
>
>
> In version 2.0.0, the private IndexWriter constructor does not properly 
> remove its write lock in the event of an error. This can be seen when one 
> attempts to open (not create) an index in a directory which exists, but in 
> which there is no segments file. Here is the offending code:
>     247   private IndexWriter(Directory d, Analyzer a, final boolean create, 
> boolean closeDir)
>     248     throws IOException {
>     249       this.closeDir = closeDir;
>     250       directory = d;
>     251       analyzer = a;
>     252 
>     253       Lock writeLock = 
> directory.makeLock(IndexWriter.WRITE_LOCK_NAME);
>     254       if (!writeLock.obtain(writeLockTimeout)) // obtain write lock
>     255         throw new IOException("Index locked for write: " + writeLock);
>     256       this.writeLock = writeLock;                   // save it
>     257 
>     258       synchronized (directory) {        // in- & inter-process sync
>     259         new 
> Lock.With(directory.makeLock(IndexWriter.COMMIT_LOCK_NAME), 
> commitLockTimeout) {
>     260             public Object doBody() throws IOException {
>     261               if (create)
>     262                 segmentInfos.write(directory);
>     263               else
>     264                 segmentInfos.read(directory);
>     265               return null;
>     266             }
>     267           }.run();
>     268       }
>     269   }
> On line 254, a write lock is obtained by the constructor. If an exception is 
> raised inside the doBody() method (on line 260), then that exception is 
> propagated, the constructor will fail, but the lock is not released until the 
> object is garbage collected. This is typically an issue except when using the 
> IndexModifier class.
> As of the filing of this bug, this has not yet been fixed in the trunk 
> (IndexWriter.java#472959):
>     251   private IndexWriter(Directory d, Analyzer a, final boolean create, 
> boolean closeDir)
>     252     throws IOException {
>     253       this.closeDir = closeDir;
>     254       directory = d;
>     255       analyzer = a;
>     256 
>     257       Lock writeLock = 
> directory.makeLock(IndexWriter.WRITE_LOCK_NAME);
>     258       if (!writeLock.obtain(writeLockTimeout)) // obtain write lock
>     259         throw new IOException("Index locked for write: " + writeLock);
>     260       this.writeLock = writeLock;                   // save it
>     261 
>     262       synchronized (directory) {        // in- & inter-process sync
>     263         new 
> Lock.With(directory.makeLock(IndexWriter.COMMIT_LOCK_NAME), 
> commitLockTimeout) {
>     264             public Object doBody() throws IOException {
>     265               if (create)
>     266                 segmentInfos.write(directory);
>     267               else
>     268                 segmentInfos.read(directory);
>     269               return null;
>     270             }
>     271           }.run();
>     272       }
>     273   }

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: 
http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to