diff -r d7451b831278 lucene/src/java/org/apache/lucene/index/IndexWriter.java --- a/lucene/src/java/org/apache/lucene/index/IndexWriter.java Mon Oct 11 11:59:29 2010 -0400 +++ b/lucene/src/java/org/apache/lucene/index/IndexWriter.java Mon Oct 11 17:30:47 2010 -0400 @@ -686,7 +686,7 @@ * Used internally to throw an {@link * AlreadyClosedException} if this IndexWriter has been * closed. - * @throws AlreadyClosedException if this IndexWriter is + * @throws AlreadyClosedException if this IndexWriter is closed */ protected final void ensureOpen(boolean includePendingClose) throws AlreadyClosedException { if (closed || (includePendingClose && closing)) { diff -r d7451b831278 lucene/src/java/org/apache/lucene/index/codecs/sep/SepPostingsReaderImpl.java --- a/lucene/src/java/org/apache/lucene/index/codecs/sep/SepPostingsReaderImpl.java Mon Oct 11 11:59:29 2010 -0400 +++ b/lucene/src/java/org/apache/lucene/index/codecs/sep/SepPostingsReaderImpl.java Mon Oct 11 17:30:47 2010 -0400 @@ -504,6 +504,7 @@ posIndex.set(termState.posIndex); posSeekPending = true; //posIndex.seek(posReader); + payloadPending = false; skipOffset = termState.skipOffset; payloadOffset = termState.payloadOffset; @@ -640,7 +641,6 @@ assert payloadLength >= 0; } pendingPosCount--; - payloadPending = true; position = 0; pendingPayloadBytes += payloadLength; } @@ -653,14 +653,13 @@ assert payloadLength >= 0; } position += code >> 1; + pendingPayloadBytes += payloadLength; + payloadPending = payloadLength > 0; } else { position += code; } - pendingPayloadBytes += payloadLength; - payloadPending = payloadLength > 0; pendingPosCount--; - payloadPending = true; assert pendingPosCount >= 0; return position; } diff -r d7451b831278 lucene/src/test/org/apache/lucene/index/TestPayloads.java --- a/lucene/src/test/org/apache/lucene/index/TestPayloads.java Mon Oct 11 11:59:29 2010 -0400 +++ b/lucene/src/test/org/apache/lucene/index/TestPayloads.java Mon Oct 11 17:30:47 2010 -0400 @@ -245,8 +245,8 @@ for (int i = 0; i < freq; i++) { for (int j = 0; j < numTerms; j++) { tps[j].nextPosition(); - BytesRef br = tps[j].getPayload(); - if (br != null) { + if (tps[j].hasPayload()) { + BytesRef br = tps[j].getPayload(); System.arraycopy(br.bytes, br.offset, verifyPayloadData, offset, br.length); offset += br.length; } @@ -604,4 +604,27 @@ return pool.size(); } } + + public void testAcrossFields() throws Exception { + Directory dir = newDirectory(); + RandomIndexWriter writer = new RandomIndexWriter(random, dir, + new MockAnalyzer(MockTokenizer.WHITESPACE, true, true)); + Document doc = new Document(); + doc.add(new Field("haspayload", "here we go", Field.Store.YES, Field.Index.ANALYZED)); + writer.addDocument(doc); + writer.close(); + + writer = new RandomIndexWriter(random, dir, + new MockAnalyzer(MockTokenizer.WHITESPACE, true, false)); + doc = new Document(); + doc.add(new Field("nopayload", "here we go", Field.Store.YES, Field.Index.ANALYZED)); + writer.addDocument(doc); + writer.addDocument(doc); + writer.optimize(); + writer.close(); + + _TestUtil.checkIndex(dir); + + dir.close(); + } } diff -r d7451b831278 lucene/src/test/org/apache/lucene/search/QueryUtils.java --- a/lucene/src/test/org/apache/lucene/search/QueryUtils.java Mon Oct 11 11:59:29 2010 -0400 +++ b/lucene/src/test/org/apache/lucene/search/QueryUtils.java Mon Oct 11 17:30:47 2010 -0400 @@ -399,7 +399,7 @@ public void collect(int doc) throws IOException { float score = scorer.score(); try { - + long startMS = System.currentTimeMillis(); for (int i=lastDoc[0]+1; i<=doc; i++) { Weight w = q.weight(s); Scorer scorer = w.scorer(reader, true, false); @@ -408,6 +408,12 @@ float skipToScore = scorer.score(); Assert.assertEquals("unstable skipTo("+i+") score!",skipToScore,scorer.score(),maxDiff); Assert.assertEquals("query assigned doc "+doc+" a score of <"+score+"> but skipTo("+i+") has <"+skipToScore+">!",score,skipToScore,maxDiff); + + // Hurry things along if they are going slow (eg + // if you got SimpleText codec this will kick in): + if (i < doc && System.currentTimeMillis() - startMS > 5) { + i = doc-1; + } } lastDoc[0] = doc; } catch (IOException e) {