RandomNodeSelection.java
/*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.facebook.presto.execution.scheduler.nodeSelection;
import com.facebook.presto.execution.scheduler.ResettableRandomizedIterator;
import com.facebook.presto.metadata.InternalNode;
import com.facebook.presto.metadata.Split;
import java.util.List;
import static com.facebook.presto.execution.scheduler.NodeScheduler.selectNodes;
import static java.util.Objects.requireNonNull;
public class RandomNodeSelection
implements NodeSelection
{
private final int minCandidates;
private final ResettableRandomizedIterator<InternalNode> randomCandidates;
public RandomNodeSelection(
List<InternalNode> eligibleNodes,
int minCandidates)
{
requireNonNull(eligibleNodes, "eligibleNodes is null");
this.randomCandidates = new ResettableRandomizedIterator<>(eligibleNodes);
this.minCandidates = minCandidates;
}
@Override
public List<InternalNode> pickNodes(Split split)
{
randomCandidates.reset();
return selectNodes(minCandidates, randomCandidates);
}
}