You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by si...@apache.org on 2010/11/04 17:30:51 UTC
svn commit: r1031066 - in /lucene/dev/trunk/lucene:
contrib/misc/src/java/org/apache/lucene/index/
src/java/org/apache/lucene/index/ src/test/org/apache/lucene/util/
Author: simonw
Date: Thu Nov 4 16:30:50 2010
New Revision: 1031066
URL: http://svn.apache.org/viewvc?rev=1031066&view=rev
Log:
LUCENE-2737: Codec is not consistently passed to internal API
Modified:
lucene/dev/trunk/lucene/contrib/misc/src/java/org/apache/lucene/index/IndexSplitter.java
lucene/dev/trunk/lucene/src/java/org/apache/lucene/index/CheckIndex.java
lucene/dev/trunk/lucene/src/java/org/apache/lucene/index/DirectoryReader.java
lucene/dev/trunk/lucene/src/java/org/apache/lucene/index/IndexFileDeleter.java
lucene/dev/trunk/lucene/src/java/org/apache/lucene/index/IndexReader.java
lucene/dev/trunk/lucene/src/java/org/apache/lucene/index/IndexWriter.java
lucene/dev/trunk/lucene/src/java/org/apache/lucene/index/SegmentInfos.java
lucene/dev/trunk/lucene/src/test/org/apache/lucene/util/_TestUtil.java
Modified: lucene/dev/trunk/lucene/contrib/misc/src/java/org/apache/lucene/index/IndexSplitter.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/contrib/misc/src/java/org/apache/lucene/index/IndexSplitter.java?rev=1031066&r1=1031065&r2=1031066&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/contrib/misc/src/java/org/apache/lucene/index/IndexSplitter.java (original)
+++ lucene/dev/trunk/lucene/contrib/misc/src/java/org/apache/lucene/index/IndexSplitter.java Thu Nov 4 16:30:50 2010
@@ -26,6 +26,8 @@ import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.List;
+import org.apache.lucene.index.codecs.Codec;
+import org.apache.lucene.index.codecs.CodecProvider;
import org.apache.lucene.store.FSDirectory;
/**
@@ -47,6 +49,8 @@ import org.apache.lucene.store.FSDirecto
*/
public class IndexSplitter {
public SegmentInfos infos;
+
+ private final CodecProvider codecs;
FSDirectory fsDir;
@@ -89,10 +93,15 @@ public class IndexSplitter {
}
public IndexSplitter(File dir) throws IOException {
+ this(dir, CodecProvider.getDefault());
+ }
+
+ public IndexSplitter(File dir, CodecProvider codecs) throws IOException {
this.dir = dir;
+ this.codecs = codecs;
fsDir = FSDirectory.open(dir);
- infos = new SegmentInfos();
- infos.read(fsDir);
+ infos = new SegmentInfos(codecs);
+ infos.read(fsDir, codecs);
}
public void listSegments() throws IOException {
@@ -131,7 +140,7 @@ public class IndexSplitter {
public void split(File destDir, String[] segs) throws IOException {
destDir.mkdirs();
FSDirectory destFSDir = FSDirectory.open(destDir);
- SegmentInfos destInfos = new SegmentInfos();
+ SegmentInfos destInfos = new SegmentInfos(codecs);
for (String n : segs) {
SegmentInfo info = getInfo(n);
destInfos.add(info);
Modified: lucene/dev/trunk/lucene/src/java/org/apache/lucene/index/CheckIndex.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/src/java/org/apache/lucene/index/CheckIndex.java?rev=1031066&r1=1031065&r2=1031066&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/src/java/org/apache/lucene/index/CheckIndex.java (original)
+++ lucene/dev/trunk/lucene/src/java/org/apache/lucene/index/CheckIndex.java Thu Nov 4 16:30:50 2010
@@ -304,7 +304,7 @@ public class CheckIndex {
* writer. */
public Status checkIndex(List<String> onlySegments, CodecProvider codecs) throws IOException {
NumberFormat nf = NumberFormat.getInstance();
- SegmentInfos sis = new SegmentInfos();
+ SegmentInfos sis = new SegmentInfos(codecs);
Status result = new Status();
result.dir = dir;
try {
Modified: lucene/dev/trunk/lucene/src/java/org/apache/lucene/index/DirectoryReader.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/src/java/org/apache/lucene/index/DirectoryReader.java?rev=1031066&r1=1031065&r2=1031066&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/src/java/org/apache/lucene/index/DirectoryReader.java (original)
+++ lucene/dev/trunk/lucene/src/java/org/apache/lucene/index/DirectoryReader.java Thu Nov 4 16:30:50 2010
@@ -82,18 +82,14 @@ class DirectoryReader extends IndexReade
static IndexReader open(final Directory directory, final IndexDeletionPolicy deletionPolicy, final IndexCommit commit, final boolean readOnly,
final int termInfosIndexDivisor, CodecProvider codecs) throws CorruptIndexException, IOException {
- final CodecProvider codecs2;
- if (codecs == null) {
- codecs2 = CodecProvider.getDefault();
- } else {
- codecs2 = codecs;
- }
+ final CodecProvider codecProvider = codecs == null ? CodecProvider.getDefault()
+ : codecs;
return (IndexReader) new SegmentInfos.FindSegmentsFile(directory) {
@Override
protected Object doBody(String segmentFileName) throws CorruptIndexException, IOException {
- SegmentInfos infos = new SegmentInfos();
- infos.read(directory, segmentFileName, codecs2);
- return new DirectoryReader(directory, infos, deletionPolicy, readOnly, termInfosIndexDivisor, codecs2);
+ SegmentInfos infos = new SegmentInfos(codecProvider);
+ infos.read(directory, segmentFileName, codecProvider);
+ return new DirectoryReader(directory, infos, deletionPolicy, readOnly, termInfosIndexDivisor, codecProvider);
}
}.run(commit);
}
@@ -491,7 +487,7 @@ class DirectoryReader extends IndexReade
return (IndexReader) new SegmentInfos.FindSegmentsFile(directory) {
@Override
protected Object doBody(String segmentFileName) throws CorruptIndexException, IOException {
- SegmentInfos infos = new SegmentInfos();
+ final SegmentInfos infos = new SegmentInfos(codecs);
infos.read(directory, segmentFileName, codecs);
return doReopen(infos, false, openReadOnly);
}
@@ -500,7 +496,7 @@ class DirectoryReader extends IndexReade
private synchronized DirectoryReader doReopen(SegmentInfos infos, boolean doClone, boolean openReadOnly) throws CorruptIndexException, IOException {
DirectoryReader reader;
- reader = new DirectoryReader(directory, infos, subReaders, starts, normsCache, openReadOnly, doClone, termInfosIndexDivisor, null);
+ reader = new DirectoryReader(directory, infos, subReaders, starts, normsCache, openReadOnly, doClone, termInfosIndexDivisor, codecs);
return reader;
}
@@ -953,7 +949,7 @@ class DirectoryReader extends IndexReade
Collection<IndexCommit> commits = new ArrayList<IndexCommit>();
- SegmentInfos latest = new SegmentInfos();
+ SegmentInfos latest = new SegmentInfos(codecs);
latest.read(dir, codecs);
final long currentGen = latest.getGeneration();
@@ -967,7 +963,7 @@ class DirectoryReader extends IndexReade
!fileName.equals(IndexFileNames.SEGMENTS_GEN) &&
SegmentInfos.generationFromSegmentsFileName(fileName) < currentGen) {
- SegmentInfos sis = new SegmentInfos();
+ SegmentInfos sis = new SegmentInfos(codecs);
try {
// IOException allowed to throw there, in case
// segments_N is corrupt
Modified: lucene/dev/trunk/lucene/src/java/org/apache/lucene/index/IndexFileDeleter.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/src/java/org/apache/lucene/index/IndexFileDeleter.java?rev=1031066&r1=1031065&r2=1031066&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/src/java/org/apache/lucene/index/IndexFileDeleter.java (original)
+++ lucene/dev/trunk/lucene/src/java/org/apache/lucene/index/IndexFileDeleter.java Thu Nov 4 16:30:50 2010
@@ -173,7 +173,7 @@ final class IndexFileDeleter {
if (infoStream != null) {
message("init: load commit \"" + fileName + "\"");
}
- SegmentInfos sis = new SegmentInfos();
+ SegmentInfos sis = new SegmentInfos(codecs);
try {
sis.read(directory, fileName, codecs);
} catch (FileNotFoundException e) {
@@ -222,7 +222,7 @@ final class IndexFileDeleter {
// listing was stale (eg when index accessed via NFS
// client with stale directory listing cache). So we
// try now to explicitly open this commit point:
- SegmentInfos sis = new SegmentInfos();
+ SegmentInfos sis = new SegmentInfos(codecs);
try {
sis.read(directory, currentSegmentsFile, codecs);
} catch (IOException e) {
Modified: lucene/dev/trunk/lucene/src/java/org/apache/lucene/index/IndexReader.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/src/java/org/apache/lucene/index/IndexReader.java?rev=1031066&r1=1031065&r2=1031066&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/src/java/org/apache/lucene/index/IndexReader.java (original)
+++ lucene/dev/trunk/lucene/src/java/org/apache/lucene/index/IndexReader.java Thu Nov 4 16:30:50 2010
@@ -20,6 +20,7 @@ package org.apache.lucene.index;
import org.apache.lucene.document.Document;
import org.apache.lucene.document.FieldSelector;
import org.apache.lucene.search.Similarity;
+import org.apache.lucene.index.codecs.Codec;
import org.apache.lucene.index.codecs.CodecProvider;
import org.apache.lucene.store.*;
import org.apache.lucene.util.ArrayUtil;
@@ -639,7 +640,22 @@ public abstract class IndexReader implem
* @throws IOException if there is a low-level IO error
*/
public static long getCurrentVersion(Directory directory) throws CorruptIndexException, IOException {
- return SegmentInfos.readCurrentVersion(directory, CodecProvider.getDefault());
+ return getCurrentVersion(directory, CodecProvider.getDefault());
+ }
+
+ /**
+ * Reads version number from segments files. The version number is
+ * initialized with a timestamp and then increased by one for each change of
+ * the index.
+ *
+ * @param directory where the index resides.
+ * @param codecs the {@link CodecProvider} holding all {@link Codec}s required to open the index
+ * @return version number.
+ * @throws CorruptIndexException if the index is corrupt
+ * @throws IOException if there is a low-level IO error
+ */
+ public static long getCurrentVersion(Directory directory, CodecProvider codecs) throws CorruptIndexException, IOException {
+ return SegmentInfos.readCurrentVersion(directory, codecs);
}
/**
@@ -657,7 +673,27 @@ public abstract class IndexReader implem
* @see #getCommitUserData()
*/
public static Map<String,String> getCommitUserData(Directory directory) throws CorruptIndexException, IOException {
- return SegmentInfos.readCurrentUserData(directory, CodecProvider.getDefault());
+ return getCommitUserData(directory, CodecProvider.getDefault());
+ }
+
+
+ /**
+ * Reads commitUserData, previously passed to {@link
+ * IndexWriter#commit(Map)}, from current index
+ * segments file. This will return null if {@link
+ * IndexWriter#commit(Map)} has never been called for
+ * this index.
+ *
+ * @param directory where the index resides.
+ * @param codecs the {@link CodecProvider} provider holding all {@link Codec}s required to open the index
+ * @return commit userData.
+ * @throws CorruptIndexException if the index is corrupt
+ * @throws IOException if there is a low-level IO error
+ *
+ * @see #getCommitUserData()
+ */
+ public static Map<String, String> getCommitUserData(Directory directory, CodecProvider codecs) throws CorruptIndexException, IOException {
+ return SegmentInfos.readCurrentUserData(directory, codecs);
}
/**
Modified: lucene/dev/trunk/lucene/src/java/org/apache/lucene/index/IndexWriter.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/src/java/org/apache/lucene/index/IndexWriter.java?rev=1031066&r1=1031065&r2=1031066&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/src/java/org/apache/lucene/index/IndexWriter.java (original)
+++ lucene/dev/trunk/lucene/src/java/org/apache/lucene/index/IndexWriter.java Thu Nov 4 16:30:50 2010
@@ -279,7 +279,7 @@ public class IndexWriter implements Clos
volatile SegmentInfos pendingCommit; // set when a commit is pending (after prepareCommit() & before commit())
volatile long pendingCommitChangeCount;
- private SegmentInfos segmentInfos = new SegmentInfos(); // the segments
+ private final SegmentInfos segmentInfos; // the segments
private DocumentsWriter docWriter;
private IndexFileDeleter deleter;
@@ -1069,7 +1069,7 @@ public class IndexWriter implements Clos
// instead of later when merge, applyDeletes, getReader
// is attempted. I think to do this we should store the
// oldest segment's version in segments_N.
-
+ segmentInfos = new SegmentInfos(codecs);
try {
if (create) {
// Try to read first. This is to allow create
@@ -1098,7 +1098,7 @@ public class IndexWriter implements Clos
// points.
if (commit.getDirectory() != directory)
throw new IllegalArgumentException("IndexCommit's directory doesn't match my directory");
- SegmentInfos oldInfos = new SegmentInfos();
+ SegmentInfos oldInfos = new SegmentInfos(codecs);
oldInfos.read(directory, commit.getSegmentsFileName(), codecs);
segmentInfos.replace(oldInfos);
changeCount++;
@@ -1117,7 +1117,7 @@ public class IndexWriter implements Clos
// KeepOnlyLastCommitDeleter:
deleter = new IndexFileDeleter(directory,
conf.getIndexDeletionPolicy(),
- segmentInfos, infoStream, docWriter, this.codecs);
+ segmentInfos, infoStream, docWriter, codecs);
if (deleter.startingCommitDeleted)
// Deletion policy deleted the "head" commit point.
@@ -2900,8 +2900,8 @@ public class IndexWriter implements Clos
if (infoStream != null) {
message("process directory " + dir);
}
- SegmentInfos sis = new SegmentInfos(); // read infos from dir
- sis.read(dir);
+ SegmentInfos sis = new SegmentInfos(codecs); // read infos from dir
+ sis.read(dir, codecs);
Map<String, String> dsNames = new HashMap<String, String>();
for (SegmentInfo info : sis) {
assert !infos.contains(info): "dup info dir=" + info.dir + " name=" + info.name;
Modified: lucene/dev/trunk/lucene/src/java/org/apache/lucene/index/SegmentInfos.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/src/java/org/apache/lucene/index/SegmentInfos.java?rev=1031066&r1=1031065&r2=1031066&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/src/java/org/apache/lucene/index/SegmentInfos.java (original)
+++ lucene/dev/trunk/lucene/src/java/org/apache/lucene/index/SegmentInfos.java Thu Nov 4 16:30:50 2010
@@ -341,8 +341,8 @@ public final class SegmentInfos extends
// IndexWriter.prepareCommit has been called (but not
// yet commit), then the reader will still see itself as
// current:
- SegmentInfos sis = new SegmentInfos();
- sis.read(directory);
+ SegmentInfos sis = new SegmentInfos(codecs);
+ sis.read(directory, codecs);
return sis.version;
}
@@ -353,7 +353,7 @@ public final class SegmentInfos extends
*/
public static Map<String,String> readCurrentUserData(Directory directory, CodecProvider codecs)
throws CorruptIndexException, IOException {
- SegmentInfos sis = new SegmentInfos();
+ SegmentInfos sis = new SegmentInfos(codecs);
sis.read(directory, codecs);
return sis.getUserData();
}
@@ -694,7 +694,7 @@ public final class SegmentInfos extends
* is last-first.
*/
public SegmentInfos range(int first, int last) {
- SegmentInfos infos = new SegmentInfos();
+ SegmentInfos infos = new SegmentInfos(codecs);
infos.addAll(super.subList(first, last));
return infos;
}
Modified: lucene/dev/trunk/lucene/src/test/org/apache/lucene/util/_TestUtil.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/src/test/org/apache/lucene/util/_TestUtil.java?rev=1031066&r1=1031065&r2=1031066&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/src/test/org/apache/lucene/util/_TestUtil.java (original)
+++ lucene/dev/trunk/lucene/src/test/org/apache/lucene/util/_TestUtil.java Thu Nov 4 16:30:50 2010
@@ -69,11 +69,17 @@ public class _TestUtil {
* issues are hit, a RuntimeException is thrown; else,
* true is returned. */
public static CheckIndex.Status checkIndex(Directory dir) throws IOException {
+ return checkIndex(dir, CodecProvider.getDefault());
+ }
+
+ /** This runs the CheckIndex tool on the index in. If any
+ * issues are hit, a RuntimeException is thrown; else,
+ * true is returned. */
+ public static CheckIndex.Status checkIndex(Directory dir, CodecProvider codecs) throws IOException {
ByteArrayOutputStream bos = new ByteArrayOutputStream(1024);
-
CheckIndex checker = new CheckIndex(dir);
checker.setInfoStream(new PrintStream(bos));
- CheckIndex.Status indexStatus = checker.checkIndex();
+ CheckIndex.Status indexStatus = checker.checkIndex(null, codecs);
if (indexStatus == null || indexStatus.clean == false) {
System.out.println("CheckIndex failed");
System.out.println(bos.toString());