private MergePolicy.OneMerge GetNextExternalMerge()
{
lock (this)
{
if (pendingMerges.Count == 0)
return null;
else
{
var it = pendingMerges.GetEnumerator();
while (it.MoveNext())
{
MergePolicy.OneMerge merge = it.Current;
if (merge.isExternal)
{
// Advance the merge from pending to running
pendingMerges.Remove(merge); // {{Aroush-2.9}} From Mike Garski: this is an O(n) op... is that an issue?
runningMerges.Add(merge);
return merge;
}
}
// All existing merges do not involve external segments
return null;
}
}
}