mirror of
https://github.com/apache/lucene.git
synced 2025-03-06 16:29:30 +00:00
LUCENE-6132: add basic infostream message to SortingMergePolicy
git-svn-id: https://svn.apache.org/repos/asf/lucene/dev/trunk@1647650 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
7d4ba636b0
commit
3bde1e7fa5
@ -1573,7 +1573,7 @@ public class IndexWriter implements Closeable, TwoPhaseCommit, Accountable {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/** If non-null, information about merges will be printed to this.
|
/** If enabled, information about merges will be printed to this.
|
||||||
*/
|
*/
|
||||||
final InfoStream infoStream;
|
final InfoStream infoStream;
|
||||||
|
|
||||||
|
@ -855,5 +855,9 @@ public class SortingLeafReader extends FilterLeafReader {
|
|||||||
public Fields getTermVectors(final int docID) throws IOException {
|
public Fields getTermVectors(final int docID) throws IOException {
|
||||||
return in.getTermVectors(docMap.newToOld(docID));
|
return in.getTermVectors(docMap.newToOld(docID));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return "SortingLeafReader(" + in + ")";
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -38,6 +38,7 @@ import org.apache.lucene.index.SlowCompositeReaderWrapper;
|
|||||||
import org.apache.lucene.search.Sort;
|
import org.apache.lucene.search.Sort;
|
||||||
import org.apache.lucene.store.Directory;
|
import org.apache.lucene.store.Directory;
|
||||||
import org.apache.lucene.util.Bits;
|
import org.apache.lucene.util.Bits;
|
||||||
|
import org.apache.lucene.util.InfoStream;
|
||||||
import org.apache.lucene.util.packed.PackedInts;
|
import org.apache.lucene.util.packed.PackedInts;
|
||||||
import org.apache.lucene.util.packed.PackedLongValues;
|
import org.apache.lucene.util.packed.PackedLongValues;
|
||||||
|
|
||||||
@ -67,15 +68,27 @@ public final class SortingMergePolicy extends MergePolicy {
|
|||||||
List<LeafReader> unsortedReaders;
|
List<LeafReader> unsortedReaders;
|
||||||
Sorter.DocMap docMap;
|
Sorter.DocMap docMap;
|
||||||
LeafReader sortedView;
|
LeafReader sortedView;
|
||||||
|
final InfoStream infoStream;
|
||||||
|
|
||||||
SortingOneMerge(List<SegmentCommitInfo> segments) {
|
SortingOneMerge(List<SegmentCommitInfo> segments, InfoStream infoStream) {
|
||||||
super(segments);
|
super(segments);
|
||||||
|
this.infoStream = infoStream;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<LeafReader> getMergeReaders() throws IOException {
|
public List<LeafReader> getMergeReaders() throws IOException {
|
||||||
if (unsortedReaders == null) {
|
if (unsortedReaders == null) {
|
||||||
unsortedReaders = super.getMergeReaders();
|
unsortedReaders = super.getMergeReaders();
|
||||||
|
if (infoStream.isEnabled("SMP")) {
|
||||||
|
infoStream.message("SMP", "sorting " + unsortedReaders);
|
||||||
|
for (LeafReader leaf : unsortedReaders) {
|
||||||
|
String sortDescription = getSortDescription(leaf);
|
||||||
|
if (sortDescription == null) {
|
||||||
|
sortDescription = "not sorted";
|
||||||
|
}
|
||||||
|
infoStream.message("SMP", "seg=" + leaf + " " + sortDescription);
|
||||||
|
}
|
||||||
|
}
|
||||||
// wrap readers, to be optimal for merge;
|
// wrap readers, to be optimal for merge;
|
||||||
List<LeafReader> wrapped = new ArrayList<>(unsortedReaders.size());
|
List<LeafReader> wrapped = new ArrayList<>(unsortedReaders.size());
|
||||||
for (LeafReader leaf : unsortedReaders) {
|
for (LeafReader leaf : unsortedReaders) {
|
||||||
@ -95,7 +108,17 @@ public final class SortingMergePolicy extends MergePolicy {
|
|||||||
sortedView = SortingLeafReader.wrap(atomicView, docMap);
|
sortedView = SortingLeafReader.wrap(atomicView, docMap);
|
||||||
}
|
}
|
||||||
// a null doc map means that the readers are already sorted
|
// a null doc map means that the readers are already sorted
|
||||||
return docMap == null ? unsortedReaders : Collections.singletonList(sortedView);
|
if (docMap == null) {
|
||||||
|
if (infoStream.isEnabled("SMP")) {
|
||||||
|
infoStream.message("SMP", "readers already sorted, omitting sort");
|
||||||
|
}
|
||||||
|
return unsortedReaders;
|
||||||
|
} else {
|
||||||
|
if (infoStream.isEnabled("SMP")) {
|
||||||
|
infoStream.message("SMP", "sorting readers by " + sort);
|
||||||
|
}
|
||||||
|
return Collections.singletonList(sortedView);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -145,10 +168,15 @@ public final class SortingMergePolicy extends MergePolicy {
|
|||||||
}
|
}
|
||||||
|
|
||||||
class SortingMergeSpecification extends MergeSpecification {
|
class SortingMergeSpecification extends MergeSpecification {
|
||||||
|
final InfoStream infoStream;
|
||||||
|
|
||||||
|
SortingMergeSpecification(InfoStream infoStream) {
|
||||||
|
this.infoStream = infoStream;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void add(OneMerge merge) {
|
public void add(OneMerge merge) {
|
||||||
super.add(new SortingOneMerge(merge.segments));
|
super.add(new SortingOneMerge(merge.segments, infoStream));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -160,21 +188,29 @@ public final class SortingMergePolicy extends MergePolicy {
|
|||||||
|
|
||||||
/** Returns {@code true} if the given {@code reader} is sorted by the specified {@code sort}. */
|
/** Returns {@code true} if the given {@code reader} is sorted by the specified {@code sort}. */
|
||||||
public static boolean isSorted(LeafReader reader, Sort sort) {
|
public static boolean isSorted(LeafReader reader, Sort sort) {
|
||||||
if (reader instanceof SegmentReader) {
|
String description = getSortDescription(reader);
|
||||||
final SegmentReader segReader = (SegmentReader) reader;
|
if (description != null && description.equals(sort.toString())) {
|
||||||
final Map<String, String> diagnostics = segReader.getSegmentInfo().info.getDiagnostics();
|
return true;
|
||||||
if (diagnostics != null && sort.toString().equals(diagnostics.get(SORTER_ID_PROP))) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static String getSortDescription(LeafReader reader) {
|
||||||
|
if (reader instanceof SegmentReader) {
|
||||||
|
final SegmentReader segReader = (SegmentReader) reader;
|
||||||
|
final Map<String, String> diagnostics = segReader.getSegmentInfo().info.getDiagnostics();
|
||||||
|
if (diagnostics != null) {
|
||||||
|
return diagnostics.get(SORTER_ID_PROP);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
private MergeSpecification sortedMergeSpecification(MergeSpecification specification) {
|
private MergeSpecification sortedMergeSpecification(MergeSpecification specification, InfoStream infoStream) {
|
||||||
if (specification == null) {
|
if (specification == null) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
MergeSpecification sortingSpec = new SortingMergeSpecification();
|
MergeSpecification sortingSpec = new SortingMergeSpecification(infoStream);
|
||||||
for (OneMerge merge : specification.merges) {
|
for (OneMerge merge : specification.merges) {
|
||||||
sortingSpec.add(merge);
|
sortingSpec.add(merge);
|
||||||
}
|
}
|
||||||
@ -195,20 +231,20 @@ public final class SortingMergePolicy extends MergePolicy {
|
|||||||
@Override
|
@Override
|
||||||
public MergeSpecification findMerges(MergeTrigger mergeTrigger,
|
public MergeSpecification findMerges(MergeTrigger mergeTrigger,
|
||||||
SegmentInfos segmentInfos, IndexWriter writer) throws IOException {
|
SegmentInfos segmentInfos, IndexWriter writer) throws IOException {
|
||||||
return sortedMergeSpecification(in.findMerges(mergeTrigger, segmentInfos, writer));
|
return sortedMergeSpecification(in.findMerges(mergeTrigger, segmentInfos, writer), writer.infoStream);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public MergeSpecification findForcedMerges(SegmentInfos segmentInfos,
|
public MergeSpecification findForcedMerges(SegmentInfos segmentInfos,
|
||||||
int maxSegmentCount, Map<SegmentCommitInfo,Boolean> segmentsToMerge, IndexWriter writer)
|
int maxSegmentCount, Map<SegmentCommitInfo,Boolean> segmentsToMerge, IndexWriter writer)
|
||||||
throws IOException {
|
throws IOException {
|
||||||
return sortedMergeSpecification(in.findForcedMerges(segmentInfos, maxSegmentCount, segmentsToMerge, writer));
|
return sortedMergeSpecification(in.findForcedMerges(segmentInfos, maxSegmentCount, segmentsToMerge, writer), writer.infoStream);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public MergeSpecification findForcedDeletesMerges(SegmentInfos segmentInfos, IndexWriter writer)
|
public MergeSpecification findForcedDeletesMerges(SegmentInfos segmentInfos, IndexWriter writer)
|
||||||
throws IOException {
|
throws IOException {
|
||||||
return sortedMergeSpecification(in.findForcedDeletesMerges(segmentInfos, writer));
|
return sortedMergeSpecification(in.findForcedDeletesMerges(segmentInfos, writer), writer.infoStream);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -221,5 +257,4 @@ public final class SortingMergePolicy extends MergePolicy {
|
|||||||
public String toString() {
|
public String toString() {
|
||||||
return "SortingMergePolicy(" + in + ", sorter=" + sorter + ")";
|
return "SortingMergePolicy(" + in + ", sorter=" + sorter + ")";
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user