use of alluxio.wire.WorkerNetAddress in project alluxio by Alluxio.
the class RoundRobinPolicy method getWorkerForNextBlock.
/**
* The policy uses the first fetch of worker info list as the base, and visits each of them in a
* round-robin manner in the subsequent calls. The policy doesn't assume the list of worker info
* in the subsequent calls has the same order from the first, and it will skip the workers that
* are no longer active.
*
* @param workerInfoList the info of the active workers
* @param blockSizeBytes the size of the block in bytes
* @return the address of the worker to write to
*/
@Override
public WorkerNetAddress getWorkerForNextBlock(Iterable<BlockWorkerInfo> workerInfoList, long blockSizeBytes) {
if (!mInitialized) {
mWorkerInfoList = Lists.newArrayList(workerInfoList);
Collections.shuffle(mWorkerInfoList);
mIndex = 0;
mInitialized = true;
}
// at most try all the workers
for (int i = 0; i < mWorkerInfoList.size(); i++) {
WorkerNetAddress candidate = mWorkerInfoList.get(mIndex).getNetAddress();
BlockWorkerInfo workerInfo = findBlockWorkerInfo(workerInfoList, candidate);
mIndex = (mIndex + 1) % mWorkerInfoList.size();
if (workerInfo != null && workerInfo.getCapacityBytes() >= blockSizeBytes) {
return candidate;
}
}
return null;
}
use of alluxio.wire.WorkerNetAddress in project alluxio by Alluxio.
the class DeterministicHashPolicyTest method before.
@Before
public void before() {
mWorkerInfos.clear();
mWorkerInfos.add(new BlockWorkerInfo(new WorkerNetAddress().setHost("worker1").setRpcPort(PORT).setDataPort(PORT).setWebPort(PORT), Constants.GB, 0));
mWorkerInfos.add(new BlockWorkerInfo(new WorkerNetAddress().setHost("worker2").setRpcPort(PORT).setDataPort(PORT).setWebPort(PORT), 2 * (long) Constants.GB, 0));
mWorkerInfos.add(new BlockWorkerInfo(new WorkerNetAddress().setHost("worker3").setRpcPort(PORT).setDataPort(PORT).setWebPort(PORT), 3 * (long) Constants.GB, 0));
mWorkerInfos.add(new BlockWorkerInfo(new WorkerNetAddress().setHost("worker4").setRpcPort(PORT).setDataPort(PORT).setWebPort(PORT), 3 * (long) Constants.GB, 0));
}
use of alluxio.wire.WorkerNetAddress in project alluxio by Alluxio.
the class LocalFirstAvoidEvictionPolicy method getWorkerForNextBlock.
@Override
public WorkerNetAddress getWorkerForNextBlock(Iterable<BlockWorkerInfo> workerInfoList, long blockSizeBytes) {
// try the local host first
WorkerNetAddress localWorkerNetAddress = null;
for (BlockWorkerInfo workerInfo : workerInfoList) {
if (workerInfo.getNetAddress().getHost().equals(mLocalHostName)) {
localWorkerNetAddress = workerInfo.getNetAddress();
if (getAvailableBytes(workerInfo) >= blockSizeBytes) {
return localWorkerNetAddress;
}
}
}
// otherwise randomly pick a worker that has enough availability
List<BlockWorkerInfo> shuffledWorkers = Lists.newArrayList(workerInfoList);
Collections.shuffle(shuffledWorkers);
for (BlockWorkerInfo workerInfo : shuffledWorkers) {
if (getAvailableBytes(workerInfo) >= blockSizeBytes) {
return workerInfo.getNetAddress();
}
}
if (localWorkerNetAddress == null && shuffledWorkers.size() > 0) {
return shuffledWorkers.get(0).getNetAddress();
}
return localWorkerNetAddress;
}
use of alluxio.wire.WorkerNetAddress in project alluxio by Alluxio.
the class RoundRobinPolicyTest method getWorker.
/**
* Tests that the correct workers are chosen when round robin is used.
*/
@Test
public void getWorker() {
List<BlockWorkerInfo> workerInfoList = new ArrayList<>();
workerInfoList.add(new BlockWorkerInfo(new WorkerNetAddress().setHost("worker1").setRpcPort(PORT).setDataPort(PORT).setWebPort(PORT), Constants.GB, 0));
workerInfoList.add(new BlockWorkerInfo(new WorkerNetAddress().setHost("worker2").setRpcPort(PORT).setDataPort(PORT).setWebPort(PORT), 2 * (long) Constants.GB, 0));
workerInfoList.add(new BlockWorkerInfo(new WorkerNetAddress().setHost("worker3").setRpcPort(PORT).setDataPort(PORT).setWebPort(PORT), 3 * (long) Constants.GB, 0));
RoundRobinPolicy policy = new RoundRobinPolicy();
Assert.assertNotEquals(policy.getWorkerForNextBlock(workerInfoList, 2 * (long) Constants.GB).getHost(), policy.getWorkerForNextBlock(workerInfoList, 2 * (long) Constants.GB).getHost());
}
use of alluxio.wire.WorkerNetAddress in project alluxio by Alluxio.
the class SpecificHostPolicyTest method noMatchingHost.
/**
* Tests that no worker is chosen when the worker specified in the policy is not part of the
* worker list.
*/
@Test
public void noMatchingHost() {
SpecificHostPolicy policy = new SpecificHostPolicy("worker3");
List<BlockWorkerInfo> workerInfoList = new ArrayList<>();
workerInfoList.add(new BlockWorkerInfo(new WorkerNetAddress().setHost("worker1").setRpcPort(PORT).setDataPort(PORT).setWebPort(PORT), Constants.GB, 0));
workerInfoList.add(new BlockWorkerInfo(new WorkerNetAddress().setHost("worker2").setRpcPort(PORT).setDataPort(PORT).setWebPort(PORT), Constants.GB, 0));
Assert.assertNull(policy.getWorkerForNextBlock(workerInfoList, Constants.MB));
}
Aggregations