Return-Path: Delivered-To: apmail-lucene-java-dev-archive@www.apache.org Received: (qmail 97924 invoked from network); 1 Apr 2010 15:21:49 -0000 Received: from unknown (HELO mail.apache.org) (140.211.11.3) by 140.211.11.9 with SMTP; 1 Apr 2010 15:21:49 -0000 Received: (qmail 23188 invoked by uid 500); 1 Apr 2010 15:21:48 -0000 Delivered-To: apmail-lucene-java-dev-archive@lucene.apache.org Received: (qmail 23035 invoked by uid 500); 1 Apr 2010 15:21:48 -0000 Mailing-List: contact java-dev-help@lucene.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: java-dev@lucene.apache.org Delivered-To: mailing list java-dev@lucene.apache.org Received: (qmail 23028 invoked by uid 99); 1 Apr 2010 15:21:48 -0000 Received: from athena.apache.org (HELO athena.apache.org) (140.211.11.136) by apache.org (qpsmtpd/0.29) with ESMTP; Thu, 01 Apr 2010 15:21:48 +0000 X-ASF-Spam-Status: No, hits=-1196.2 required=10.0 tests=ALL_TRUSTED,AWL X-Spam-Check-By: apache.org Received: from [140.211.11.140] (HELO brutus.apache.org) (140.211.11.140) by apache.org (qpsmtpd/0.29) with ESMTP; Thu, 01 Apr 2010 15:21:47 +0000 Received: from brutus.apache.org (localhost [127.0.0.1]) by brutus.apache.org (Postfix) with ESMTP id 5169D234C4C8 for ; Thu, 1 Apr 2010 15:21:27 +0000 (UTC) Message-ID: <1847083767.636281270135287332.JavaMail.jira@brutus.apache.org> Date: Thu, 1 Apr 2010 15:21:27 +0000 (UTC) From: "Earwin Burrfoot (JIRA)" To: java-dev@lucene.apache.org Subject: [jira] Commented: (LUCENE-2355) Refactor Directory/Multi/SegmentReader creation/reopening/cloning/closing In-Reply-To: <968621522.537211269805167122.JavaMail.jira@brutus.apache.org> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-JIRA-FingerPrint: 30527f35849b9dde25b450d4833f0394 [ https://issues.apache.org/jira/browse/LUCENE-2355?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12852417#action_12852417 ] Earwin Burrfoot commented on LUCENE-2355: ----------------------------------------- Some more stuff I forgot: - No need to keep around origInstance in CoreReaders. It is used to purge FieldCache, but the cache is purged based on getFieldCacheKey, which is common across all clones/reopens - MultiReader-level norms cache is not needed with per-segment searching and is removed. The method that extracts norms into a user-passed array still has the same performance even without the cache. > Refactor Directory/Multi/SegmentReader creation/reopening/cloning/closing > ------------------------------------------------------------------------- > > Key: LUCENE-2355 > URL: https://issues.apache.org/jira/browse/LUCENE-2355 > Project: Lucene - Java > Issue Type: Improvement > Reporter: Earwin Burrfoot > > *Reader lifecycle evolved over time to become some heavily tangled mess. It's hard to understand what's going on there, it's even harder to add some fields/logic while ensuring that all possible code paths preserve these fields/interact with the logic properly. While some of said mess is justified by the task at hand, a big part is just badly done copypaste and can be removed. > I am currently refactoring this and intended to open an issue with a working patch, but the task winded up somewhat bigger than I expected, so I'm opening it earlier to track stuff encountered/changed/fixed. > The list is by no means exhaustive. > - an iteration to create SRs is copypasted several times, one of them (IW) with wrong iteration bound > - it is also overly complex and can be folded for create/reopen cases > - readers sent to IndexReaderWarmer are termindexless/docstoreless on some occasions > - it is possible to clone() your way to readwrite NRT reader > - IndexDeletionPolicy is not always preserved through clones/reopens > - cloned readers share CoreReaders and, consequently, updated termsIndex/docStores > - threadlocal versions of fieldsReader/termsVector are bound to SR, not CoreReaders and thus are recreated on clone/reopen > - double-initialization for some fields (someone got lost and did this to be sure I guess), stupid assert checks ( qwe = new(); assert qwe != null ) > - SR is not always recreated when compound status of underlying segment changes > - deleting already deleted doc marks deletions dirty and rewrites them > - lots of synchronization is done around Reader, while it can be narrowed down to norms/deletions/whatever > I did some structural modifications: > - CompositeReader extracts common code from DirectoryReader and MultiReader (complete) > - ReadonlyDirectoryReader and ReadonlySegmentReader are dead, MutableD/SReaders are introduced and carry all modification logic/fields (DR complete, SR in progress) > - WriterBackedReader encapsulates NRT reader logic (complete) > - CoreReaders split into CoreReaders, DocStores, TermInfos. All of these are immutable and SR is cloned when you need to change its mode (in progress) -- 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