Return-Path: Delivered-To: apmail-lucene-java-commits-archive@www.apache.org Received: (qmail 1155 invoked from network); 24 Mar 2010 21:29:04 -0000 Received: from unknown (HELO mail.apache.org) (140.211.11.3) by 140.211.11.9 with SMTP; 24 Mar 2010 21:29:04 -0000 Received: (qmail 47187 invoked by uid 500); 24 Mar 2010 21:29:04 -0000 Delivered-To: apmail-lucene-java-commits-archive@lucene.apache.org Received: (qmail 47161 invoked by uid 500); 24 Mar 2010 21:29:04 -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 47154 invoked by uid 99); 24 Mar 2010 21:29:04 -0000 Received: from athena.apache.org (HELO athena.apache.org) (140.211.11.136) by apache.org (qpsmtpd/0.29) with ESMTP; Wed, 24 Mar 2010 21:29:04 +0000 X-ASF-Spam-Status: No, hits=-1094.0 required=10.0 tests=ALL_TRUSTED,AWL 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, 24 Mar 2010 21:29:01 +0000 Received: by eris.apache.org (Postfix, from userid 65534) id 236A92388900; Wed, 24 Mar 2010 21:28:41 +0000 (UTC) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r927183 - in /lucene/java/branches/flex_1458: ./ src/java/org/apache/lucene/index/codecs/ src/test/org/apache/lucene/index/ src/test/org/apache/lucene/util/ Date: Wed, 24 Mar 2010 21:28:40 -0000 To: java-commits@lucene.apache.org From: mikemccand@apache.org X-Mailer: svnmailer-1.0.8 Message-Id: <20100324212841.236A92388900@eris.apache.org> Author: mikemccand Date: Wed Mar 24 21:28:40 2010 New Revision: 927183 URL: http://svn.apache.org/viewvc?rev=927183&view=rev Log: LUCENE-2344: fix PostingsConsumer.merge to properly call finishDoc Added: lucene/java/branches/flex_1458/src/test/org/apache/lucene/util/MultiCodecTestCase.java (with props) Modified: lucene/java/branches/flex_1458/CHANGES.txt lucene/java/branches/flex_1458/src/java/org/apache/lucene/index/codecs/CodecProvider.java lucene/java/branches/flex_1458/src/java/org/apache/lucene/index/codecs/PostingsConsumer.java lucene/java/branches/flex_1458/src/test/org/apache/lucene/index/FlexTestUtil.java lucene/java/branches/flex_1458/src/test/org/apache/lucene/index/TestCodecs.java lucene/java/branches/flex_1458/src/test/org/apache/lucene/index/TestStressIndexing.java lucene/java/branches/flex_1458/src/test/org/apache/lucene/index/TestStressIndexing2.java Modified: lucene/java/branches/flex_1458/CHANGES.txt URL: http://svn.apache.org/viewvc/lucene/java/branches/flex_1458/CHANGES.txt?rev=927183&r1=927182&r2=927183&view=diff ============================================================================== --- lucene/java/branches/flex_1458/CHANGES.txt (original) +++ lucene/java/branches/flex_1458/CHANGES.txt Wed Mar 24 21:28:40 2010 @@ -17,6 +17,10 @@ Bug Fixes * LUCENE-2222: FixedIntBlockIndexInput incorrectly read one block of 0s before the actual data. (Renaud Delbru via Mike McCandless) + +* LUCENE-2344: PostingsConsumer.merge was failing to call finishDoc, + which caused corruption for sep codec. Also fixed several tests to + test all 4 core codecs. (Renaud Delbru via Mike McCandless) New features Modified: lucene/java/branches/flex_1458/src/java/org/apache/lucene/index/codecs/CodecProvider.java URL: http://svn.apache.org/viewvc/lucene/java/branches/flex_1458/src/java/org/apache/lucene/index/codecs/CodecProvider.java?rev=927183&r1=927182&r2=927183&view=diff ============================================================================== --- lucene/java/branches/flex_1458/src/java/org/apache/lucene/index/codecs/CodecProvider.java (original) +++ lucene/java/branches/flex_1458/src/java/org/apache/lucene/index/codecs/CodecProvider.java Wed Mar 24 21:28:40 2010 @@ -43,6 +43,10 @@ public abstract class CodecProvider { private final Set knownExtensions = new HashSet(); + private static String defaultCodec = "Standard"; + + public final static String[] CORE_CODECS = new String[] {"Standard", "Sep", "Pulsing", "IntBlock"}; + public void register(Codec codec) { if (codec.name == null) { throw new IllegalArgumentException("code.name is null"); @@ -74,6 +78,15 @@ public abstract class CodecProvider { public static CodecProvider getDefault() { return defaultCodecs; } + + /** Used for testing. @lucene.internal */ + public static void setDefaultCodec(String s) { + defaultCodec = s; + } + /** Used for testing. @lucene.internal */ + public static String getDefaultCodec() { + return defaultCodec; + } } class DefaultCodecProvider extends CodecProvider { @@ -87,7 +100,7 @@ class DefaultCodecProvider extends Codec @Override public Codec getWriter(SegmentWriteState state) { - return lookup("Standard"); + return lookup(CodecProvider.getDefaultCodec()); //return lookup("Pulsing"); //return lookup("Sep"); //return lookup("IntBlock"); Modified: lucene/java/branches/flex_1458/src/java/org/apache/lucene/index/codecs/PostingsConsumer.java URL: http://svn.apache.org/viewvc/lucene/java/branches/flex_1458/src/java/org/apache/lucene/index/codecs/PostingsConsumer.java?rev=927183&r1=927182&r2=927183&view=diff ============================================================================== --- lucene/java/branches/flex_1458/src/java/org/apache/lucene/index/codecs/PostingsConsumer.java (original) +++ lucene/java/branches/flex_1458/src/java/org/apache/lucene/index/codecs/PostingsConsumer.java Wed Mar 24 21:28:40 2010 @@ -21,6 +21,7 @@ import java.io.IOException; import org.apache.lucene.index.DocsAndPositionsEnum; import org.apache.lucene.index.DocsEnum; +import org.apache.lucene.search.DocIdSetIterator; import org.apache.lucene.util.BytesRef; /** @@ -56,28 +57,29 @@ public abstract class PostingsConsumer { /** Default merge impl: append documents, mapping around * deletes */ - public int merge(MergeState mergeState, DocsEnum postings) throws IOException { + public int merge(final MergeState mergeState, final DocsEnum postings) throws IOException { int df = 0; if (mergeState.fieldInfo.omitTermFreqAndPositions) { while(true) { final int doc = postings.nextDoc(); - if (doc == DocsAndPositionsEnum.NO_MORE_DOCS) { + if (doc == DocIdSetIterator.NO_MORE_DOCS) { break; } - startDoc(doc, postings.freq()); + this.startDoc(doc, postings.freq()); + this.finishDoc(); df++; } } else { final DocsAndPositionsEnum postingsEnum = (DocsAndPositionsEnum) postings; while(true) { final int doc = postingsEnum.nextDoc(); - if (doc == DocsAndPositionsEnum.NO_MORE_DOCS) { + if (doc == DocIdSetIterator.NO_MORE_DOCS) { break; } final int freq = postingsEnum.freq(); - startDoc(doc, freq); + this.startDoc(doc, freq); for(int i=0;i termsSeen = new HashSet(); @@ -192,16 +214,16 @@ public class TestCodecs extends LuceneTe char[] text; String text2; while(true) { - text = getRandomText(); + text = this.getRandomText(); text2 = new String(text, 0, text.length-1); if (!termsSeen.contains(text2)) { termsSeen.add(text2); break; } } - - final int docFreq = 1+nextInt(DOC_FREQ_RAND); - int[] docs = new int[docFreq]; + + final int docFreq = 1+this.nextInt(DOC_FREQ_RAND); + final int[] docs = new int[docFreq]; PositionData[][] positions; if (!omitTF) @@ -211,21 +233,21 @@ public class TestCodecs extends LuceneTe int docID = 0; for(int j=0;j= 1) { - int inc = 1+nextInt(left-1); + if (TestCodecs.this.nextInt(3) == 1 && left >= 1) { + final int inc = 1+TestCodecs.this.nextInt(left-1); upto2 += inc; if (Codec.DEBUG) { - System.out.println("TEST [" + getDesc(field, term) + "]: skip: " + left + " docs left; skip to doc=" + term.docs[upto2] + " [" + upto2 + " of " + term.docs.length + "]"); + System.out.println("TEST [" + TestCodecs.this.getDesc(field, term) + "]: skip: " + left + " docs left; skip to doc=" + term.docs[upto2] + " [" + upto2 + " of " + term.docs.length + "]"); } - if (nextInt(2) == 1) { + if (TestCodecs.this.nextInt(2) == 1) { doc = docsEnum.advance(term.docs[upto2]); assertEquals(term.docs[upto2], doc); } else { doc = docsEnum.advance(1+term.docs[upto2]); - if (doc == DocsEnum.NO_MORE_DOCS) { + if (doc == DocIdSetIterator.NO_MORE_DOCS) { // skipped past last doc assert upto2 == term.docs.length-1; break; @@ -548,18 +641,18 @@ public class TestCodecs extends LuceneTe doc = docsEnum.nextDoc(); assertTrue(doc != -1); if (Codec.DEBUG) { - System.out.println("TEST [" + getDesc(field, term) + "]: got next doc..."); + System.out.println("TEST [" + TestCodecs.this.getDesc(field, term) + "]: got next doc..."); } upto2++; } assertEquals(term.docs[upto2], doc); if (!field.omitTF) { assertEquals(term.positions[upto2].length, docsEnum.freq()); - if (nextInt(2) == 1) { + if (TestCodecs.this.nextInt(2) == 1) { if (Codec.DEBUG) { - System.out.println("TEST [" + getDesc(field, term, term.docs[upto2]) + "]: check positions for doc " + term.docs[upto2] + "..."); + System.out.println("TEST [" + TestCodecs.this.getDesc(field, term, term.docs[upto2]) + "]: check positions for doc " + term.docs[upto2] + "..."); } - verifyPositions(term.positions[upto2], postings); + this.verifyPositions(term.positions[upto2], postings); } else if (Codec.DEBUG) { System.out.println("TEST: skip positions..."); } @@ -568,10 +661,10 @@ public class TestCodecs extends LuceneTe } } - assertEquals(DocsEnum.NO_MORE_DOCS, docsEnum.nextDoc()); + assertEquals(DocIdSetIterator.NO_MORE_DOCS, docsEnum.nextDoc()); } else if (Codec.DEBUG) { - System.out.println("\nTEST [" + getDesc(field, term) + "]: skip docs"); + System.out.println("\nTEST [" + TestCodecs.this.getDesc(field, term) + "]: skip docs"); } upto++; @@ -582,17 +675,17 @@ public class TestCodecs extends LuceneTe } } - private void write(FieldInfos fieldInfos, Directory dir, FieldData[] fields) throws Throwable { + private void write(final FieldInfos fieldInfos, final Directory dir, final FieldData[] fields) throws Throwable { - final int termIndexInterval = nextInt(13, 27); + final int termIndexInterval = this.nextInt(13, 27); - SegmentWriteState state = new SegmentWriteState(null, dir, SEGMENT, fieldInfos, null, 10000, 10000, termIndexInterval, + final SegmentWriteState state = new SegmentWriteState(null, dir, SEGMENT, fieldInfos, null, 10000, 10000, termIndexInterval, CodecProvider.getDefault()); final FieldsConsumer consumer = state.codec.fieldsConsumer(state); Arrays.sort(fields); - for(int i=0;i