private bool UpdatePendingMerges(MergeTrigger trigger, int maxNumSegments) { lock (this) { Debug.Assert(maxNumSegments == -1 || maxNumSegments > 0); Debug.Assert(trigger != null); if (StopMerges) { return false; } // Do not start new merges if we've hit OOME if (HitOOM) { return false; } bool newMergesFound = false; MergePolicy.MergeSpecification spec; if (maxNumSegments != UNBOUNDED_MAX_MERGE_SEGMENTS) { Debug.Assert(trigger == MergeTrigger.EXPLICIT || trigger == MergeTrigger.MERGE_FINISHED, "Expected EXPLICT or MERGE_FINISHED as trigger even with maxNumSegments set but was: " + trigger.ToString()); spec = mergePolicy.FindForcedMerges(segmentInfos, maxNumSegments, SegmentsToMerge); newMergesFound = spec != null; if (newMergesFound) { int numMerges = spec.Merges.Count; for (int i = 0; i < numMerges; i++) { MergePolicy.OneMerge merge = spec.Merges[i]; merge.MaxNumSegments = maxNumSegments; } } } else { spec = mergePolicy.FindMerges(trigger, segmentInfos); } newMergesFound = spec != null; if (newMergesFound) { int numMerges = spec.Merges.Count; for (int i = 0; i < numMerges; i++) { RegisterMerge(spec.Merges[i]); } } return newMergesFound; } }