use of alluxio.grpc.RegisterWorkerPResponse in project alluxio by Alluxio.
the class BlockWorkerRegisterStreamIntegrationTest method masterHangsOnCompleted.
@Test
public void masterHangsOnCompleted() throws Exception {
// Create the stream and control the request/response observers
BlockMasterWorkerServiceStub asyncClient = PowerMockito.mock(BlockMasterWorkerServiceStub.class);
when(asyncClient.withDeadlineAfter(anyLong(), any())).thenReturn(asyncClient);
ManualRegisterStreamObserver requestObserver = new ManualRegisterStreamObserver(MasterMode.HANG_ON_COMPLETED);
when(asyncClient.registerWorkerStream(any())).thenReturn(requestObserver);
RegisterStreamer registerStreamer = new RegisterStreamer(asyncClient, WORKER_ID, mTierAliases, mCapacityMap, mUsedMap, mBlockMap, LOST_STORAGE, EMPTY_CONFIG);
StreamObserver<RegisterWorkerPResponse> responseObserver = getResponseObserver(registerStreamer);
requestObserver.setResponseObserver(responseObserver);
// The master will hang at the completion step which exceeds the deadline between messages
assertThrows(DeadlineExceededException.class, () -> {
registerStreamer.registerWithMaster();
});
}
use of alluxio.grpc.RegisterWorkerPResponse in project alluxio by Alluxio.
the class BlockWorkerRegisterStreamIntegrationTest method registerWorkerErrorAtCompletion.
@Test
public void registerWorkerErrorAtCompletion() throws Exception {
// Create the stream and control the request/response observers
BlockMasterWorkerServiceStub asyncClient = PowerMockito.mock(BlockMasterWorkerServiceStub.class);
when(asyncClient.withDeadlineAfter(anyLong(), any())).thenReturn(asyncClient);
ManualRegisterStreamObserver requestObserver = new ManualRegisterStreamObserver(MasterMode.ON_COMPLETED);
when(asyncClient.registerWorkerStream(any())).thenReturn(requestObserver);
RegisterStreamer registerStreamer = new RegisterStreamer(asyncClient, WORKER_ID, mTierAliases, mCapacityMap, mUsedMap, mBlockMap, LOST_STORAGE, EMPTY_CONFIG);
StreamObserver<RegisterWorkerPResponse> responseObserver = getResponseObserver(registerStreamer);
requestObserver.setResponseObserver(responseObserver);
assertThrows(InternalException.class, () -> {
// An error received from the master side will be InternalException
registerStreamer.registerWithMaster();
});
}
use of alluxio.grpc.RegisterWorkerPResponse in project alluxio by Alluxio.
the class BlockWorkerRegisterStreamIntegrationTest method normalFlow.
@Test
public void normalFlow() throws Exception {
// Create the stream and control the request/response observers
BlockMasterWorkerServiceStub asyncClient = PowerMockito.mock(BlockMasterWorkerServiceStub.class);
when(asyncClient.withDeadlineAfter(anyLong(), any())).thenReturn(asyncClient);
AtomicInteger receivedCount = new AtomicInteger();
AtomicBoolean completed = new AtomicBoolean();
ManualRegisterStreamObserver requestObserver = new ManualRegisterStreamObserver(MasterMode.COMPLETE_AND_REPORT, receivedCount, completed);
when(asyncClient.registerWorkerStream(any())).thenReturn(requestObserver);
RegisterStreamer registerStreamer = new RegisterStreamer(asyncClient, WORKER_ID, mTierAliases, mCapacityMap, mUsedMap, mBlockMap, LOST_STORAGE, EMPTY_CONFIG);
StreamObserver<RegisterWorkerPResponse> responseObserver = getResponseObserver(registerStreamer);
requestObserver.setResponseObserver(responseObserver);
registerStreamer.registerWithMaster();
int expectedBatchCount = (int) Math.ceil((TIER_BLOCK_TOTAL) / (double) BATCH_SIZE);
assertEquals(expectedBatchCount, receivedCount.get());
assertEquals(true, completed.get());
}
use of alluxio.grpc.RegisterWorkerPResponse in project alluxio by Alluxio.
the class BlockMasterWorkerServiceHandler method registerWorker.
@Override
public void registerWorker(RegisterWorkerPRequest request, StreamObserver<RegisterWorkerPResponse> responseObserver) {
if (LOG.isDebugEnabled()) {
LOG.debug("Register worker request is {} bytes, containing {} blocks", request.getSerializedSize(), request.getCurrentBlocksCount());
}
final long workerId = request.getWorkerId();
RegisterWorkerPOptions options = request.getOptions();
RpcUtils.call(LOG, (RpcUtils.RpcCallableThrowsIOException<RegisterWorkerPResponse>) () -> {
// The exception will be propagated to the worker side and the worker should retry.
if (ServerConfiguration.getBoolean(PropertyKey.MASTER_WORKER_REGISTER_LEASE_ENABLED) && !mBlockMaster.hasRegisterLease(workerId)) {
String errorMsg = String.format("Worker %s does not have a lease or the lease " + "has expired. The worker should acquire a new lease and retry to register.", workerId);
LOG.warn(errorMsg);
throw new RegisterLeaseNotFoundException(errorMsg);
}
LOG.debug("Worker {} proceeding to register...", workerId);
final List<String> storageTiers = request.getStorageTiersList();
final Map<String, Long> totalBytesOnTiers = request.getTotalBytesOnTiersMap();
final Map<String, Long> usedBytesOnTiers = request.getUsedBytesOnTiersMap();
final Map<String, StorageList> lostStorageMap = request.getLostStorageMap();
final Map<Block.BlockLocation, List<Long>> currBlocksOnLocationMap = reconstructBlocksOnLocationMap(request.getCurrentBlocksList(), workerId);
// If the register is unsuccessful, the lease will be kept around until the expiry.
// The worker can retry and use the existing lease.
mBlockMaster.workerRegister(workerId, storageTiers, totalBytesOnTiers, usedBytesOnTiers, currBlocksOnLocationMap, lostStorageMap, options);
LOG.info("Worker {} finished registering, releasing its lease.", workerId);
mBlockMaster.releaseRegisterLease(workerId);
return RegisterWorkerPResponse.getDefaultInstance();
}, "registerWorker", true, "request=%s", responseObserver, workerId);
}
use of alluxio.grpc.RegisterWorkerPResponse in project alluxio by Alluxio.
the class BlockWorkerRegisterStreamIntegrationTest method registerWorkerErrorDuringStream.
@Test
public void registerWorkerErrorDuringStream() throws Exception {
// Create the stream and control the request/response observers
BlockMasterWorkerServiceStub asyncClient = PowerMockito.mock(BlockMasterWorkerServiceStub.class);
when(asyncClient.withDeadlineAfter(anyLong(), any())).thenReturn(asyncClient);
ManualRegisterStreamObserver requestObserver = new ManualRegisterStreamObserver(MasterMode.SECOND_REQUEST);
when(asyncClient.registerWorkerStream(any())).thenReturn(requestObserver);
RegisterStreamer registerStreamer = new RegisterStreamer(asyncClient, WORKER_ID, mTierAliases, mCapacityMap, mUsedMap, mBlockMap, LOST_STORAGE, EMPTY_CONFIG);
StreamObserver<RegisterWorkerPResponse> responseObserver = getResponseObserver(registerStreamer);
requestObserver.setResponseObserver(responseObserver);
assertThrows(InternalException.class, () -> {
// An error received from the master side will be InternalException
registerStreamer.registerWithMaster();
});
}
Aggregations