lucene-dev mailing list archives

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

    [ https://issues.apache.org/jira/browse/LUCENE-743?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#action_12538743
] 

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
    SegmentReader.
    .
    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
    reopen?
   .
    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: https://issues.apache.org/jira/browse/LUCENE-743
>             Project: Lucene - Java
>          Issue Type: Improvement
>          Components: Index
>            Reporter: Otis Gospodnetic
>            Assignee: Michael Busch
>            Priority: Minor
>             Fix For: 2.3
>
>         Attachments: IndexReaderUtils.java, lucene-743-take2.patch, lucene-743-take3.patch,
lucene-743.patch, lucene-743.patch, lucene-743.patch, MyMultiReader.java, MySegmentReader.java,
varient-no-isCloneSupported.BROKEN.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: java-dev-unsubscribe@lucene.apache.org
For additional commands, e-mail: java-dev-help@lucene.apache.org


Mime
View raw message