Index: lucene/src/test/org/apache/lucene/index/TestIndexWriter.java =================================================================== --- lucene/src/test/org/apache/lucene/index/TestIndexWriter.java (revision 1100970) +++ lucene/src/test/org/apache/lucene/index/TestIndexWriter.java (working copy) @@ -18,7 +18,6 @@ */ import java.io.ByteArrayOutputStream; -import java.io.File; import java.io.IOException; import java.io.PrintStream; import java.io.Reader; @@ -1130,10 +1129,12 @@ while(true) { MergePolicy.OneMerge merge = writer.getNextMerge(); - if (merge == null) + if (merge == null) { break; - for(int i=0;i best = null; boolean bestTooLarge = false; long bestMergeBytes = 0; @@ -341,7 +343,7 @@ long totAfterMergeBytes = 0; - final SegmentInfos candidate = new SegmentInfos(); + final List candidate = new ArrayList(); boolean hitTooLarge = false; for(int idx = startIdx;idx candidate, boolean hitTooLarge, long mergingBytes) throws IOException { long totBeforeMergeBytes = 0; long totAfterMergeBytes = 0; long totAfterMergeBytesFloored = 0; @@ -420,7 +422,7 @@ // over time: skew = 1.0/maxMergeAtOnce; } else { - skew = ((double) floorSize(size(candidate.info(0))))/totAfterMergeBytesFloored; + skew = ((double) floorSize(size(candidate.get(0))))/totAfterMergeBytesFloored; } // Strongly favor merges with less skew (smaller Index: lucene/src/java/org/apache/lucene/index/MergeDocIDRemapper.java =================================================================== --- lucene/src/java/org/apache/lucene/index/MergeDocIDRemapper.java (revision 1100970) +++ lucene/src/java/org/apache/lucene/index/MergeDocIDRemapper.java (working copy) @@ -32,7 +32,7 @@ public MergeDocIDRemapper(SegmentInfos infos, int[][] docMaps, int[] delCounts, MergePolicy.OneMerge merge, int mergedDocCount) { this.docMaps = docMaps; - SegmentInfo firstSegment = merge.segments.info(0); + SegmentInfo firstSegment = merge.segments.get(0); int i = 0; while(true) { SegmentInfo info = infos.info(i); @@ -45,7 +45,7 @@ int numDocs = 0; for(int j=0;j 0; // Make sure it all adds up: - assert docShift == maxDocID - (newStarts[docMaps.length-1] + merge.segments.info(docMaps.length-1).docCount - delCounts[docMaps.length-1]); + assert docShift == maxDocID - (newStarts[docMaps.length-1] + merge.segments.get(docMaps.length-1).docCount - delCounts[docMaps.length-1]); } public int remap(int oldDocID) { Index: lucene/src/java/org/apache/lucene/index/BufferedDeletesStream.java =================================================================== --- lucene/src/java/org/apache/lucene/index/BufferedDeletesStream.java (revision 1100970) +++ lucene/src/java/org/apache/lucene/index/BufferedDeletesStream.java (working copy) @@ -132,9 +132,9 @@ public final long gen; // If non-null, contains segments that are 100% deleted - public final SegmentInfos allDeleted; + public final List allDeleted; - ApplyDeletesResult(boolean anyDeletes, long gen, SegmentInfos allDeleted) { + ApplyDeletesResult(boolean anyDeletes, long gen, List allDeleted) { this.anyDeletes = anyDeletes; this.gen = gen; this.allDeleted = allDeleted; @@ -164,7 +164,7 @@ /** Resolves the buffered deleted Term/Query/docIDs, into * actual deleted docIDs in the deletedDocs BitVector for * each SegmentReader. */ - public synchronized ApplyDeletesResult applyDeletes(IndexWriter.ReaderPool readerPool, SegmentInfos infos) throws IOException { + public synchronized ApplyDeletesResult applyDeletes(IndexWriter.ReaderPool readerPool, List infos) throws IOException { final long t0 = System.currentTimeMillis(); if (infos.size() == 0) { Index: lucene/src/java/org/apache/lucene/index/MergePolicy.java =================================================================== --- lucene/src/java/org/apache/lucene/index/MergePolicy.java (revision 1100970) +++ lucene/src/java/org/apache/lucene/index/MergePolicy.java (working copy) @@ -75,15 +75,21 @@ long estimatedMergeBytes; // used by IndexWriter List readers; // used by IndexWriter List readerClones; // used by IndexWriter - public final SegmentInfos segments; + public final List segments; + public final int totalDocCount; boolean aborted; Throwable error; boolean paused; - public OneMerge(SegmentInfos segments) { + public OneMerge(List segments) { if (0 == segments.size()) throw new RuntimeException("segments must include at least one segment"); this.segments = segments; + int count = 0; + for(SegmentInfo info : segments) { + count += info.docCount; + } + totalDocCount = count; } /** Record that an exception occurred while executing @@ -147,7 +153,7 @@ final int numSegments = segments.size(); for(int i=0;i 0) b.append(' '); - b.append(segments.info(i).toString(dir, 0)); + b.append(segments.get(i).toString(dir, 0)); } if (info != null) b.append(" into ").append(info.name); Index: lucene/src/java/org/apache/lucene/index/LogMergePolicy.java =================================================================== --- lucene/src/java/org/apache/lucene/index/LogMergePolicy.java (revision 1100970) +++ lucene/src/java/org/apache/lucene/index/LogMergePolicy.java (working copy) @@ -20,7 +20,6 @@ import java.io.IOException; import java.util.ArrayList; import java.util.Collection; -import java.util.Comparator; import java.util.List; import java.util.Set; @@ -595,7 +594,7 @@ } else if (!anyTooLarge) { if (spec == null) spec = new MergeSpecification(); - final SegmentInfos mergeInfos = new SegmentInfos(); + final List mergeInfos = new ArrayList(); for(int i=start;i readerMap = new HashMap(); /** Forcefully clear changes for the specified segments. This is called on successful merge. */ - synchronized void clear(SegmentInfos infos) throws IOException { + synchronized void clear(List infos) throws IOException { if (infos == null) { for (Map.Entry ent: readerMap.entrySet()) { ent.getValue().hasChanges = false; @@ -511,7 +511,7 @@ return false; } - public synchronized void drop(SegmentInfos infos) throws IOException { + public synchronized void drop(List infos) throws IOException { for(SegmentInfo info : infos) { drop(info); } @@ -2729,7 +2729,7 @@ assert testPoint("startCommitMergeDeletes"); - final SegmentInfos sourceSegments = merge.segments; + final List sourceSegments = merge.segments; if (infoStream != null) message("commitMergeDeletes " + merge.segString(directory)); @@ -2741,7 +2741,7 @@ long minGen = Long.MAX_VALUE; for(int i=0; i < sourceSegments.size(); i++) { - SegmentInfo info = sourceSegments.info(i); + SegmentInfo info = sourceSegments.get(i); minGen = Math.min(info.getBufferedDeletesGen(), minGen); int docCount = info.docCount; final SegmentReader previousReader = merge.readerClones.get(i); @@ -3184,7 +3184,7 @@ // It's possible we are called twice, eg if there was an // exception inside mergeInit if (merge.registerDone) { - final SegmentInfos sourceSegments = merge.segments; + final List sourceSegments = merge.segments; for(SegmentInfo info : sourceSegments) { mergingSegments.remove(info); } @@ -3255,7 +3255,7 @@ int mergedDocCount = 0; - SegmentInfos sourceSegments = merge.segments; + List sourceSegments = merge.segments; SegmentMerger merger = new SegmentMerger(directory, config.getTermIndexInterval(), mergedName, merge, codecs, payloadProcessorProvider, @@ -3276,7 +3276,7 @@ int segUpto = 0; while(segUpto < sourceSegments.size()) { - final SegmentInfo info = sourceSegments.info(segUpto); + final SegmentInfo info = sourceSegments.get(segUpto); // Hold onto the "live" reader; we will use this to // commit merged deletes @@ -3470,14 +3470,14 @@ } /** @lucene.internal */ - public synchronized String segString(SegmentInfos infos) throws IOException { + public synchronized String segString(List infos) throws IOException { StringBuilder buffer = new StringBuilder(); final int count = infos.size(); for(int i = 0; i < count; i++) { if (i > 0) { buffer.append(' '); } - buffer.append(segString(infos.info(i))); + buffer.append(segString(infos.get(i))); } return buffer.toString();