private void UpdatePendingMerges(int maxNumSegmentsOptimize, bool optimize)
{
lock (this)
{
System.Diagnostics.Debug.Assert(!optimize || maxNumSegmentsOptimize > 0);
if (stopMerges)
{
return;
}
// Do not start new merges if we've hit OOME
if (hitOOM)
{
return ;
}
MergePolicy.MergeSpecification spec;
if (optimize)
{
spec = mergePolicy.FindMergesForOptimize(segmentInfos, maxNumSegmentsOptimize, segmentsToOptimize);
if (spec != null)
{
int numMerges = spec.merges.Count;
for (int i = 0; i < numMerges; i++)
{
MergePolicy.OneMerge merge = spec.merges[i];
merge.optimize = true;
merge.maxNumSegmentsOptimize = maxNumSegmentsOptimize;
}
}
}
else
{
spec = mergePolicy.FindMerges(segmentInfos);
}
if (spec != null)
{
int numMerges = spec.merges.Count;
for (int i = 0; i < numMerges; i++)
RegisterMerge(spec.merges[i]);
}
}
}