Return-Path: Delivered-To: apmail-lucene-java-commits-archive@www.apache.org Received: (qmail 898 invoked from network); 20 May 2009 19:39:09 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (140.211.11.3) by minotaur.apache.org with SMTP; 20 May 2009 19:39:09 -0000 Received: (qmail 92643 invoked by uid 500); 20 May 2009 19:39:22 -0000 Delivered-To: apmail-lucene-java-commits-archive@lucene.apache.org Received: (qmail 92587 invoked by uid 500); 20 May 2009 19:39:22 -0000 Mailing-List: contact java-commits-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-commits@lucene.apache.org Received: (qmail 92578 invoked by uid 99); 20 May 2009 19:39:22 -0000 Received: from athena.apache.org (HELO athena.apache.org) (140.211.11.136) by apache.org (qpsmtpd/0.29) with ESMTP; Wed, 20 May 2009 19:39:22 +0000 X-ASF-Spam-Status: No, hits=-2000.0 required=10.0 tests=ALL_TRUSTED X-Spam-Check-By: apache.org Received: from [140.211.11.4] (HELO eris.apache.org) (140.211.11.4) by apache.org (qpsmtpd/0.29) with ESMTP; Wed, 20 May 2009 19:39:20 +0000 Received: by eris.apache.org (Postfix, from userid 65534) id 532802388897; Wed, 20 May 2009 19:39:00 +0000 (UTC) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r776819 - in /lucene/java/trunk/src: java/org/apache/lucene/index/SegmentReader.java test/org/apache/lucene/index/TestIndexReaderReopen.java Date: Wed, 20 May 2009 19:39:00 -0000 To: java-commits@lucene.apache.org From: mikemccand@apache.org X-Mailer: svnmailer-1.0.8 Message-Id: <20090520193900.532802388897@eris.apache.org> X-Virus-Checked: Checked by ClamAV on apache.org Author: mikemccand Date: Wed May 20 19:38:59 2009 New Revision: 776819 URL: http://svn.apache.org/viewvc?rev=776819&view=rev Log: LUCENE-1645: clone child SegmentReaders on reopening/cloning MultiSegmentReader so changes remain private Modified: lucene/java/trunk/src/java/org/apache/lucene/index/SegmentReader.java lucene/java/trunk/src/test/org/apache/lucene/index/TestIndexReaderReopen.java Modified: lucene/java/trunk/src/java/org/apache/lucene/index/SegmentReader.java URL: http://svn.apache.org/viewvc/lucene/java/trunk/src/java/org/apache/lucene/index/SegmentReader.java?rev=776819&r1=776818&r2=776819&view=diff ============================================================================== --- lucene/java/trunk/src/java/org/apache/lucene/index/SegmentReader.java (original) +++ lucene/java/trunk/src/java/org/apache/lucene/index/SegmentReader.java Wed May 20 19:38:59 2009 @@ -652,7 +652,8 @@ } // if we're cloning we need to run through the reopenSegment logic - if (normsUpToDate && deletionsUpToDate && !doClone && openReadOnly == readOnly) { + // also if both old and new readers aren't readonly, we clone to avoid sharing modifications + if (normsUpToDate && deletionsUpToDate && !doClone && openReadOnly && readOnly) { return this; } Modified: lucene/java/trunk/src/test/org/apache/lucene/index/TestIndexReaderReopen.java URL: http://svn.apache.org/viewvc/lucene/java/trunk/src/test/org/apache/lucene/index/TestIndexReaderReopen.java?rev=776819&r1=776818&r2=776819&view=diff ============================================================================== --- lucene/java/trunk/src/test/org/apache/lucene/index/TestIndexReaderReopen.java (original) +++ lucene/java/trunk/src/test/org/apache/lucene/index/TestIndexReaderReopen.java Wed May 20 19:38:59 2009 @@ -1160,21 +1160,20 @@ public void testDeletes() throws Throwable { Directory dir = new MockRAMDirectory(); - createIndex(dir, false); - // Get delete bitVector - modifyIndex(0, dir); - IndexReader r1 = IndexReader.open(dir); + createIndex(dir, false); // Create an index with a bunch of docs (1 segment) - // Add doc: - modifyIndex(5, dir); + modifyIndex(0, dir); // Get delete bitVector on 1st segment + modifyIndex(5, dir); // Add a doc (2 segments) - IndexReader r2 = r1.reopen(); - assertTrue(r1 != r2); + IndexReader r1 = IndexReader.open(dir); // MSR - IndexReader[] rs2 = r2.getSequentialSubReaders(); + modifyIndex(5, dir); // Add another doc (3 segments) - SegmentReader sr1 = (SegmentReader) r1; - SegmentReader sr2 = (SegmentReader) rs2[0]; + IndexReader r2 = r1.reopen(); // MSR + assertTrue(r1 != r2); + + SegmentReader sr1 = (SegmentReader) r1.getSequentialSubReaders()[0]; // Get SRs for the first segment from original + SegmentReader sr2 = (SegmentReader) r2.getSequentialSubReaders()[0]; // and reopened IRs // At this point they share the same BitVector assertTrue(sr1.deletedDocs==sr2.deletedDocs);