LUCENE-10180: Avoid using lambdas in SegmentMerger. (#385)

This commit is contained in:
Adrien Grand 2021-10-19 15:00:20 +02:00 committed by GitHub
parent 8b68bf60c9
commit 1448e4739b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 36 additions and 18 deletions

View File

@ -130,21 +130,27 @@ final class SegmentMerger {
segmentWriteState.segmentSuffix);
if (mergeState.mergeFieldInfos.hasNorms()) {
mergeWithLogging(() -> mergeNorms(segmentWriteState), "norms", numMerged);
mergeWithLogging(this::mergeNorms, segmentWriteState, segmentReadState, "norms", numMerged);
}
mergeWithLogging(() -> mergeTerms(segmentWriteState, segmentReadState), "postings", numMerged);
mergeWithLogging(this::mergeTerms, segmentWriteState, segmentReadState, "postings", numMerged);
if (mergeState.mergeFieldInfos.hasDocValues()) {
mergeWithLogging(() -> mergeDocValues(segmentWriteState), "doc values", numMerged);
mergeWithLogging(
this::mergeDocValues, segmentWriteState, segmentReadState, "doc values", numMerged);
}
if (mergeState.mergeFieldInfos.hasPointValues()) {
mergeWithLogging(() -> mergePoints(segmentWriteState), "points", numMerged);
mergeWithLogging(this::mergePoints, segmentWriteState, segmentReadState, "points", numMerged);
}
if (mergeState.mergeFieldInfos.hasVectorValues()) {
mergeWithLogging(() -> mergeVectorValues(segmentWriteState), "numeric vectors", numMerged);
mergeWithLogging(
this::mergeVectorValues,
segmentWriteState,
segmentReadState,
"numeric vectors",
numMerged);
}
if (mergeState.mergeFieldInfos.hasVectors()) {
@ -153,29 +159,34 @@ final class SegmentMerger {
// write the merged infos
mergeWithLogging(
() ->
codec
.fieldInfosFormat()
.write(directory, mergeState.segmentInfo, "", mergeState.mergeFieldInfos, context),
"field infos",
numMerged);
this::mergeFieldInfos, segmentWriteState, segmentReadState, "field infos", numMerged);
return mergeState;
}
private void mergeDocValues(SegmentWriteState segmentWriteState) throws IOException {
private void mergeFieldInfos(
SegmentWriteState segmentWriteState, SegmentReadState segmentReadState) throws IOException {
codec
.fieldInfosFormat()
.write(directory, mergeState.segmentInfo, "", mergeState.mergeFieldInfos, context);
}
private void mergeDocValues(
SegmentWriteState segmentWriteState, SegmentReadState segmentReadState) throws IOException {
try (DocValuesConsumer consumer = codec.docValuesFormat().fieldsConsumer(segmentWriteState)) {
consumer.merge(mergeState);
}
}
private void mergePoints(SegmentWriteState segmentWriteState) throws IOException {
private void mergePoints(SegmentWriteState segmentWriteState, SegmentReadState segmentReadState)
throws IOException {
try (PointsWriter writer = codec.pointsFormat().fieldsWriter(segmentWriteState)) {
writer.merge(mergeState);
}
}
private void mergeNorms(SegmentWriteState segmentWriteState) throws IOException {
private void mergeNorms(SegmentWriteState segmentWriteState, SegmentReadState segmentReadState)
throws IOException {
try (NormsConsumer consumer = codec.normsFormat().normsConsumer(segmentWriteState)) {
consumer.merge(mergeState);
}
@ -235,7 +246,8 @@ final class SegmentMerger {
}
}
private void mergeVectorValues(SegmentWriteState segmentWriteState) throws IOException {
private void mergeVectorValues(
SegmentWriteState segmentWriteState, SegmentReadState segmentReadState) throws IOException {
try (KnnVectorsWriter writer = codec.knnVectorsFormat().fieldsWriter(segmentWriteState)) {
writer.merge(mergeState);
}
@ -246,7 +258,8 @@ final class SegmentMerger {
}
private interface VoidMerger {
void merge() throws IOException;
void merge(SegmentWriteState segmentWriteState, SegmentReadState segmentReadState)
throws IOException;
}
private int mergeWithLogging(Merger merger, String formatName) throws IOException {
@ -264,13 +277,18 @@ final class SegmentMerger {
return numMerged;
}
private void mergeWithLogging(VoidMerger merger, String formatName, int numMerged)
private void mergeWithLogging(
VoidMerger merger,
SegmentWriteState segmentWriteState,
SegmentReadState segmentReadState,
String formatName,
int numMerged)
throws IOException {
long t0 = 0;
if (mergeState.infoStream.isEnabled("SM")) {
t0 = System.nanoTime();
}
merger.merge();
merger.merge(segmentWriteState, segmentReadState);
if (mergeState.infoStream.isEnabled("SM")) {
long t1 = System.nanoTime();
mergeState.infoStream.message(