LUCENE-5858: trunk->branch

git-svn-id: https://svn.apache.org/repos/asf/lucene/dev/branches/lucene5858@1621957 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Robert Muir 2014-09-02 11:02:42 +00:00
commit def0ff7983
7 changed files with 70 additions and 18 deletions

View File

@ -127,6 +127,10 @@ Bug Fixes
MockDirectoryWrapper to have it simulate a virus checker holding a
file open and preventing deletion (Robert Muir, Mike McCandless)
* LUCENE-5916: Static scope test components should be consistent between
tests (and test iterations). Fix for FaultyIndexInput in particular.
(Dawid Weiss)
Build
* LUCENE-5909: Smoke tester now has better command line parsing and

View File

@ -20,6 +20,7 @@ package org.apache.lucene.index;
import java.io.File;
import java.io.IOException;
import java.util.*;
import java.util.concurrent.atomic.AtomicBoolean;
import org.apache.lucene.analysis.MockAnalyzer;
import org.apache.lucene.document.Document;
@ -58,7 +59,6 @@ public class TestFieldsReader extends LuceneTestCase {
IndexWriter writer = new IndexWriter(dir, conf);
writer.addDocument(testDoc);
writer.close();
FaultyIndexInput.doFail = false;
}
@AfterClass
@ -105,77 +105,97 @@ public class TestFieldsReader extends LuceneTestCase {
}
public static class FaultyFSDirectory extends BaseDirectory {
public class FaultyFSDirectory extends BaseDirectory {
Directory fsDir;
AtomicBoolean doFail = new AtomicBoolean();
public FaultyFSDirectory(File dir) {
fsDir = newFSDirectory(dir);
lockFactory = fsDir.getLockFactory();
}
@Override
public IndexInput openInput(String name, IOContext context) throws IOException {
return new FaultyIndexInput(fsDir.openInput(name, context));
return new FaultyIndexInput(doFail, fsDir.openInput(name, context));
}
@Override
public String[] listAll() throws IOException {
return fsDir.listAll();
}
@Override
public void deleteFile(String name) throws IOException {
fsDir.deleteFile(name);
}
@Override
public long fileLength(String name) throws IOException {
return fsDir.fileLength(name);
}
@Override
public IndexOutput createOutput(String name, IOContext context) throws IOException {
return fsDir.createOutput(name, context);
}
@Override
public void sync(Collection<String> names) throws IOException {
fsDir.sync(names);
}
@Override
public void close() throws IOException {
fsDir.close();
}
public void startFailing() {
doFail.set(true);
}
}
private static class FaultyIndexInput extends BufferedIndexInput {
private class FaultyIndexInput extends BufferedIndexInput {
private final AtomicBoolean doFail;
IndexInput delegate;
static boolean doFail;
int count;
private FaultyIndexInput(IndexInput delegate) {
private FaultyIndexInput(AtomicBoolean doFail, IndexInput delegate) {
super("FaultyIndexInput(" + delegate + ")", BufferedIndexInput.BUFFER_SIZE);
this.delegate = delegate;
this.doFail = doFail;
}
private void simOutage() throws IOException {
if (doFail && count++ % 2 == 1) {
if (doFail.get() && count++ % 2 == 1) {
throw new IOException("Simulated network outage");
}
}
@Override
public void readInternal(byte[] b, int offset, int length) throws IOException {
simOutage();
delegate.seek(getFilePointer());
delegate.readBytes(b, offset, length);
}
@Override
public void seekInternal(long pos) throws IOException {
}
@Override
public long length() {
return delegate.length();
}
@Override
public void close() throws IOException {
delegate.close();
}
@Override
public FaultyIndexInput clone() {
FaultyIndexInput i = new FaultyIndexInput(delegate.clone());
FaultyIndexInput i = new FaultyIndexInput(doFail, delegate.clone());
// seek the clone to our current position
try {
i.seek(getFilePointer());
@ -188,7 +208,7 @@ public class TestFieldsReader extends LuceneTestCase {
@Override
public IndexInput slice(String sliceDescription, long offset, long length) throws IOException {
IndexInput slice = delegate.slice(sliceDescription, offset, length);
return new FaultyIndexInput(slice);
return new FaultyIndexInput(doFail, slice);
}
}
@ -197,7 +217,7 @@ public class TestFieldsReader extends LuceneTestCase {
File indexDir = createTempDir("testfieldswriterexceptions");
try {
Directory dir = new FaultyFSDirectory(indexDir);
FaultyFSDirectory dir = new FaultyFSDirectory(indexDir);
IndexWriterConfig iwc = newIndexWriterConfig(new MockAnalyzer(random()))
.setOpenMode(OpenMode.CREATE);
IndexWriter writer = new IndexWriter(dir, iwc);
@ -207,8 +227,7 @@ public class TestFieldsReader extends LuceneTestCase {
writer.close();
IndexReader reader = DirectoryReader.open(dir);
FaultyIndexInput.doFail = true;
dir.startFailing();
boolean exc = false;

View File

@ -211,7 +211,7 @@ org.mortbay.jetty.version = 6.1.26
/org.mortbay.jetty/jetty = ${org.mortbay.jetty.version}
/org.mortbay.jetty/jetty-util = ${org.mortbay.jetty.version}
/org.noggit/noggit = 0.5
/org.noggit/noggit = 0.6
/org.objenesis/objenesis = 1.2
org.ow2.asm.version = 4.1

View File

@ -108,6 +108,7 @@ Carrot2 3.9.0
Velocity 1.7 and Velocity Tools 2.0
Apache UIMA 2.3.1
Apache ZooKeeper 3.4.6
Noggit 0.6
Detailed Change List
----------------------
@ -154,6 +155,9 @@ Other Changes
* LUCENE-5901: Replaced all occurences of LUCENE_CURRENT with LATEST for luceneMatchVersion.
(Ryan Ernst)
* SOLR-6445: Upgrade Noggit to verion 0.6 to support more flexible JSON input (Noble Paul , Yonik Seeley)
================== 4.10.0 =================
Consult the LUCENE_CHANGES.txt file for additional, low level, changes in this release

View File

@ -281,7 +281,32 @@ public class JsonLoaderTest extends SolrTestCaseJ4 {
BufferingRequestProcessor p = new BufferingRequestProcessor(null);
JsonLoader loader = new JsonLoader();
loader.load(req, rsp, new ContentStreamBase.StringStream(doc), p);
assertEquals( 2, p.addCommands.size() );
doc = "\n" +
"\n" +
"{bool: true,\n" +
" f0: \"v0\",\n" +
" f2: {\n" +
" \t \"boost\": 2.3,\n" +
" \t \"value\": \"test\"\n" +
" \t },\n" +
"array: [ \"aaa\", \"bbb\" ],\n" +
"boosted: {\n" +
" \t \"boost\": 6.7,\n" +
" \t \"value\": [ \"aaa\", \"bbb\" ]\n" +
" \t }\n" +
" }\n" +
"\n" +
"\n" +
" {f1: \"v1\",\n" +
" f1: \"v2\",\n" +
" f2: null\n" +
" }\n";
req = req("json.command","false");
rsp = new SolrQueryResponse();
p = new BufferingRequestProcessor(null);
loader = new JsonLoader();
loader.load(req, rsp, new ContentStreamBase.StringStream(doc), p);
assertEquals( 2, p.addCommands.size() );

View File

@ -1 +0,0 @@
8e6e65624d2e09a30190c6434abe23b7d4e5413c

View File

@ -0,0 +1 @@
fa94a59c44b39ee710f3c9451750119e432326c0