You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by mi...@apache.org on 2010/12/18 17:00:15 UTC
svn commit: r1050654 - in /lucene/dev/branches/branch_3x/lucene/src:
java/org/apache/lucene/index/ test/org/apache/lucene/index/
Author: mikemccand
Date: Sat Dec 18 16:00:14 2010
New Revision: 1050654
URL: http://svn.apache.org/viewvc?rev=1050654&view=rev
Log:
LUCENE-2811: fix bug in IndexWriter.addIndexes(Directory[]) caused by SI.hasVector
Modified:
lucene/dev/branches/branch_3x/lucene/src/java/org/apache/lucene/index/IndexWriter.java
lucene/dev/branches/branch_3x/lucene/src/java/org/apache/lucene/index/SegmentInfo.java
lucene/dev/branches/branch_3x/lucene/src/test/org/apache/lucene/index/TestIndexWriterMerging.java
lucene/dev/branches/branch_3x/lucene/src/test/org/apache/lucene/index/TestIndexWriterOnDiskFull.java
Modified: lucene/dev/branches/branch_3x/lucene/src/java/org/apache/lucene/index/IndexWriter.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_3x/lucene/src/java/org/apache/lucene/index/IndexWriter.java?rev=1050654&r1=1050653&r2=1050654&view=diff
==============================================================================
--- lucene/dev/branches/branch_3x/lucene/src/java/org/apache/lucene/index/IndexWriter.java (original)
+++ lucene/dev/branches/branch_3x/lucene/src/java/org/apache/lucene/index/IndexWriter.java Sat Dec 18 16:00:14 2010
@@ -3006,7 +3006,8 @@ public class IndexWriter implements Clos
}
SegmentInfos sis = new SegmentInfos(); // read infos from dir
sis.read(dir);
- Map<String, String> dsNames = new HashMap<String, String>();
+ final Set<String> dsFilesCopied = new HashSet<String>();
+ final Map<String, String> dsNames = new HashMap<String, String>();
for (SegmentInfo info : sis) {
assert !infos.contains(info): "dup info dir=" + info.dir + " name=" + info.name;
@@ -3015,7 +3016,7 @@ public class IndexWriter implements Clos
String dsName = info.getDocStoreSegment();
if (infoStream != null) {
- message("addIndexes: process segment origName=" + info.name + " newName=" + newSegName + " dsName=" + dsName);
+ message("addIndexes: process segment origName=" + info.name + " newName=" + newSegName + " dsName=" + dsName + " info=" + info);
}
// Determine if the doc store of this segment needs to be copied. It's
@@ -3025,22 +3026,32 @@ public class IndexWriter implements Clos
// NOTE: pre-3x segments include a null DSName if they don't share doc
// store. So the following code ensures we don't accidentally insert
// 'null' to the map.
- String newDsName = newSegName;
- boolean docStoreCopied = false;
- if (dsNames.containsKey(dsName)) {
- newDsName = dsNames.get(dsName);
- docStoreCopied = true;
- } else if (dsName != null) {
- dsNames.put(dsName, newSegName);
- docStoreCopied = false;
+ final String newDsName;
+ if (dsName != null) {
+ if (dsNames.containsKey(dsName)) {
+ newDsName = dsNames.get(dsName);
+ } else {
+ dsNames.put(dsName, newSegName);
+ newDsName = newSegName;
+ }
+ } else {
+ newDsName = newSegName;
}
// Copy the segment files
- for (String file : info.files()) {
- if (docStoreCopied && IndexFileNames.isDocStoreFile(file)) {
- continue;
- }
- dir.copy(directory, file, newSegName + IndexFileNames.stripSegmentName(file));
+ for (String file: info.files()) {
+ final String newFileName;
+ if (IndexFileNames.isDocStoreFile(file)) {
+ newFileName = newDsName + IndexFileNames.stripSegmentName(file);
+ if (dsFilesCopied.contains(newFileName)) {
+ continue;
+ }
+ dsFilesCopied.add(newFileName);
+ } else {
+ newFileName = newSegName + IndexFileNames.stripSegmentName(file);
+ }
+ assert !directory.fileExists(newFileName): "file \"" + newFileName + "\" already exists";
+ dir.copy(directory, file, newFileName);
}
// Update SI appropriately
Modified: lucene/dev/branches/branch_3x/lucene/src/java/org/apache/lucene/index/SegmentInfo.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_3x/lucene/src/java/org/apache/lucene/index/SegmentInfo.java?rev=1050654&r1=1050653&r2=1050654&view=diff
==============================================================================
--- lucene/dev/branches/branch_3x/lucene/src/java/org/apache/lucene/index/SegmentInfo.java (original)
+++ lucene/dev/branches/branch_3x/lucene/src/java/org/apache/lucene/index/SegmentInfo.java Sat Dec 18 16:00:14 2010
@@ -747,6 +747,9 @@ public final class SegmentInfo {
if (this.dir != dir) {
s.append('x');
}
+ if (hasVectors) {
+ s.append('v');
+ }
s.append(docCount);
int delCount;
Modified: lucene/dev/branches/branch_3x/lucene/src/test/org/apache/lucene/index/TestIndexWriterMerging.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_3x/lucene/src/test/org/apache/lucene/index/TestIndexWriterMerging.java?rev=1050654&r1=1050653&r2=1050654&view=diff
==============================================================================
--- lucene/dev/branches/branch_3x/lucene/src/test/org/apache/lucene/index/TestIndexWriterMerging.java (original)
+++ lucene/dev/branches/branch_3x/lucene/src/test/org/apache/lucene/index/TestIndexWriterMerging.java Sat Dec 18 16:00:14 2010
@@ -57,7 +57,7 @@ public class TestIndexWriterMerging exte
IndexWriter writer = new IndexWriter(merged, newIndexWriterConfig(TEST_VERSION_CURRENT, new StandardAnalyzer(TEST_VERSION_CURRENT)));
((LogMergePolicy) writer.getConfig().getMergePolicy()).setMergeFactor(2);
-
+ writer.setInfoStream(VERBOSE ? System.out : null);
writer.addIndexes(new Directory[]{indexA, indexB});
writer.optimize();
writer.close();
Modified: lucene/dev/branches/branch_3x/lucene/src/test/org/apache/lucene/index/TestIndexWriterOnDiskFull.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_3x/lucene/src/test/org/apache/lucene/index/TestIndexWriterOnDiskFull.java?rev=1050654&r1=1050653&r2=1050654&view=diff
==============================================================================
--- lucene/dev/branches/branch_3x/lucene/src/test/org/apache/lucene/index/TestIndexWriterOnDiskFull.java (original)
+++ lucene/dev/branches/branch_3x/lucene/src/test/org/apache/lucene/index/TestIndexWriterOnDiskFull.java Sat Dec 18 16:00:14 2010
@@ -209,7 +209,7 @@ public class TestIndexWriterOnDiskFull e
System.out.println("TEST: iter=" + iter);
// Start with 100 bytes more than we are currently using:
- long diskFree = diskUsage+100;
+ long diskFree = diskUsage+_TestUtil.nextInt(random, 50, 200);
int method = iter;
@@ -226,12 +226,16 @@ public class TestIndexWriterOnDiskFull e
}
while(!done) {
+ if (VERBOSE) {
+ System.out.println("TEST: cycle...");
+ }
// Make a new dir that will enforce disk usage:
MockDirectoryWrapper dir = new MockDirectoryWrapper(random, new RAMDirectory(startDir));
writer = new IndexWriter(dir, newIndexWriterConfig( TEST_VERSION_CURRENT, new MockAnalyzer()).setOpenMode(OpenMode.APPEND));
IOException err = null;
-
+ writer.setInfoStream(VERBOSE ? System.out : null);
+
MergeScheduler ms = writer.getConfig().getMergeScheduler();
for(int x=0;x<2;x++) {
if (ms instanceof ConcurrentMergeScheduler)