You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by ma...@apache.org on 2011/11/03 14:35:20 UTC
svn commit: r1197110 [5/10] - in /lucene/dev/branches/solrcloud: ./
dev-tools/eclipse/ dev-tools/idea/.idea/ dev-tools/idea/.idea/libraries/
dev-tools/idea/lucene/contrib/ dev-tools/idea/modules/benchmark/
dev-tools/idea/solr/contrib/langid/ dev-tools/...
Modified: lucene/dev/branches/solrcloud/lucene/src/java/org/apache/lucene/search/QueryWrapperFilter.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/solrcloud/lucene/src/java/org/apache/lucene/search/QueryWrapperFilter.java?rev=1197110&r1=1197109&r2=1197110&view=diff
==============================================================================
--- lucene/dev/branches/solrcloud/lucene/src/java/org/apache/lucene/search/QueryWrapperFilter.java (original)
+++ lucene/dev/branches/solrcloud/lucene/src/java/org/apache/lucene/search/QueryWrapperFilter.java Thu Nov 3 13:35:07 2011
@@ -20,6 +20,7 @@ package org.apache.lucene.search;
import java.io.IOException;
import org.apache.lucene.index.IndexReader.AtomicReaderContext;
+import org.apache.lucene.util.Bits;
/**
* Constrains search results to only match those which also match a provided
@@ -47,7 +48,7 @@ public class QueryWrapperFilter extends
}
@Override
- public DocIdSet getDocIdSet(final AtomicReaderContext context) throws IOException {
+ public DocIdSet getDocIdSet(final AtomicReaderContext context, final Bits acceptDocs) throws IOException {
// get a private context that is used to rewrite, createWeight and score eventually
assert context.reader.getTopReaderContext().isAtomic;
final AtomicReaderContext privateContext = (AtomicReaderContext) context.reader.getTopReaderContext();
@@ -55,7 +56,7 @@ public class QueryWrapperFilter extends
return new DocIdSet() {
@Override
public DocIdSetIterator iterator() throws IOException {
- return weight.scorer(privateContext, true, false, privateContext.reader.getLiveDocs());
+ return weight.scorer(privateContext, true, false, acceptDocs);
}
@Override
public boolean isCacheable() { return false; }
Modified: lucene/dev/branches/solrcloud/lucene/src/java/org/apache/lucene/search/SpanFilter.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/solrcloud/lucene/src/java/org/apache/lucene/search/SpanFilter.java?rev=1197110&r1=1197109&r2=1197110&view=diff
==============================================================================
--- lucene/dev/branches/solrcloud/lucene/src/java/org/apache/lucene/search/SpanFilter.java (original)
+++ lucene/dev/branches/solrcloud/lucene/src/java/org/apache/lucene/search/SpanFilter.java Thu Nov 3 13:35:07 2011
@@ -16,6 +16,7 @@ package org.apache.lucene.search;
*/
import org.apache.lucene.index.IndexReader.AtomicReaderContext;
+import org.apache.lucene.util.Bits;
import java.io.IOException;
@@ -34,5 +35,5 @@ public abstract class SpanFilter extends
* @return A {@link SpanFilterResult}
* @throws java.io.IOException if there was an issue accessing the necessary information
* */
- public abstract SpanFilterResult bitSpans(AtomicReaderContext context) throws IOException;
+ public abstract SpanFilterResult bitSpans(AtomicReaderContext context, Bits acceptDocs) throws IOException;
}
Modified: lucene/dev/branches/solrcloud/lucene/src/java/org/apache/lucene/search/SpanFilterResult.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/solrcloud/lucene/src/java/org/apache/lucene/search/SpanFilterResult.java?rev=1197110&r1=1197109&r2=1197110&view=diff
==============================================================================
--- lucene/dev/branches/solrcloud/lucene/src/java/org/apache/lucene/search/SpanFilterResult.java (original)
+++ lucene/dev/branches/solrcloud/lucene/src/java/org/apache/lucene/search/SpanFilterResult.java Thu Nov 3 13:35:07 2011
@@ -16,7 +16,7 @@ package org.apache.lucene.search;
*/
import java.util.ArrayList;
-
+import java.util.Collections;
import java.util.List;
@@ -30,6 +30,9 @@ public class SpanFilterResult {
private DocIdSet docIdSet;
private List<PositionInfo> positions;//Spans spans;
+ public static final SpanFilterResult EMPTY_SPAN_FILTER_RESULT =
+ new SpanFilterResult(DocIdSet.EMPTY_DOCIDSET, Collections.<PositionInfo>emptyList());
+
/**
*
* @param docIdSet The DocIdSet for the Filter
Modified: lucene/dev/branches/solrcloud/lucene/src/java/org/apache/lucene/search/SpanQueryFilter.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/solrcloud/lucene/src/java/org/apache/lucene/search/SpanQueryFilter.java?rev=1197110&r1=1197109&r2=1197110&view=diff
==============================================================================
--- lucene/dev/branches/solrcloud/lucene/src/java/org/apache/lucene/search/SpanQueryFilter.java (original)
+++ lucene/dev/branches/solrcloud/lucene/src/java/org/apache/lucene/search/SpanQueryFilter.java Thu Nov 3 13:35:07 2011
@@ -19,6 +19,7 @@ package org.apache.lucene.search;
import org.apache.lucene.index.IndexReader.AtomicReaderContext;
import org.apache.lucene.search.spans.SpanQuery;
import org.apache.lucene.search.spans.Spans;
+import org.apache.lucene.util.Bits;
import org.apache.lucene.util.FixedBitSet;
import java.io.IOException;
@@ -52,16 +53,16 @@ public class SpanQueryFilter extends Spa
}
@Override
- public DocIdSet getDocIdSet(AtomicReaderContext context) throws IOException {
- SpanFilterResult result = bitSpans(context);
+ public final DocIdSet getDocIdSet(AtomicReaderContext context, Bits acceptDocs) throws IOException {
+ SpanFilterResult result = bitSpans(context, acceptDocs);
return result.getDocIdSet();
}
@Override
- public SpanFilterResult bitSpans(AtomicReaderContext context) throws IOException {
+ public SpanFilterResult bitSpans(AtomicReaderContext context, Bits acceptDocs) throws IOException {
final FixedBitSet bits = new FixedBitSet(context.reader.maxDoc());
- Spans spans = query.getSpans(context, context.reader.getLiveDocs());
+ Spans spans = query.getSpans(context, acceptDocs);
List<SpanFilterResult.PositionInfo> tmp = new ArrayList<SpanFilterResult.PositionInfo>(20);
int currentDoc = -1;
SpanFilterResult.PositionInfo currentInfo = null;
Modified: lucene/dev/branches/solrcloud/lucene/src/java/org/apache/lucene/search/TermScorer.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/solrcloud/lucene/src/java/org/apache/lucene/search/TermScorer.java?rev=1197110&r1=1197109&r2=1197110&view=diff
==============================================================================
--- lucene/dev/branches/solrcloud/lucene/src/java/org/apache/lucene/search/TermScorer.java (original)
+++ lucene/dev/branches/solrcloud/lucene/src/java/org/apache/lucene/search/TermScorer.java Thu Nov 3 13:35:07 2011
@@ -25,15 +25,15 @@ import org.apache.lucene.search.similari
/** Expert: A <code>Scorer</code> for documents matching a <code>Term</code>.
*/
final class TermScorer extends Scorer {
- private DocsEnum docsEnum;
+ private final DocsEnum docsEnum;
private int doc = -1;
private int freq;
private int pointer;
private int pointerMax;
- private int[] docs;
- private int[] freqs;
+ private final int[] docs;
+ private final int[] freqs;
private final DocsEnum.BulkReadResult bulkResult;
private final Similarity.ExactDocScorer docScorer;
@@ -53,6 +53,8 @@ final class TermScorer extends Scorer {
this.docScorer = docScorer;
this.docsEnum = td;
bulkResult = td.getBulkResult();
+ docs = bulkResult.docs.ints;
+ freqs = bulkResult.freqs.ints;
}
@Override
@@ -60,12 +62,6 @@ final class TermScorer extends Scorer {
score(c, Integer.MAX_VALUE, nextDoc());
}
- private final void refillBuffer() throws IOException {
- pointerMax = docsEnum.read(); // refill
- docs = bulkResult.docs.ints;
- freqs = bulkResult.freqs.ints;
- }
-
// firstDocID is ignored since nextDoc() sets 'doc'
@Override
public boolean score(Collector c, int end, int firstDocID) throws IOException {
@@ -74,7 +70,7 @@ final class TermScorer extends Scorer {
//System.out.println("TS: collect doc=" + doc);
c.collect(doc); // collect score
if (++pointer >= pointerMax) {
- refillBuffer();
+ pointerMax = docsEnum.read(); // refill
if (pointerMax != 0) {
pointer = 0;
} else {
@@ -109,7 +105,7 @@ final class TermScorer extends Scorer {
public int nextDoc() throws IOException {
pointer++;
if (pointer >= pointerMax) {
- refillBuffer();
+ pointerMax = docsEnum.read(); // refill
if (pointerMax != 0) {
pointer = 0;
} else {
Modified: lucene/dev/branches/solrcloud/lucene/src/java/org/apache/lucene/search/cache/ShortValuesCreator.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/solrcloud/lucene/src/java/org/apache/lucene/search/cache/ShortValuesCreator.java?rev=1197110&r1=1197109&r2=1197110&view=diff
==============================================================================
--- lucene/dev/branches/solrcloud/lucene/src/java/org/apache/lucene/search/cache/ShortValuesCreator.java (original)
+++ lucene/dev/branches/solrcloud/lucene/src/java/org/apache/lucene/search/cache/ShortValuesCreator.java Thu Nov 3 13:35:07 2011
@@ -119,7 +119,7 @@ public class ShortValuesCreator extends
if (term == null) {
break;
}
- final Short termval = parser.parseShort(term);
+ final short termval = parser.parseShort(term);
docs = termsEnum.docs(null, docs);
while (true) {
final int docID = docs.nextDoc();
Modified: lucene/dev/branches/solrcloud/lucene/src/java/org/apache/lucene/store/ByteArrayDataInput.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/solrcloud/lucene/src/java/org/apache/lucene/store/ByteArrayDataInput.java?rev=1197110&r1=1197109&r2=1197110&view=diff
==============================================================================
--- lucene/dev/branches/solrcloud/lucene/src/java/org/apache/lucene/store/ByteArrayDataInput.java (original)
+++ lucene/dev/branches/solrcloud/lucene/src/java/org/apache/lucene/store/ByteArrayDataInput.java Thu Nov 3 13:35:07 2011
@@ -52,7 +52,7 @@ public final class ByteArrayDataInput ex
public int getPosition() {
return pos;
}
-
+
public void setPosition(int pos) {
this.pos = pos;
}
Modified: lucene/dev/branches/solrcloud/lucene/src/java/org/apache/lucene/store/FSDirectory.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/solrcloud/lucene/src/java/org/apache/lucene/store/FSDirectory.java?rev=1197110&r1=1197109&r2=1197110&view=diff
==============================================================================
--- lucene/dev/branches/solrcloud/lucene/src/java/org/apache/lucene/store/FSDirectory.java (original)
+++ lucene/dev/branches/solrcloud/lucene/src/java/org/apache/lucene/store/FSDirectory.java Thu Nov 3 13:35:07 2011
@@ -122,7 +122,7 @@ public abstract class FSDirectory extend
protected final Set<String> staleFiles = synchronizedSet(new HashSet<String>()); // Files written, but not yet sync'ed
private int chunkSize = DEFAULT_READ_CHUNK_SIZE; // LUCENE-1566
- // null means no limite
+ // null means no limit
private volatile RateLimiter mergeWriteRateLimiter;
// returns the canonical version of the directory, creating it if it doesn't exist.
Modified: lucene/dev/branches/solrcloud/lucene/src/java/org/apache/lucene/store/IndexInput.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/solrcloud/lucene/src/java/org/apache/lucene/store/IndexInput.java?rev=1197110&r1=1197109&r2=1197110&view=diff
==============================================================================
--- lucene/dev/branches/solrcloud/lucene/src/java/org/apache/lucene/store/IndexInput.java (original)
+++ lucene/dev/branches/solrcloud/lucene/src/java/org/apache/lucene/store/IndexInput.java Thu Nov 3 13:35:07 2011
@@ -26,8 +26,6 @@ import java.io.IOException;
*/
public abstract class IndexInput extends DataInput implements Cloneable,Closeable {
- protected byte[] copyBuf = null;
-
/** Closes the stream to further operations. */
public abstract void close() throws IOException;
@@ -59,9 +57,7 @@ public abstract class IndexInput extends
public void copyBytes(IndexOutput out, long numBytes) throws IOException {
assert numBytes >= 0: "numBytes=" + numBytes;
- if (copyBuf == null) {
- copyBuf = new byte[BufferedIndexInput.BUFFER_SIZE];
- }
+ byte copyBuf[] = new byte[BufferedIndexInput.BUFFER_SIZE];
while (numBytes > 0) {
final int toCopy = (int) (numBytes > copyBuf.length ? copyBuf.length : numBytes);
Modified: lucene/dev/branches/solrcloud/lucene/src/java/org/apache/lucene/store/RateLimiter.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/solrcloud/lucene/src/java/org/apache/lucene/store/RateLimiter.java?rev=1197110&r1=1197109&r2=1197110&view=diff
==============================================================================
--- lucene/dev/branches/solrcloud/lucene/src/java/org/apache/lucene/store/RateLimiter.java (original)
+++ lucene/dev/branches/solrcloud/lucene/src/java/org/apache/lucene/store/RateLimiter.java Thu Nov 3 13:35:07 2011
@@ -63,7 +63,7 @@ public class RateLimiter {
* with a biggish count, not one byte at a time. */
public void pause(long bytes) {
- // TODO: this is purely instantenous rate; maybe we
+ // TODO: this is purely instantaneous rate; maybe we
// should also offer decayed recent history one?
final long targetNS = lastNS = lastNS + ((long) (bytes * nsPerByte));
long curNS = System.nanoTime();
@@ -71,7 +71,7 @@ public class RateLimiter {
lastNS = curNS;
}
- // While loop because Thread.sleep doesn't alway sleep
+ // While loop because Thread.sleep doesn't always sleep
// enough:
while(true) {
final long pauseNS = targetNS - curNS;
Modified: lucene/dev/branches/solrcloud/lucene/src/java/org/apache/lucene/util/BytesRef.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/solrcloud/lucene/src/java/org/apache/lucene/util/BytesRef.java?rev=1197110&r1=1197109&r2=1197110&view=diff
==============================================================================
--- lucene/dev/branches/solrcloud/lucene/src/java/org/apache/lucene/util/BytesRef.java (original)
+++ lucene/dev/branches/solrcloud/lucene/src/java/org/apache/lucene/util/BytesRef.java Thu Nov 3 13:35:07 2011
@@ -79,7 +79,7 @@ public final class BytesRef implements C
/**
* @param text Initialize the byte[] from the UTF8 bytes
- * for the provided Sring. This must be well-formed
+ * for the provided String. This must be well-formed
* unicode text, with no unpaired surrogates or U+FFFF.
*/
public BytesRef(CharSequence text) {
Modified: lucene/dev/branches/solrcloud/lucene/src/java/org/apache/lucene/util/CharsRef.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/solrcloud/lucene/src/java/org/apache/lucene/util/CharsRef.java?rev=1197110&r1=1197109&r2=1197110&view=diff
==============================================================================
--- lucene/dev/branches/solrcloud/lucene/src/java/org/apache/lucene/util/CharsRef.java (original)
+++ lucene/dev/branches/solrcloud/lucene/src/java/org/apache/lucene/util/CharsRef.java Thu Nov 3 13:35:07 2011
@@ -189,18 +189,22 @@ public final class CharsRef implements C
* Copies the given array into this CharsRef starting at offset 0
*/
public void copy(char[] otherChars, int otherOffset, int otherLength) {
+ grow(otherLength);
+ System.arraycopy(otherChars, otherOffset, this.chars, 0,
+ otherLength);
this.offset = 0;
- append(otherChars, otherOffset, otherLength);
+ this.length = otherLength;
}
/**
- * Appends the given array to this CharsRef starting at the current offset
+ * Appends the given array to this CharsRef
*/
public void append(char[] otherChars, int otherOffset, int otherLength) {
- grow(this.offset + otherLength);
- System.arraycopy(otherChars, otherOffset, this.chars, this.offset,
+ final int newLength = length + otherLength;
+ grow(this.offset + newLength);
+ System.arraycopy(otherChars, otherOffset, this.chars, this.offset+length,
otherLength);
- this.length = otherLength;
+ this.length += otherLength;
}
@Override
Modified: lucene/dev/branches/solrcloud/lucene/src/java/org/apache/lucene/util/DocIdBitSet.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/solrcloud/lucene/src/java/org/apache/lucene/util/DocIdBitSet.java?rev=1197110&r1=1197109&r2=1197110&view=diff
==============================================================================
--- lucene/dev/branches/solrcloud/lucene/src/java/org/apache/lucene/util/DocIdBitSet.java (original)
+++ lucene/dev/branches/solrcloud/lucene/src/java/org/apache/lucene/util/DocIdBitSet.java Thu Nov 3 13:35:07 2011
@@ -24,8 +24,8 @@ import org.apache.lucene.search.DocIdSet
/** Simple DocIdSet and DocIdSetIterator backed by a BitSet */
-public class DocIdBitSet extends DocIdSet {
- private BitSet bitSet;
+public class DocIdBitSet extends DocIdSet implements Bits {
+ private final BitSet bitSet;
public DocIdBitSet(BitSet bitSet) {
this.bitSet = bitSet;
@@ -36,6 +36,11 @@ public class DocIdBitSet extends DocIdSe
return new DocIdBitSetIterator(bitSet);
}
+ @Override
+ public Bits bits() {
+ return this;
+ }
+
/** This DocIdSet implementation is cacheable. */
@Override
public boolean isCacheable() {
@@ -46,7 +51,18 @@ public class DocIdBitSet extends DocIdSe
* Returns the underlying BitSet.
*/
public BitSet getBitSet() {
- return this.bitSet;
+ return this.bitSet;
+ }
+
+ @Override
+ public boolean get(int index) {
+ return bitSet.get(index);
+ }
+
+ @Override
+ public int length() {
+ // the size may not be correct...
+ return bitSet.size();
}
private static class DocIdBitSetIterator extends DocIdSetIterator {
Modified: lucene/dev/branches/solrcloud/lucene/src/java/org/apache/lucene/util/FixedBitSet.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/solrcloud/lucene/src/java/org/apache/lucene/util/FixedBitSet.java?rev=1197110&r1=1197109&r2=1197110&view=diff
==============================================================================
--- lucene/dev/branches/solrcloud/lucene/src/java/org/apache/lucene/util/FixedBitSet.java (original)
+++ lucene/dev/branches/solrcloud/lucene/src/java/org/apache/lucene/util/FixedBitSet.java Thu Nov 3 13:35:07 2011
@@ -67,6 +67,11 @@ public final class FixedBitSet extends D
}
@Override
+ public Bits bits() {
+ return this;
+ }
+
+ @Override
public int length() {
return numBits;
}
@@ -141,7 +146,7 @@ public final class FixedBitSet extends D
public int nextSetBit(int index) {
assert index >= 0 && index < numBits;
int i = index >> 6;
- int subIndex = index & 0x3f; // index within the word
+ final int subIndex = index & 0x3f; // index within the word
long word = bits[i] >> subIndex; // skip all the bits to the right of index
if (word!=0) {
@@ -158,6 +163,9 @@ public final class FixedBitSet extends D
return -1;
}
+ /** Returns the index of the last set bit before or on the index specified.
+ * -1 is returned if there are no more set bits.
+ */
public int prevSetBit(int index) {
assert index >= 0 && index < numBits: "index=" + index + " numBits=" + numBits;
int i = index >> 6;
Modified: lucene/dev/branches/solrcloud/lucene/src/java/org/apache/lucene/util/OpenBitSet.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/solrcloud/lucene/src/java/org/apache/lucene/util/OpenBitSet.java?rev=1197110&r1=1197109&r2=1197110&view=diff
==============================================================================
--- lucene/dev/branches/solrcloud/lucene/src/java/org/apache/lucene/util/OpenBitSet.java (original)
+++ lucene/dev/branches/solrcloud/lucene/src/java/org/apache/lucene/util/OpenBitSet.java Thu Nov 3 13:35:07 2011
@@ -119,6 +119,11 @@ public class OpenBitSet extends DocIdSet
return new OpenBitSetIterator(bits, wlen);
}
+ @Override
+ public Bits bits() {
+ return this;
+ }
+
/** This DocIdSet implementation is cacheable. */
@Override
public boolean isCacheable() {
Modified: lucene/dev/branches/solrcloud/lucene/src/java/org/apache/lucene/util/PagedBytes.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/solrcloud/lucene/src/java/org/apache/lucene/util/PagedBytes.java?rev=1197110&r1=1197109&r2=1197110&view=diff
==============================================================================
--- lucene/dev/branches/solrcloud/lucene/src/java/org/apache/lucene/util/PagedBytes.java (original)
+++ lucene/dev/branches/solrcloud/lucene/src/java/org/apache/lucene/util/PagedBytes.java Thu Nov 3 13:35:07 2011
@@ -17,12 +17,14 @@ package org.apache.lucene.util;
* limitations under the License.
*/
-import org.apache.lucene.store.IndexInput;
-
-import java.util.List;
-import java.util.ArrayList;
import java.io.Closeable;
import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.lucene.store.DataInput;
+import org.apache.lucene.store.DataOutput;
+import org.apache.lucene.store.IndexInput;
/** Represents a logical byte[] as a series of pages. You
* can write-once into the logical byte[] (append only),
@@ -37,6 +39,8 @@ public final class PagedBytes {
private final int blockSize;
private final int blockBits;
private final int blockMask;
+ private boolean didSkipBytes;
+ private boolean frozen;
private int upto;
private byte[] currentBlock;
@@ -320,6 +324,7 @@ public final class PagedBytes {
if (currentBlock != null) {
blocks.add(currentBlock);
blockEnd.add(upto);
+ didSkipBytes = true;
}
currentBlock = new byte[blockSize];
upto = 0;
@@ -338,6 +343,12 @@ public final class PagedBytes {
/** Commits final byte[], trimming it if necessary and if trim=true */
public Reader freeze(boolean trim) {
+ if (frozen) {
+ throw new IllegalStateException("already frozen");
+ }
+ if (didSkipBytes) {
+ throw new IllegalStateException("cannot freeze when copy(BytesRef, BytesRef) was used");
+ }
if (trim && upto < blockSize) {
final byte[] newBlock = new byte[upto];
System.arraycopy(currentBlock, 0, newBlock, 0, upto);
@@ -348,6 +359,7 @@ public final class PagedBytes {
}
blocks.add(currentBlock);
blockEnd.add(upto);
+ frozen = true;
currentBlock = null;
return new Reader(this);
}
@@ -389,4 +401,150 @@ public final class PagedBytes {
return pointer;
}
+
+ public final class PagedBytesDataInput extends DataInput {
+ private int currentBlockIndex;
+ private int currentBlockUpto;
+ private byte[] currentBlock;
+
+ PagedBytesDataInput() {
+ currentBlock = blocks.get(0);
+ }
+
+ @Override
+ public Object clone() {
+ PagedBytesDataInput clone = getDataInput();
+ clone.setPosition(getPosition());
+ return clone;
+ }
+
+ /** Returns the current byte position. */
+ public long getPosition() {
+ return currentBlockIndex * blockSize + currentBlockUpto;
+ }
+
+ /** Seek to a position previously obtained from
+ * {@link #getPosition}. */
+ public void setPosition(long pos) {
+ currentBlockIndex = (int) (pos >> blockBits);
+ currentBlock = blocks.get(currentBlockIndex);
+ currentBlockUpto = (int) (pos & blockMask);
+ }
+
+ @Override
+ public byte readByte() {
+ if (currentBlockUpto == blockSize) {
+ nextBlock();
+ }
+ return currentBlock[currentBlockUpto++];
+ }
+
+ @Override
+ public void readBytes(byte[] b, int offset, int len) {
+ final int offsetEnd = offset + len;
+ while (true) {
+ final int blockLeft = blockSize - currentBlockUpto;
+ final int left = offsetEnd - offset;
+ if (blockLeft < left) {
+ System.arraycopy(currentBlock, currentBlockUpto,
+ b, offset,
+ blockLeft);
+ nextBlock();
+ offset += blockLeft;
+ } else {
+ // Last block
+ System.arraycopy(currentBlock, currentBlockUpto,
+ b, offset,
+ left);
+ currentBlockUpto += left;
+ break;
+ }
+ }
+ }
+
+ private void nextBlock() {
+ currentBlockIndex++;
+ currentBlockUpto = 0;
+ currentBlock = blocks.get(currentBlockIndex);
+ }
+ }
+
+ public final class PagedBytesDataOutput extends DataOutput {
+ @Override
+ public void writeByte(byte b) {
+ if (upto == blockSize) {
+ if (currentBlock != null) {
+ blocks.add(currentBlock);
+ blockEnd.add(upto);
+ }
+ currentBlock = new byte[blockSize];
+ upto = 0;
+ }
+ currentBlock[upto++] = b;
+ }
+
+ @Override
+ public void writeBytes(byte[] b, int offset, int length) throws IOException {
+ if (length == 0) {
+ return;
+ }
+
+ if (upto == blockSize) {
+ if (currentBlock != null) {
+ blocks.add(currentBlock);
+ blockEnd.add(upto);
+ }
+ currentBlock = new byte[blockSize];
+ upto = 0;
+ }
+
+ final int offsetEnd = offset + length;
+ while(true) {
+ final int left = offsetEnd - offset;
+ final int blockLeft = blockSize - upto;
+ if (blockLeft < left) {
+ System.arraycopy(b, offset, currentBlock, upto, blockLeft);
+ blocks.add(currentBlock);
+ blockEnd.add(blockSize);
+ currentBlock = new byte[blockSize];
+ upto = 0;
+ offset += blockLeft;
+ } else {
+ // Last block
+ System.arraycopy(b, offset, currentBlock, upto, left);
+ upto += left;
+ break;
+ }
+ }
+ }
+
+ /** Return the current byte position. */
+ public long getPosition() {
+ if (currentBlock == null) {
+ return 0;
+ } else {
+ return blocks.size() * blockSize + upto;
+ }
+ }
+ }
+
+ /** Returns a DataInput to read values from this
+ * PagedBytes instance. */
+ public PagedBytesDataInput getDataInput() {
+ if (!frozen) {
+ throw new IllegalStateException("must call freeze() before getDataInput");
+ }
+ return new PagedBytesDataInput();
+ }
+
+ /** Returns a DataOutput that you may use to write into
+ * this PagedBytes instance. If you do this, you should
+ * not call the other writing methods (eg, copy);
+ * results are undefined. */
+ public PagedBytesDataOutput getDataOutput() {
+ if (frozen) {
+ throw new IllegalStateException("cannot get DataOutput after freeze()");
+ }
+ return new PagedBytesDataOutput();
+ }
}
Modified: lucene/dev/branches/solrcloud/lucene/src/java/org/apache/lucene/util/automaton/BasicOperations.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/solrcloud/lucene/src/java/org/apache/lucene/util/automaton/BasicOperations.java?rev=1197110&r1=1197109&r2=1197110&view=diff
==============================================================================
--- lucene/dev/branches/solrcloud/lucene/src/java/org/apache/lucene/util/automaton/BasicOperations.java (original)
+++ lucene/dev/branches/solrcloud/lucene/src/java/org/apache/lucene/util/automaton/BasicOperations.java Thu Nov 3 13:35:07 2011
@@ -322,7 +322,7 @@ final public class BasicOperations {
return c;
}
- /** Returns true if these two auotomata accept exactly the
+ /** Returns true if these two automata accept exactly the
* same language. This is a costly computation! Note
* also that a1 and a2 will be determinized as a side
* effect. */
Modified: lucene/dev/branches/solrcloud/lucene/src/java/org/apache/lucene/util/fst/UpToTwoPositiveIntOutputs.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/solrcloud/lucene/src/java/org/apache/lucene/util/fst/UpToTwoPositiveIntOutputs.java?rev=1197110&r1=1197109&r2=1197110&view=diff
==============================================================================
--- lucene/dev/branches/solrcloud/lucene/src/java/org/apache/lucene/util/fst/UpToTwoPositiveIntOutputs.java (original)
+++ lucene/dev/branches/solrcloud/lucene/src/java/org/apache/lucene/util/fst/UpToTwoPositiveIntOutputs.java Thu Nov 3 13:35:07 2011
@@ -25,7 +25,7 @@ import org.apache.lucene.store.DataOutpu
/**
* Holds one or two longs for each input term. If it's a
* single output, Long is returned; else, TwoLongs. Order
- * is preseved in the TwoLongs case, ie .first is the first
+ * is preserved in the TwoLongs case, ie .first is the first
* input/output added to Builder, and .second is the
* second. You cannot store 0 output with this (that's
* reserved to mean "no output")!
Modified: lucene/dev/branches/solrcloud/lucene/src/java/org/apache/lucene/util/mutable/MutableValue.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/solrcloud/lucene/src/java/org/apache/lucene/util/mutable/MutableValue.java?rev=1197110&r1=1197109&r2=1197110&view=diff
==============================================================================
--- lucene/dev/branches/solrcloud/lucene/src/java/org/apache/lucene/util/mutable/MutableValue.java (original)
+++ lucene/dev/branches/solrcloud/lucene/src/java/org/apache/lucene/util/mutable/MutableValue.java Thu Nov 3 13:35:07 2011
@@ -17,7 +17,7 @@
package org.apache.lucene.util.mutable;
/** @lucene.internal */
-public abstract class MutableValue implements Comparable {
+public abstract class MutableValue implements Comparable<MutableValue> {
public boolean exists = true;
public abstract void copy(MutableValue source);
@@ -30,9 +30,9 @@ public abstract class MutableValue imple
return exists;
}
- public int compareTo(Object other) {
- Class c1 = this.getClass();
- Class c2 = other.getClass();
+ public int compareTo(MutableValue other) {
+ Class<? extends MutableValue> c1 = this.getClass();
+ Class<? extends MutableValue> c2 = other.getClass();
if (c1 != c2) {
int c = c1.hashCode() - c2.hashCode();
if (c == 0) {
@@ -45,9 +45,7 @@ public abstract class MutableValue imple
@Override
public boolean equals(Object other) {
- Class c1 = this.getClass();
- Class c2 = other.getClass();
- return (c1 == c2) && this.equalsSameType(other);
+ return (getClass() == other.getClass()) && this.equalsSameType(other);
}
@Override
Modified: lucene/dev/branches/solrcloud/lucene/src/test-framework/org/apache/lucene/index/ThreadedIndexingAndSearchingTestCase.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/solrcloud/lucene/src/test-framework/org/apache/lucene/index/ThreadedIndexingAndSearchingTestCase.java?rev=1197110&r1=1197109&r2=1197110&view=diff
==============================================================================
--- lucene/dev/branches/solrcloud/lucene/src/test-framework/org/apache/lucene/index/ThreadedIndexingAndSearchingTestCase.java (original)
+++ lucene/dev/branches/solrcloud/lucene/src/test-framework/org/apache/lucene/index/ThreadedIndexingAndSearchingTestCase.java Thu Nov 3 13:35:07 2011
@@ -55,7 +55,7 @@ import org.apache.lucene.util._TestUtil;
// TODO
// - mix in optimize, addIndexes
-// - randomoly mix in non-congruent docs
+// - randomly mix in non-congruent docs
/** Utility class that spawns multiple indexing and
* searching threads. */
Modified: lucene/dev/branches/solrcloud/lucene/src/test-framework/org/apache/lucene/index/codecs/preflexrw/TermInfosWriter.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/solrcloud/lucene/src/test-framework/org/apache/lucene/index/codecs/preflexrw/TermInfosWriter.java?rev=1197110&r1=1197109&r2=1197110&view=diff
==============================================================================
--- lucene/dev/branches/solrcloud/lucene/src/test-framework/org/apache/lucene/index/codecs/preflexrw/TermInfosWriter.java (original)
+++ lucene/dev/branches/solrcloud/lucene/src/test-framework/org/apache/lucene/index/codecs/preflexrw/TermInfosWriter.java Thu Nov 3 13:35:07 2011
@@ -199,6 +199,11 @@ final class TermInfosWriter implements C
if (ch1 != ch2)
return ch1-ch2;
}
+ if (utf16Result1.length == 0 && lastFieldNumber == -1) {
+ // If there is a field named "" (empty string) with a term text of "" (empty string) then we
+ // will get 0 on this comparison, yet, it's "OK".
+ return -1;
+ }
return utf16Result1.length - utf16Result2.length;
}
Modified: lucene/dev/branches/solrcloud/lucene/src/test-framework/org/apache/lucene/search/AssertingIndexSearcher.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/solrcloud/lucene/src/test-framework/org/apache/lucene/search/AssertingIndexSearcher.java?rev=1197110&r1=1197109&r2=1197110&view=diff
==============================================================================
--- lucene/dev/branches/solrcloud/lucene/src/test-framework/org/apache/lucene/search/AssertingIndexSearcher.java (original)
+++ lucene/dev/branches/solrcloud/lucene/src/test-framework/org/apache/lucene/search/AssertingIndexSearcher.java Thu Nov 3 13:35:07 2011
@@ -17,6 +17,7 @@ package org.apache.lucene.search;
* limitations under the License.
*/
+import java.util.Random;
import java.util.concurrent.ExecutorService;
import java.io.IOException;
@@ -31,20 +32,25 @@ import org.apache.lucene.util.Bits;
* TODO: Extend this by more checks, that's just a start.
*/
public class AssertingIndexSearcher extends IndexSearcher {
- public AssertingIndexSearcher(IndexReader r) {
+ final Random random;
+ public AssertingIndexSearcher(Random random, IndexReader r) {
super(r);
+ this.random = new Random(random.nextLong());
}
- public AssertingIndexSearcher(ReaderContext context) {
+ public AssertingIndexSearcher(Random random, ReaderContext context) {
super(context);
+ this.random = new Random(random.nextLong());
}
- public AssertingIndexSearcher(IndexReader r, ExecutorService ex) {
+ public AssertingIndexSearcher(Random random, IndexReader r, ExecutorService ex) {
super(r, ex);
+ this.random = new Random(random.nextLong());
}
- public AssertingIndexSearcher(ReaderContext context, ExecutorService ex) {
+ public AssertingIndexSearcher(Random random, ReaderContext context, ExecutorService ex) {
super(context, ex);
+ this.random = new Random(random.nextLong());
}
/** Ensures, that the returned {@code Weight} is not normalized again, which may produce wrong scores. */
@@ -84,4 +90,16 @@ public class AssertingIndexSearcher exte
}
};
}
+
+ @Override
+ protected Query wrapFilter(Query query, Filter filter) {
+ if (random.nextBoolean())
+ return super.wrapFilter(query, filter);
+ return (filter == null) ? query : new FilteredQuery(query, filter) {
+ @Override
+ protected boolean useRandomAccess(Bits bits, int firstFilterDoc) {
+ return random.nextBoolean();
+ }
+ };
+ }
}
Modified: lucene/dev/branches/solrcloud/lucene/src/test-framework/org/apache/lucene/search/CachingWrapperFilterHelper.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/solrcloud/lucene/src/test-framework/org/apache/lucene/search/CachingWrapperFilterHelper.java?rev=1197110&r1=1197109&r2=1197110&view=diff
==============================================================================
--- lucene/dev/branches/solrcloud/lucene/src/test-framework/org/apache/lucene/search/CachingWrapperFilterHelper.java (original)
+++ lucene/dev/branches/solrcloud/lucene/src/test-framework/org/apache/lucene/search/CachingWrapperFilterHelper.java Thu Nov 3 13:35:07 2011
@@ -22,6 +22,7 @@ import java.io.IOException;
import junit.framework.Assert;
import org.apache.lucene.index.IndexReader.AtomicReaderContext;
+import org.apache.lucene.util.Bits;
/**
* A unit test helper class to test when the filter is getting cached and when it is not.
@@ -42,10 +43,10 @@ public class CachingWrapperFilterHelper
}
@Override
- public synchronized DocIdSet getDocIdSet(AtomicReaderContext context) throws IOException {
+ public synchronized DocIdSet getDocIdSet(AtomicReaderContext context, Bits acceptDocs) throws IOException {
final int saveMissCount = missCount;
- DocIdSet docIdSet = super.getDocIdSet(context);
+ DocIdSet docIdSet = super.getDocIdSet(context, acceptDocs);
if (shouldHaveCache) {
Assert.assertEquals("Cache should have data ", saveMissCount, missCount);
Modified: lucene/dev/branches/solrcloud/lucene/src/test-framework/org/apache/lucene/store/MockDirectoryWrapper.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/solrcloud/lucene/src/test-framework/org/apache/lucene/store/MockDirectoryWrapper.java?rev=1197110&r1=1197109&r2=1197110&view=diff
==============================================================================
--- lucene/dev/branches/solrcloud/lucene/src/test-framework/org/apache/lucene/store/MockDirectoryWrapper.java (original)
+++ lucene/dev/branches/solrcloud/lucene/src/test-framework/org/apache/lucene/store/MockDirectoryWrapper.java Thu Nov 3 13:35:07 2011
@@ -30,6 +30,7 @@ import java.util.Iterator;
import java.util.Map;
import java.util.Random;
import java.util.Set;
+import java.util.concurrent.atomic.AtomicInteger;
import org.apache.lucene.index.IndexReader;
import org.apache.lucene.index.codecs.CodecProvider;
@@ -74,6 +75,8 @@ public class MockDirectoryWrapper extend
private ThrottledIndexOutput throttledOutput;
private Throttling throttling = Throttling.SOMETIMES;
+ final AtomicInteger inputCloneCount = new AtomicInteger();
+
// use this for tracking files for crash.
// additionally: provides debugging information in case you leave one open
private Map<Closeable,Exception> openFileHandles = Collections.synchronizedMap(new IdentityHashMap<Closeable,Exception>());
@@ -117,6 +120,10 @@ public class MockDirectoryWrapper extend
init();
}
+ public int getInputCloneCount() {
+ return inputCloneCount.get();
+ }
+
public void setTrackDiskUsage(boolean v) {
trackDiskUsage = v;
}
Modified: lucene/dev/branches/solrcloud/lucene/src/test-framework/org/apache/lucene/store/MockIndexInputWrapper.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/solrcloud/lucene/src/test-framework/org/apache/lucene/store/MockIndexInputWrapper.java?rev=1197110&r1=1197109&r2=1197110&view=diff
==============================================================================
--- lucene/dev/branches/solrcloud/lucene/src/test-framework/org/apache/lucene/store/MockIndexInputWrapper.java (original)
+++ lucene/dev/branches/solrcloud/lucene/src/test-framework/org/apache/lucene/store/MockIndexInputWrapper.java Thu Nov 3 13:35:07 2011
@@ -30,6 +30,7 @@ public class MockIndexInputWrapper exten
final String name;
private IndexInput delegate;
private boolean isClone;
+ private boolean closed;
/** Construct an empty output buffer. */
public MockIndexInputWrapper(MockDirectoryWrapper dir, String name, IndexInput delegate) {
@@ -45,6 +46,7 @@ public class MockIndexInputWrapper exten
// after fixing TestTransactions
// dir.maybeThrowDeterministicException();
} finally {
+ closed = true;
delegate.close();
// Pending resolution on LUCENE-686 we may want to
// remove the conditional check so we also track that
@@ -54,9 +56,17 @@ public class MockIndexInputWrapper exten
}
}
}
+
+ private void ensureOpen() {
+ if (closed) {
+ throw new RuntimeException("Abusing closed IndexInput!");
+ }
+ }
@Override
public Object clone() {
+ ensureOpen();
+ dir.inputCloneCount.incrementAndGet();
IndexInput iiclone = (IndexInput) delegate.clone();
MockIndexInputWrapper clone = new MockIndexInputWrapper(dir, name, iiclone);
clone.isClone = true;
@@ -79,72 +89,86 @@ public class MockIndexInputWrapper exten
@Override
public long getFilePointer() {
+ ensureOpen();
return delegate.getFilePointer();
}
@Override
public void seek(long pos) throws IOException {
+ ensureOpen();
delegate.seek(pos);
}
@Override
public long length() {
+ ensureOpen();
return delegate.length();
}
@Override
public byte readByte() throws IOException {
+ ensureOpen();
return delegate.readByte();
}
@Override
public void readBytes(byte[] b, int offset, int len) throws IOException {
+ ensureOpen();
delegate.readBytes(b, offset, len);
}
@Override
public void copyBytes(IndexOutput out, long numBytes) throws IOException {
+ ensureOpen();
delegate.copyBytes(out, numBytes);
}
@Override
public void readBytes(byte[] b, int offset, int len, boolean useBuffer)
throws IOException {
+ ensureOpen();
delegate.readBytes(b, offset, len, useBuffer);
}
@Override
public short readShort() throws IOException {
+ ensureOpen();
return delegate.readShort();
}
@Override
public int readInt() throws IOException {
+ ensureOpen();
return delegate.readInt();
}
@Override
public long readLong() throws IOException {
+ ensureOpen();
return delegate.readLong();
}
@Override
public String readString() throws IOException {
+ ensureOpen();
return delegate.readString();
}
@Override
public Map<String,String> readStringStringMap() throws IOException {
+ ensureOpen();
return delegate.readStringStringMap();
}
@Override
public int readVInt() throws IOException {
+ ensureOpen();
return delegate.readVInt();
}
@Override
public long readVLong() throws IOException {
+ ensureOpen();
return delegate.readVLong();
}
Modified: lucene/dev/branches/solrcloud/lucene/src/test-framework/org/apache/lucene/util/LuceneJUnitResultFormatter.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/solrcloud/lucene/src/test-framework/org/apache/lucene/util/LuceneJUnitResultFormatter.java?rev=1197110&r1=1197109&r2=1197110&view=diff
==============================================================================
--- lucene/dev/branches/solrcloud/lucene/src/test-framework/org/apache/lucene/util/LuceneJUnitResultFormatter.java (original)
+++ lucene/dev/branches/solrcloud/lucene/src/test-framework/org/apache/lucene/util/LuceneJUnitResultFormatter.java Thu Nov 3 13:35:07 2011
@@ -66,7 +66,8 @@ public class LuceneJUnitResultFormatter
private static final org.apache.lucene.store.Lock lock;
static {
- File lockDir = new File(System.getProperty("java.io.tmpdir"),
+ File lockDir = new File(
+ System.getProperty("tests.lockdir", System.getProperty("java.io.tmpdir")),
"lucene_junit_lock");
lockDir.mkdirs();
if (!lockDir.exists()) {
Modified: lucene/dev/branches/solrcloud/lucene/src/test-framework/org/apache/lucene/util/LuceneTestCase.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/solrcloud/lucene/src/test-framework/org/apache/lucene/util/LuceneTestCase.java?rev=1197110&r1=1197109&r2=1197110&view=diff
==============================================================================
--- lucene/dev/branches/solrcloud/lucene/src/test-framework/org/apache/lucene/util/LuceneTestCase.java (original)
+++ lucene/dev/branches/solrcloud/lucene/src/test-framework/org/apache/lucene/util/LuceneTestCase.java Thu Nov 3 13:35:07 2011
@@ -400,6 +400,11 @@ public abstract class LuceneTestCase ext
TimeZone.setDefault(timeZone);
similarityProvider = new RandomSimilarityProvider(random);
testsFailed = false;
+
+ // verify assertions are enabled (do last, for smooth cleanup)
+ if (!Boolean.parseBoolean(System.getProperty("tests.asserts.gracious", "false"))) {
+ assertTrue("assertions are not enabled!", assertionsEnabled());
+ }
}
@AfterClass
@@ -1300,7 +1305,7 @@ public abstract class LuceneTestCase ext
if (maybeWrap && rarely()) {
r = new SlowMultiReaderWrapper(r);
}
- IndexSearcher ret = random.nextBoolean() ? new AssertingIndexSearcher(r) : new AssertingIndexSearcher(r.getTopReaderContext());
+ IndexSearcher ret = random.nextBoolean() ? new AssertingIndexSearcher(random, r) : new AssertingIndexSearcher(random, r.getTopReaderContext());
ret.setSimilarityProvider(similarityProvider);
return ret;
} else {
@@ -1312,13 +1317,13 @@ public abstract class LuceneTestCase ext
System.out.println("NOTE: newSearcher using ExecutorService with " + threads + " threads");
}
IndexSearcher ret = random.nextBoolean() ?
- new AssertingIndexSearcher(r, ex) {
+ new AssertingIndexSearcher(random, r, ex) {
@Override
public void close() throws IOException {
super.close();
shutdownExecutorService(ex);
}
- } : new AssertingIndexSearcher(r.getTopReaderContext(), ex) {
+ } : new AssertingIndexSearcher(random, r.getTopReaderContext(), ex) {
@Override
public void close() throws IOException {
super.close();
@@ -1442,4 +1447,15 @@ public abstract class LuceneTestCase ext
@Ignore("just a hack")
public final void alwaysIgnoredTestMethod() {}
+
+ /** check if assertions are enabled */
+ private static boolean assertionsEnabled() {
+ try {
+ assert Boolean.FALSE.booleanValue();
+ return false; // should never get here
+ } catch (AssertionError e) {
+ return true;
+ }
+ }
+
}
Modified: lucene/dev/branches/solrcloud/lucene/src/test/org/apache/lucene/TestAssertions.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/solrcloud/lucene/src/test/org/apache/lucene/TestAssertions.java?rev=1197110&r1=1197109&r2=1197110&view=diff
==============================================================================
--- lucene/dev/branches/solrcloud/lucene/src/test/org/apache/lucene/TestAssertions.java (original)
+++ lucene/dev/branches/solrcloud/lucene/src/test/org/apache/lucene/TestAssertions.java Thu Nov 3 13:35:07 2011
@@ -17,55 +17,14 @@ package org.apache.lucene;
* limitations under the License.
*/
-import java.io.Reader;
-
import org.apache.lucene.util.LuceneTestCase;
-import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.analysis.TokenStream;
+/**
+ * validate that assertions are enabled during tests
+ */
public class TestAssertions extends LuceneTestCase {
- public void testBasics() {
- try {
- assert Boolean.FALSE.booleanValue();
- fail("assertions are not enabled!");
- } catch (AssertionError e) {
- assert Boolean.TRUE.booleanValue();
- }
- }
-
- static class TestAnalyzer1 extends Analyzer {
-
- @Override
- protected TokenStreamComponents createComponents(String fieldName, Reader aReader) {
- return null;
- }
- }
-
- static final class TestAnalyzer2 extends Analyzer {
-
- @Override
- protected TokenStreamComponents createComponents(String fieldName, Reader aReader) {
- return null;
- }
- }
-
- static class TestAnalyzer3 extends Analyzer {
-
- @Override
- protected TokenStreamComponents createComponents(String fieldName, Reader aReader) {
- return null;
- }
- }
-
- static class TestAnalyzer4 extends Analyzer {
-
- @Override
- protected TokenStreamComponents createComponents(String fieldName, Reader aReader) {
- return null;
- }
- }
-
static class TestTokenStream1 extends TokenStream {
@Override
public final boolean incrementToken() { return false; }
@@ -82,31 +41,15 @@ public class TestAssertions extends Luce
}
public void testTokenStreams() {
- new TestAnalyzer1();
-
- new TestAnalyzer2();
-
- try {
- new TestAnalyzer3();
- fail("TestAnalyzer3 should fail assertion");
- } catch (AssertionError e) {
- }
-
- try {
- new TestAnalyzer4();
- fail("TestAnalyzer4 should fail assertion");
- } catch (AssertionError e) {
- }
-
new TestTokenStream1();
-
new TestTokenStream2();
-
+ boolean doFail = false;
try {
new TestTokenStream3();
- fail("TestTokenStream3 should fail assertion");
+ doFail = true;
} catch (AssertionError e) {
+ // expected
}
+ assertFalse("TestTokenStream3 should fail assertion", doFail);
}
-
}
Modified: lucene/dev/branches/solrcloud/lucene/src/test/org/apache/lucene/index/TestDocumentsWriterDeleteQueue.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/solrcloud/lucene/src/test/org/apache/lucene/index/TestDocumentsWriterDeleteQueue.java?rev=1197110&r1=1197109&r2=1197110&view=diff
==============================================================================
--- lucene/dev/branches/solrcloud/lucene/src/test/org/apache/lucene/index/TestDocumentsWriterDeleteQueue.java (original)
+++ lucene/dev/branches/solrcloud/lucene/src/test/org/apache/lucene/index/TestDocumentsWriterDeleteQueue.java Thu Nov 3 13:35:07 2011
@@ -16,10 +16,12 @@ package org.apache.lucene.index;
* License for the specific language governing permissions and limitations under
* the License.
*/
+import java.lang.reflect.Field;
import java.util.HashSet;
import java.util.Set;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.atomic.AtomicInteger;
+import java.util.concurrent.locks.ReentrantLock;
import org.apache.lucene.index.DocumentsWriterDeleteQueue.DeleteSlice;
import org.apache.lucene.search.TermQuery;
@@ -142,6 +144,32 @@ public class TestDocumentsWriterDeleteQu
}
}
}
+
+ public void testPartiallyAppliedGlobalSlice() throws SecurityException,
+ NoSuchFieldException, IllegalArgumentException, IllegalAccessException,
+ InterruptedException {
+ final DocumentsWriterDeleteQueue queue = new DocumentsWriterDeleteQueue();
+ Field field = DocumentsWriterDeleteQueue.class
+ .getDeclaredField("globalBufferLock");
+ field.setAccessible(true);
+ ReentrantLock lock = (ReentrantLock) field.get(queue);
+ lock.lock();
+ Thread t = new Thread() {
+ public void run() {
+ queue.addDelete(new Term("foo", "bar"));
+ }
+ };
+ t.start();
+ t.join();
+ lock.unlock();
+ assertTrue("changes in del queue but not in slice yet", queue.anyChanges());
+ queue.tryApplyGlobalSlice();
+ assertTrue("changes in global buffer", queue.anyChanges());
+ FrozenBufferedDeletes freezeGlobalBuffer = queue.freezeGlobalBuffer(null);
+ assertTrue(freezeGlobalBuffer.any());
+ assertEquals(1, freezeGlobalBuffer.termCount);
+ assertFalse("all changes applied", queue.anyChanges());
+ }
public void testStressDeleteQueue() throws InterruptedException {
DocumentsWriterDeleteQueue queue = new DocumentsWriterDeleteQueue();
Modified: lucene/dev/branches/solrcloud/lucene/src/test/org/apache/lucene/index/TestIndexReader.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/solrcloud/lucene/src/test/org/apache/lucene/index/TestIndexReader.java?rev=1197110&r1=1197109&r2=1197110&view=diff
==============================================================================
--- lucene/dev/branches/solrcloud/lucene/src/test/org/apache/lucene/index/TestIndexReader.java (original)
+++ lucene/dev/branches/solrcloud/lucene/src/test/org/apache/lucene/index/TestIndexReader.java Thu Nov 3 13:35:07 2011
@@ -1201,7 +1201,7 @@ public class TestIndexReader extends Luc
// LUCENE-1586: getUniqueTermCount
public void testUniqueTermCount() throws Exception {
Directory dir = newDirectory();
- IndexWriter writer = new IndexWriter(dir, newIndexWriterConfig(TEST_VERSION_CURRENT, new MockAnalyzer(random)).setCodecProvider(_TestUtil.alwaysCodec("Standard")));
+ IndexWriter writer = new IndexWriter(dir, newIndexWriterConfig(TEST_VERSION_CURRENT, new MockAnalyzer(random)));
Document doc = new Document();
doc.add(newField("field", "a b c d e f g h i j k l m n o p q r s t u v w x y z", TextField.TYPE_UNSTORED));
doc.add(newField("number", "0 1 2 3 4 5 6 7 8 9", TextField.TYPE_UNSTORED));
@@ -1217,12 +1217,8 @@ public class TestIndexReader extends Luc
IndexReader r2 = IndexReader.openIfChanged(r);
assertNotNull(r2);
r.close();
- try {
- r2.getUniqueTermCount();
- fail("expected exception");
- } catch (UnsupportedOperationException uoe) {
- // expected
- }
+ assertEquals(-1, r2.getUniqueTermCount());
+
IndexReader[] subs = r2.getSequentialSubReaders();
for(int i=0;i<subs.length;i++) {
assertEquals(36, subs[i].getUniqueTermCount());
Modified: lucene/dev/branches/solrcloud/lucene/src/test/org/apache/lucene/index/TestIndexWriter.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/solrcloud/lucene/src/test/org/apache/lucene/index/TestIndexWriter.java?rev=1197110&r1=1197109&r2=1197110&view=diff
==============================================================================
--- lucene/dev/branches/solrcloud/lucene/src/test/org/apache/lucene/index/TestIndexWriter.java (original)
+++ lucene/dev/branches/solrcloud/lucene/src/test/org/apache/lucene/index/TestIndexWriter.java Thu Nov 3 13:35:07 2011
@@ -869,6 +869,46 @@ public class TestIndexWriter extends Luc
writer.close();
dir.close();
}
+
+ public void testEmptyFieldNameTerms() throws IOException {
+ Directory dir = newDirectory();
+ IndexWriter writer = new IndexWriter(dir, newIndexWriterConfig( TEST_VERSION_CURRENT, new MockAnalyzer(random)));
+ Document doc = new Document();
+ doc.add(newField("", "a b c", TextField.TYPE_UNSTORED));
+ writer.addDocument(doc);
+ writer.close();
+ IndexReader reader = IndexReader.open(dir, true);
+ IndexReader subreader = getOnlySegmentReader(reader);
+ TermsEnum te = subreader.fields().terms("").iterator();
+ assertEquals(new BytesRef("a"), te.next());
+ assertEquals(new BytesRef("b"), te.next());
+ assertEquals(new BytesRef("c"), te.next());
+ assertNull(te.next());
+ reader.close();
+ dir.close();
+ }
+
+ public void testEmptyFieldNameWithEmptyTerm() throws IOException {
+ Directory dir = newDirectory();
+ IndexWriter writer = new IndexWriter(dir, newIndexWriterConfig( TEST_VERSION_CURRENT, new MockAnalyzer(random)));
+ Document doc = new Document();
+ doc.add(newField("", "", StringField.TYPE_UNSTORED));
+ doc.add(newField("", "a", StringField.TYPE_UNSTORED));
+ doc.add(newField("", "b", StringField.TYPE_UNSTORED));
+ doc.add(newField("", "c", StringField.TYPE_UNSTORED));
+ writer.addDocument(doc);
+ writer.close();
+ IndexReader reader = IndexReader.open(dir, true);
+ IndexReader subreader = getOnlySegmentReader(reader);
+ TermsEnum te = subreader.fields().terms("").iterator();
+ assertEquals(new BytesRef(""), te.next());
+ assertEquals(new BytesRef("a"), te.next());
+ assertEquals(new BytesRef("b"), te.next());
+ assertEquals(new BytesRef("c"), te.next());
+ assertNull(te.next());
+ reader.close();
+ dir.close();
+ }
Modified: lucene/dev/branches/solrcloud/lucene/src/test/org/apache/lucene/index/TestIndexWriterDelete.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/solrcloud/lucene/src/test/org/apache/lucene/index/TestIndexWriterDelete.java?rev=1197110&r1=1197109&r2=1197110&view=diff
==============================================================================
--- lucene/dev/branches/solrcloud/lucene/src/test/org/apache/lucene/index/TestIndexWriterDelete.java (original)
+++ lucene/dev/branches/solrcloud/lucene/src/test/org/apache/lucene/index/TestIndexWriterDelete.java Thu Nov 3 13:35:07 2011
@@ -23,14 +23,15 @@ import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Random;
-import java.util.concurrent.atomic.AtomicInteger;
import java.util.concurrent.atomic.AtomicBoolean;
+import java.util.concurrent.atomic.AtomicInteger;
import org.apache.lucene.analysis.*;
import org.apache.lucene.document.Document;
import org.apache.lucene.document.FieldType;
import org.apache.lucene.document.StringField;
import org.apache.lucene.document.TextField;
+import org.apache.lucene.index.codecs.CodecProvider;
import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.ScoreDoc;
import org.apache.lucene.search.TermQuery;
@@ -896,6 +897,8 @@ public class TestIndexWriterDelete exten
}
public void testIndexingThenDeleting() throws Exception {
+ assumeFalse("This test cannot run with Memory codec", CodecProvider.getDefault().getFieldCodec("field").equals("Memory"));
+ assumeFalse("This test cannot run with SimpleText codec", CodecProvider.getDefault().getFieldCodec("field").equals("SimpleText"));
final Random r = random;
Directory dir = newDirectory();
// note this test explicitly disables payloads
Modified: lucene/dev/branches/solrcloud/lucene/src/test/org/apache/lucene/index/TestIndexWriterReader.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/solrcloud/lucene/src/test/org/apache/lucene/index/TestIndexWriterReader.java?rev=1197110&r1=1197109&r2=1197110&view=diff
==============================================================================
--- lucene/dev/branches/solrcloud/lucene/src/test/org/apache/lucene/index/TestIndexWriterReader.java (original)
+++ lucene/dev/branches/solrcloud/lucene/src/test/org/apache/lucene/index/TestIndexWriterReader.java Thu Nov 3 13:35:07 2011
@@ -857,7 +857,7 @@ public class TestIndexWriterReader exten
int sum = 0;
while(System.currentTimeMillis() < endTime) {
IndexReader r2 = IndexReader.openIfChanged(r);
- if (r2 != r) {
+ if (r2 != null) {
r.close();
r = r2;
}
@@ -1016,4 +1016,40 @@ public class TestIndexWriterReader exten
}
}
+ public void testReopenAfterNoRealChange() throws Exception {
+ Directory d = newDirectory();
+ IndexWriter w = new IndexWriter(
+ d,
+ newIndexWriterConfig(TEST_VERSION_CURRENT, new MockAnalyzer(random)));
+ w.setInfoStream(VERBOSE ? System.out : null);
+
+ IndexReader r = w.getReader(); // start pooling readers
+
+ IndexReader r2 = IndexReader.openIfChanged(r);
+ assertNull(r2);
+
+ w.addDocument(new Document());
+ IndexReader r3 = IndexReader.openIfChanged(r);
+ assertNotNull(r3);
+ assertTrue(r3.getVersion() != r.getVersion());
+ assertTrue(r3.isCurrent());
+
+ // Deletes nothing in reality...:
+ w.deleteDocuments(new Term("foo", "bar"));
+
+ // ... but IW marks this as not current:
+ assertFalse(r3.isCurrent());
+ IndexReader r4 = IndexReader.openIfChanged(r3);
+ assertNull(r4);
+
+ // Deletes nothing in reality...:
+ w.deleteDocuments(new Term("foo", "bar"));
+ IndexReader r5 = IndexReader.openIfChanged(r3, w, true);
+ assertNull(r5);
+
+ r3.close();
+
+ w.close();
+ d.close();
+ }
}
Modified: lucene/dev/branches/solrcloud/lucene/src/test/org/apache/lucene/index/TestNRTThreads.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/solrcloud/lucene/src/test/org/apache/lucene/index/TestNRTThreads.java?rev=1197110&r1=1197109&r2=1197110&view=diff
==============================================================================
--- lucene/dev/branches/solrcloud/lucene/src/test/org/apache/lucene/index/TestNRTThreads.java (original)
+++ lucene/dev/branches/solrcloud/lucene/src/test/org/apache/lucene/index/TestNRTThreads.java Thu Nov 3 13:35:07 2011
@@ -22,11 +22,13 @@ import java.util.concurrent.ExecutorServ
import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.store.MockDirectoryWrapper;
+import org.apache.lucene.util.LuceneTestCase.UseNoMemoryExpensiveCodec;
// TODO
// - mix in optimize, addIndexes
// - randomoly mix in non-congruent docs
+@UseNoMemoryExpensiveCodec
public class TestNRTThreads extends ThreadedIndexingAndSearchingTestCase {
@Override
Modified: lucene/dev/branches/solrcloud/lucene/src/test/org/apache/lucene/index/TestRollingUpdates.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/solrcloud/lucene/src/test/org/apache/lucene/index/TestRollingUpdates.java?rev=1197110&r1=1197109&r2=1197110&view=diff
==============================================================================
--- lucene/dev/branches/solrcloud/lucene/src/test/org/apache/lucene/index/TestRollingUpdates.java (original)
+++ lucene/dev/branches/solrcloud/lucene/src/test/org/apache/lucene/index/TestRollingUpdates.java Thu Nov 3 13:35:07 2011
@@ -37,11 +37,12 @@ public class TestRollingUpdates extends
CodecProvider provider = CodecProvider.getDefault();
//provider.register(new MemoryCodec());
- if (random.nextBoolean()) {
+ if ( (!"PreFlex".equals(provider.getDefaultFieldCodec())) && random.nextBoolean()) {
provider.setFieldCodec("docid", "Memory");
}
final IndexWriter w = new IndexWriter(dir, newIndexWriterConfig(TEST_VERSION_CURRENT, new MockAnalyzer(random)).setCodecProvider(provider));
+ w.setInfoStream(VERBOSE ? System.out : null);
final int SIZE = atLeast(TEST_NIGHTLY ? 100 : 20);
int id = 0;
IndexReader r = null;
Modified: lucene/dev/branches/solrcloud/lucene/src/test/org/apache/lucene/index/TestSegmentMerger.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/solrcloud/lucene/src/test/org/apache/lucene/index/TestSegmentMerger.java?rev=1197110&r1=1197109&r2=1197110&view=diff
==============================================================================
--- lucene/dev/branches/solrcloud/lucene/src/test/org/apache/lucene/index/TestSegmentMerger.java (original)
+++ lucene/dev/branches/solrcloud/lucene/src/test/org/apache/lucene/index/TestSegmentMerger.java Thu Nov 3 13:35:07 2011
@@ -146,12 +146,14 @@ public class TestSegmentMerger extends L
// Assert that SM fails if .del exists
SegmentMerger sm = new SegmentMerger(dir, 1, "a", null, null, null, newIOContext(random));
+ boolean doFail = false;
try {
sm.createCompoundFile("b1", w.segmentInfos.info(0), newIOContext(random));
- fail("should not have been able to create a .cfs with .del and .s* files");
+ doFail = true; // should never get here
} catch (AssertionError e) {
// expected
}
+ assertFalse("should not have been able to create a .cfs with .del and .s* files", doFail);
// Create an index w/ .s*
w = new IndexWriter(dir, new IndexWriterConfig(TEST_VERSION_CURRENT, new MockAnalyzer(random)).setOpenMode(OpenMode.CREATE));
@@ -164,12 +166,15 @@ public class TestSegmentMerger extends L
r.close();
// Assert that SM fails if .s* exists
+ SegmentInfos sis = new SegmentInfos();
+ sis.read(dir);
try {
- sm.createCompoundFile("b2", w.segmentInfos.info(0), newIOContext(random));
- fail("should not have been able to create a .cfs with .del and .s* files");
+ sm.createCompoundFile("b2", sis.info(0), newIOContext(random));
+ doFail = true; // should never get here
} catch (AssertionError e) {
// expected
}
+ assertFalse("should not have been able to create a .cfs with .del and .s* files", doFail);
dir.close();
}
Modified: lucene/dev/branches/solrcloud/lucene/src/test/org/apache/lucene/index/TestTermsEnum.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/solrcloud/lucene/src/test/org/apache/lucene/index/TestTermsEnum.java?rev=1197110&r1=1197109&r2=1197110&view=diff
==============================================================================
--- lucene/dev/branches/solrcloud/lucene/src/test/org/apache/lucene/index/TestTermsEnum.java (original)
+++ lucene/dev/branches/solrcloud/lucene/src/test/org/apache/lucene/index/TestTermsEnum.java Thu Nov 3 13:35:07 2011
@@ -191,7 +191,7 @@ public class TestTermsEnum extends Lucen
final Directory dir = newDirectory();
final RandomIndexWriter w = new RandomIndexWriter(random, dir);
- final int numTerms = atLeast(1000);
+ final int numTerms = atLeast(300);
final Set<String> terms = new HashSet<String>();
final Collection<String> pendingTerms = new ArrayList<String>();
Modified: lucene/dev/branches/solrcloud/lucene/src/test/org/apache/lucene/search/FieldCacheRewriteMethod.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/solrcloud/lucene/src/test/org/apache/lucene/search/FieldCacheRewriteMethod.java?rev=1197110&r1=1197109&r2=1197110&view=diff
==============================================================================
--- lucene/dev/branches/solrcloud/lucene/src/test/org/apache/lucene/search/FieldCacheRewriteMethod.java (original)
+++ lucene/dev/branches/solrcloud/lucene/src/test/org/apache/lucene/search/FieldCacheRewriteMethod.java Thu Nov 3 13:35:07 2011
@@ -24,6 +24,7 @@ import org.apache.lucene.index.IndexRead
import org.apache.lucene.index.IndexReader.AtomicReaderContext;
import org.apache.lucene.index.Terms;
import org.apache.lucene.index.TermsEnum;
+import org.apache.lucene.util.Bits;
import org.apache.lucene.util.BytesRef;
import org.apache.lucene.util.OpenBitSet;
@@ -109,7 +110,7 @@ public final class FieldCacheRewriteMeth
* results.
*/
@Override
- public DocIdSet getDocIdSet(AtomicReaderContext context) throws IOException {
+ public DocIdSet getDocIdSet(AtomicReaderContext context, final Bits acceptDocs) throws IOException {
final FieldCache.DocTermsIndex fcsi = FieldCache.DEFAULT.getTermsIndex(context.reader, query.field);
// Cannot use FixedBitSet because we require long index (ord):
final OpenBitSet termSet = new OpenBitSet(fcsi.numOrd());
@@ -139,6 +140,11 @@ public final class FieldCacheRewriteMeth
public int getDocCount() throws IOException {
return -1;
}
+
+ @Override
+ public long getUniqueTermCount() throws IOException {
+ return -1;
+ }
});
assert termsEnum != null;
@@ -158,7 +164,8 @@ public final class FieldCacheRewriteMeth
return DocIdSet.EMPTY_DOCIDSET;
}
- return new FieldCacheRangeFilter.FieldCacheDocIdSet(context.reader, true) {
+ final int maxDoc = context.reader.maxDoc();
+ return new FieldCacheRangeFilter.FieldCacheDocIdSet(maxDoc, acceptDocs) {
@Override
boolean matchDoc(int doc) throws ArrayIndexOutOfBoundsException {
return termSet.get(fcsi.getOrd(doc));
Modified: lucene/dev/branches/solrcloud/lucene/src/test/org/apache/lucene/search/JustCompileSearch.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/solrcloud/lucene/src/test/org/apache/lucene/search/JustCompileSearch.java?rev=1197110&r1=1197109&r2=1197110&view=diff
==============================================================================
--- lucene/dev/branches/solrcloud/lucene/src/test/org/apache/lucene/search/JustCompileSearch.java (original)
+++ lucene/dev/branches/solrcloud/lucene/src/test/org/apache/lucene/search/JustCompileSearch.java Thu Nov 3 13:35:07 2011
@@ -160,7 +160,7 @@ final class JustCompileSearch {
// still added here in case someone will add abstract methods in the future.
@Override
- public DocIdSet getDocIdSet(AtomicReaderContext context) throws IOException {
+ public DocIdSet getDocIdSet(AtomicReaderContext context, Bits acceptDocs) throws IOException {
return null;
}
}
@@ -288,12 +288,12 @@ final class JustCompileSearch {
static final class JustCompileSpanFilter extends SpanFilter {
@Override
- public SpanFilterResult bitSpans(AtomicReaderContext context) throws IOException {
+ public SpanFilterResult bitSpans(AtomicReaderContext context, Bits acceptDocs) throws IOException {
throw new UnsupportedOperationException(UNSUPPORTED_MSG);
}
@Override
- public DocIdSet getDocIdSet(AtomicReaderContext context) throws IOException {
+ public DocIdSet getDocIdSet(AtomicReaderContext context, Bits acceptDocs) throws IOException {
return null;
}
}
Modified: lucene/dev/branches/solrcloud/lucene/src/test/org/apache/lucene/search/MockFilter.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/solrcloud/lucene/src/test/org/apache/lucene/search/MockFilter.java?rev=1197110&r1=1197109&r2=1197110&view=diff
==============================================================================
--- lucene/dev/branches/solrcloud/lucene/src/test/org/apache/lucene/search/MockFilter.java (original)
+++ lucene/dev/branches/solrcloud/lucene/src/test/org/apache/lucene/search/MockFilter.java Thu Nov 3 13:35:07 2011
@@ -19,15 +19,16 @@ package org.apache.lucene.search;
import org.apache.lucene.index.IndexReader.AtomicReaderContext;
import org.apache.lucene.util.DocIdBitSet;
-import java.util.BitSet;
+import org.apache.lucene.util.FixedBitSet;
+import org.apache.lucene.util.Bits;
public class MockFilter extends Filter {
private boolean wasCalled;
@Override
- public DocIdSet getDocIdSet(AtomicReaderContext context) {
+ public DocIdSet getDocIdSet(AtomicReaderContext context, Bits acceptDocs) {
wasCalled = true;
- return new DocIdBitSet(new BitSet());
+ return new FixedBitSet(context.reader.maxDoc());
}
public void clear() {
Modified: lucene/dev/branches/solrcloud/lucene/src/test/org/apache/lucene/search/SingleDocTestFilter.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/solrcloud/lucene/src/test/org/apache/lucene/search/SingleDocTestFilter.java?rev=1197110&r1=1197109&r2=1197110&view=diff
==============================================================================
--- lucene/dev/branches/solrcloud/lucene/src/test/org/apache/lucene/search/SingleDocTestFilter.java (original)
+++ lucene/dev/branches/solrcloud/lucene/src/test/org/apache/lucene/search/SingleDocTestFilter.java Thu Nov 3 13:35:07 2011
@@ -18,9 +18,9 @@ package org.apache.lucene.search;
*/
import org.apache.lucene.index.IndexReader.AtomicReaderContext;
-import org.apache.lucene.util.DocIdBitSet;
+import org.apache.lucene.util.Bits;
+import org.apache.lucene.util.FixedBitSet;
-import java.util.BitSet;
import java.io.IOException;
public class SingleDocTestFilter extends Filter {
@@ -31,9 +31,10 @@ public class SingleDocTestFilter extends
}
@Override
- public DocIdSet getDocIdSet(AtomicReaderContext context) throws IOException {
- BitSet bits = new BitSet(context.reader.maxDoc());
+ public DocIdSet getDocIdSet(AtomicReaderContext context, Bits acceptDocs) throws IOException {
+ FixedBitSet bits = new FixedBitSet(context.reader.maxDoc());
bits.set(doc);
- return new DocIdBitSet(bits);
+ if (acceptDocs != null && !acceptDocs.get(doc)) bits.clear(doc);
+ return bits;
}
}
Modified: lucene/dev/branches/solrcloud/lucene/src/test/org/apache/lucene/search/TestBooleanScorer.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/solrcloud/lucene/src/test/org/apache/lucene/search/TestBooleanScorer.java?rev=1197110&r1=1197109&r2=1197110&view=diff
==============================================================================
--- lucene/dev/branches/solrcloud/lucene/src/test/org/apache/lucene/search/TestBooleanScorer.java (original)
+++ lucene/dev/branches/solrcloud/lucene/src/test/org/apache/lucene/search/TestBooleanScorer.java Thu Nov 3 13:35:07 2011
@@ -18,16 +18,19 @@ package org.apache.lucene.search;
*/
import java.io.IOException;
+import java.util.ArrayList;
import java.util.Arrays;
+import java.util.List;
import org.apache.lucene.document.Document;
import org.apache.lucene.document.StringField;
+import org.apache.lucene.document.TextField;
+import org.apache.lucene.index.IndexReader.AtomicReaderContext;
import org.apache.lucene.index.IndexReader;
import org.apache.lucene.index.RandomIndexWriter;
import org.apache.lucene.index.Term;
import org.apache.lucene.search.BooleanQuery.BooleanWeight;
import org.apache.lucene.store.Directory;
-
import org.apache.lucene.util.LuceneTestCase;
public class TestBooleanScorer extends LuceneTestCase
@@ -93,13 +96,88 @@ public class TestBooleanScorer extends L
}};
BooleanScorer bs = new BooleanScorer(weight, false, 1, Arrays.asList(scorers), null, scorers.length);
-
- assertEquals("should have received 3000", 3000, bs.nextDoc());
- assertEquals("should have received NO_MORE_DOCS", DocIdSetIterator.NO_MORE_DOCS, bs.nextDoc());
+
+ final List<Integer> hits = new ArrayList<Integer>();
+ bs.score(new Collector() {
+ int docBase;
+ @Override
+ public void setScorer(Scorer scorer) {
+ }
+
+ @Override
+ public void collect(int doc) throws IOException {
+ hits.add(docBase+doc);
+ }
+
+ @Override
+ public void setNextReader(AtomicReaderContext context) {
+ docBase = context.docBase;
+ }
+
+ @Override
+ public boolean acceptsDocsOutOfOrder() {
+ return true;
+ }
+ });
+
+ assertEquals("should have only 1 hit", 1, hits.size());
+ assertEquals("hit should have been docID=3000", 3000, hits.get(0).intValue());
searcher.close();
ir.close();
directory.close();
-
}
+ public void testMoreThan32ProhibitedClauses() throws Exception {
+ final Directory d = newDirectory();
+ final RandomIndexWriter w = new RandomIndexWriter(random, d);
+ Document doc = new Document();
+ doc.add(new TextField("field", "0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33"));
+ w.addDocument(doc);
+ doc = new Document();
+ doc.add(new TextField("field", "33"));
+ w.addDocument(doc);
+ final IndexReader r = w.getReader();
+ w.close();
+ final IndexSearcher s = newSearcher(r);
+
+ final BooleanQuery q = new BooleanQuery();
+ for(int term=0;term<33;term++) {
+ q.add(new BooleanClause(new TermQuery(new Term("field", ""+term)),
+ BooleanClause.Occur.MUST_NOT));
+ }
+ q.add(new BooleanClause(new TermQuery(new Term("field", "33")),
+ BooleanClause.Occur.SHOULD));
+
+ final int[] count = new int[1];
+ s.search(q, new Collector() {
+ private Scorer scorer;
+
+ @Override
+ public void setScorer(Scorer scorer) {
+ // Make sure we got BooleanScorer:
+ this.scorer = scorer;
+ assertEquals("Scorer is implemented by wrong class", BooleanScorer.class.getName() + "$BucketScorer", scorer.getClass().getName());
+ }
+
+ @Override
+ public void collect(int doc) throws IOException {
+ count[0]++;
+ }
+
+ @Override
+ public void setNextReader(AtomicReaderContext context) {
+ }
+
+ @Override
+ public boolean acceptsDocsOutOfOrder() {
+ return true;
+ }
+ });
+
+ assertEquals(1, count[0]);
+
+ s.close();
+ r.close();
+ d.close();
+ }
}
Modified: lucene/dev/branches/solrcloud/lucene/src/test/org/apache/lucene/search/TestCachingSpanFilter.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/solrcloud/lucene/src/test/org/apache/lucene/search/TestCachingSpanFilter.java?rev=1197110&r1=1197109&r2=1197110&view=diff
==============================================================================
--- lucene/dev/branches/solrcloud/lucene/src/test/org/apache/lucene/search/TestCachingSpanFilter.java (original)
+++ lucene/dev/branches/solrcloud/lucene/src/test/org/apache/lucene/search/TestCachingSpanFilter.java Thu Nov 3 13:35:07 2011
@@ -69,33 +69,21 @@ public class TestCachingSpanFilter exten
final SpanFilter startFilter = new SpanQueryFilter(new SpanTermQuery(new Term("id", "1")));
- // ignore deletions
- CachingSpanFilter filter = new CachingSpanFilter(startFilter, CachingWrapperFilter.DeletesMode.IGNORE);
-
- docs = searcher.search(new MatchAllDocsQuery(), filter, 1);
- assertEquals("[query + filter] Should find a hit...", 1, docs.totalHits);
- ConstantScoreQuery constantScore = new ConstantScoreQuery(filter);
- docs = searcher.search(constantScore, 1);
- assertEquals("[just filter] Should find a hit...", 1, docs.totalHits);
-
- // now delete the doc, refresh the reader, and see that
- // it's not there
- _TestUtil.keepFullyDeletedSegments(writer.w);
- writer.deleteDocuments(new Term("id", "1"));
-
- reader = refreshReader(reader);
- searcher.close();
- searcher = newSearcher(reader, false);
+ CachingSpanFilter filter = new CachingSpanFilter(startFilter);
docs = searcher.search(new MatchAllDocsQuery(), filter, 1);
- assertEquals("[query + filter] Should *not* find a hit...", 0, docs.totalHits);
-
+ assertEquals("[query + filter] Should find a hit...", 1, docs.totalHits);
+ int missCount = filter.missCount;
+ assertTrue(missCount > 0);
+ Query constantScore = new ConstantScoreQuery(filter);
docs = searcher.search(constantScore, 1);
assertEquals("[just filter] Should find a hit...", 1, docs.totalHits);
+ assertEquals(missCount, filter.missCount);
-
- // force cache to regenerate:
- filter = new CachingSpanFilter(startFilter, CachingWrapperFilter.DeletesMode.RECACHE);
+ // NOTE: important to hold ref here so GC doesn't clear
+ // the cache entry! Else the assert below may sometimes
+ // fail:
+ IndexReader oldReader = reader;
writer.addDocument(doc);
reader = refreshReader(reader);
@@ -103,27 +91,19 @@ public class TestCachingSpanFilter exten
searcher = newSearcher(reader, false);
docs = searcher.search(new MatchAllDocsQuery(), filter, 1);
- assertEquals("[query + filter] Should find a hit...", 1, docs.totalHits);
+ assertEquals("[query + filter] Should find 2 hits...", 2, docs.totalHits);
+ assertTrue(filter.missCount > missCount);
+ missCount = filter.missCount;
constantScore = new ConstantScoreQuery(filter);
docs = searcher.search(constantScore, 1);
- assertEquals("[just filter] Should find a hit...", 1, docs.totalHits);
+ assertEquals("[just filter] Should find a hit...", 2, docs.totalHits);
+ assertEquals(missCount, filter.missCount);
// NOTE: important to hold ref here so GC doesn't clear
// the cache entry! Else the assert below may sometimes
// fail:
- IndexReader oldReader = reader;
-
- // make sure we get a cache hit when we reopen readers
- // that had no new deletions
- reader = refreshReader(reader);
- assertTrue(reader != oldReader);
- searcher.close();
- searcher = newSearcher(reader, false);
- int missCount = filter.missCount;
- docs = searcher.search(constantScore, 1);
- assertEquals("[just filter] Should find a hit...", 1, docs.totalHits);
- assertEquals(missCount, filter.missCount);
+ IndexReader oldReader2 = reader;
// now delete the doc, refresh the reader, and see that it's not there
writer.deleteDocuments(new Term("id", "1"));
@@ -134,15 +114,18 @@ public class TestCachingSpanFilter exten
docs = searcher.search(new MatchAllDocsQuery(), filter, 1);
assertEquals("[query + filter] Should *not* find a hit...", 0, docs.totalHits);
+ assertEquals(missCount, filter.missCount);
docs = searcher.search(constantScore, 1);
assertEquals("[just filter] Should *not* find a hit...", 0, docs.totalHits);
+ assertEquals(missCount, filter.missCount);
// NOTE: silliness to make sure JRE does not optimize
// away our holding onto oldReader to prevent
// CachingWrapperFilter's WeakHashMap from dropping the
// entry:
assertTrue(oldReader != null);
+ assertTrue(oldReader2 != null);
searcher.close();
writer.close();
@@ -160,4 +143,5 @@ public class TestCachingSpanFilter exten
return oldReader;
}
}
+
}