Search in sources :

Example 6 with RegisterWorkerPResponse

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();
    });
}
Also used : RegisterWorkerPResponse(alluxio.grpc.RegisterWorkerPResponse) BlockMasterWorkerServiceStub(alluxio.grpc.BlockMasterWorkerServiceGrpc.BlockMasterWorkerServiceStub) RegisterStreamer(alluxio.worker.block.RegisterStreamer) PrepareForTest(org.powermock.core.classloader.annotations.PrepareForTest) Test(org.junit.Test)

Example 7 with RegisterWorkerPResponse

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();
    });
}
Also used : RegisterWorkerPResponse(alluxio.grpc.RegisterWorkerPResponse) BlockMasterWorkerServiceStub(alluxio.grpc.BlockMasterWorkerServiceGrpc.BlockMasterWorkerServiceStub) RegisterStreamer(alluxio.worker.block.RegisterStreamer) PrepareForTest(org.powermock.core.classloader.annotations.PrepareForTest) Test(org.junit.Test)

Example 8 with RegisterWorkerPResponse

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());
}
Also used : AtomicBoolean(java.util.concurrent.atomic.AtomicBoolean) AtomicInteger(java.util.concurrent.atomic.AtomicInteger) RegisterWorkerPResponse(alluxio.grpc.RegisterWorkerPResponse) BlockMasterWorkerServiceStub(alluxio.grpc.BlockMasterWorkerServiceGrpc.BlockMasterWorkerServiceStub) RegisterStreamer(alluxio.worker.block.RegisterStreamer) PrepareForTest(org.powermock.core.classloader.annotations.PrepareForTest) Test(org.junit.Test)

Example 9 with RegisterWorkerPResponse

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);
}
Also used : RpcUtils(alluxio.RpcUtils) RegisterWorkerPResponse(alluxio.grpc.RegisterWorkerPResponse) Block(alluxio.proto.meta.Block) List(java.util.List) StorageList(alluxio.grpc.StorageList) RegisterWorkerPOptions(alluxio.grpc.RegisterWorkerPOptions) RegisterLeaseNotFoundException(alluxio.exception.RegisterLeaseNotFoundException) Map(java.util.Map)

Example 10 with RegisterWorkerPResponse

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();
    });
}
Also used : RegisterWorkerPResponse(alluxio.grpc.RegisterWorkerPResponse) BlockMasterWorkerServiceStub(alluxio.grpc.BlockMasterWorkerServiceGrpc.BlockMasterWorkerServiceStub) RegisterStreamer(alluxio.worker.block.RegisterStreamer) PrepareForTest(org.powermock.core.classloader.annotations.PrepareForTest) Test(org.junit.Test)

Aggregations

RegisterWorkerPResponse (alluxio.grpc.RegisterWorkerPResponse)12 Test (org.junit.Test)11 BlockMasterWorkerServiceStub (alluxio.grpc.BlockMasterWorkerServiceGrpc.BlockMasterWorkerServiceStub)7 RegisterStreamer (alluxio.worker.block.RegisterStreamer)7 PrepareForTest (org.powermock.core.classloader.annotations.PrepareForTest)7 RegisterWorkerPRequest (alluxio.grpc.RegisterWorkerPRequest)5 BlockStoreLocation (alluxio.worker.block.BlockStoreLocation)5 BlockIdList (alluxio.grpc.BlockIdList)4 BlockStoreLocationProto (alluxio.grpc.BlockStoreLocationProto)4 LocationBlockIdListEntry (alluxio.grpc.LocationBlockIdListEntry)4 StreamObserver (io.grpc.stub.StreamObserver)4 ConcurrentLinkedDeque (java.util.concurrent.ConcurrentLinkedDeque)3 GetRegisterLeasePRequest (alluxio.grpc.GetRegisterLeasePRequest)2 StorageList (alluxio.grpc.StorageList)2 RegisterLease (alluxio.wire.RegisterLease)2 List (java.util.List)2 RpcUtils (alluxio.RpcUtils)1 RegisterLeaseNotFoundException (alluxio.exception.RegisterLeaseNotFoundException)1 DeadlineExceededException (alluxio.exception.status.DeadlineExceededException)1 InternalException (alluxio.exception.status.InternalException)1