blob: 018c336ce9a35e722b20de983256d30684d0d746 [file] [log] [blame]
import java.io.*;
import org.apache.lucene.index.*;
import org.apache.lucene.search.*;
import org.apache.lucene.store.*;
public class Test {
private static boolean down = false;
public static void main(String[] args) throws Exception {
System.setProperty("org.apache.lucene.FSDirectory.class", FaultyFSDirectory.class.getName());
File dir = new File("textindex");
IndexReader reader = IndexReader.open(dir);
IndexSearcher searcher = new IndexSearcher(reader);
Hits hits = searcher.search(new MatchAllDocsQuery());
down = true;
for (int i = 0; i < hits.length(); i++) {
try {
hits.doc(i);
} catch (IOException e) {
System.out.println("Bang occurred");
}
}
searcher.close();
reader.close();
}
public static class FaultyFSDirectory extends FSDirectory {
public IndexInput openInput(String name) throws IOException {
return new FaultyIndexInput(super.openInput(name));
}
public IndexInput openInput(String name, int bufferSize) throws IOException {
return new FaultyIndexInput(super.openInput(name, bufferSize));
}
}
private static class FaultyIndexInput extends BufferedIndexInput {
IndexInput delegate;
private FaultyIndexInput(IndexInput delegate) {
this.delegate = delegate;
}
private void simOutage() throws IOException {
if (down && Math.random() < 0.5) {
throw new IOException("Simulated network outage");
}
}
public void readInternal(byte[] b, int offset, int length) throws IOException {
simOutage();
delegate.readBytes(b, offset, length);
}
public void seekInternal(long pos) throws IOException {
simOutage();
delegate.seek(pos);
}
public long length() {
return delegate.length();
}
public void close() throws IOException {
delegate.close();
}
}
}