lucene-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Michael McCandless (JIRA)" <>
Subject [jira] Commented: (LUCENE-743) IndexReader.reopen()
Date Tue, 30 Oct 2007 11:42:51 GMT


Michael McCandless commented on LUCENE-743:

OK I think this patch is very close!  I finished reviewing it --
here's some more feedback:

  - In multiple places you catch an IOException and undo the attempted
    re-open, but shouldn't this be a try/finally instead so you also
    clean up on hitting any unchecked exceptions?

  - I think you need an explicit refCount for the Norm class in
    Say I've done a chain of 10 re-opens for SegmentReader and each
    time only the segment's norms has changed.  I've closed all but
    the last SegmentReader.  At this point all 10 SegmentReaders are
    still alive (RC > 0) and holding open all file handles for their
    copies of the norms.  So this will leak file handles/RAM with each
    To fix this, I think you just need to add refCount into Norm class
    & set refCount to 1 in the constructor.  Then, each each
    SegmentReader calls Norm.decRef(), not Norm.close(), when it's
    done.  When refCount hits 0 then the Norm closes itself.  Finally,
    during re-open you should share a Norm instance (rather than open
    a new one) if it had not changed from the previous SegmentReader.
    For singleNormStream, I think each reopened SegmentReader should
    always re-open this descriptor and then we can forcefully close
    this stream when the SegmentReader is closed (what you are doing
    now).  Ie the SegmentReader fully owns singleNormStream.

  - If you have a long series of reopens, then, all SegmentReaders in
    the chain will remain alive.  So this is a [small] memory leak
    with time.  I think if you changed referencedSegmentReader to
    always be the *starting* SegmentReader then this chain is broken
    and after 10 reopens only the original SegmentReader and the most
    recent one will remain alive (assuming I closed all SegmentReaders
    but the most recent one).

> IndexReader.reopen()
> --------------------
>                 Key: LUCENE-743
>                 URL:
>             Project: Lucene - Java
>          Issue Type: Improvement
>          Components: Index
>            Reporter: Otis Gospodnetic
>            Assignee: Michael Busch
>            Priority: Minor
>             Fix For: 2.3
>         Attachments:, lucene-743-take2.patch, lucene-743-take3.patch,
lucene-743.patch, lucene-743.patch, lucene-743.patch,,,
> This is Robert Engels' implementation of IndexReader.reopen() functionality, as a set
of 3 new classes (this was easier for him to implement, but should probably be folded into
the core, if this looks good).

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:
For additional commands, e-mail:

View raw message