/** * Drop all of the changingBlobs and pendingChangingBlobs. * @param dynamicState current state. * @return the next state. */ private static DynamicState drainAllChangingBlobs(DynamicState dynamicState) { if (!dynamicState.changingBlobs.isEmpty()) { for (BlobChanging rc : dynamicState.changingBlobs) { rc.latch.countDown(); } dynamicState = dynamicState.withChangingBlobs(Collections.emptySet()); } if (!dynamicState.pendingChangingBlobs.isEmpty()) { dynamicState = dynamicState.withPendingChangingBlobs(Collections.emptySet(), null); } return dynamicState; }
/** * Informs the async localizer for all of blobs that the worker acknowledged the change of blobs. * Worker has stop as of now. * * PRECONDITION: container is null * PRECONDITION: changingBlobs should only be for the given assignment. * @param dynamicState the current state * @return the futures for the current assignment. */ private static DynamicState informChangedBlobs(DynamicState dynamicState, LocalAssignment assignment) { assert dynamicState.container == null; assert dynamicState.changingBlobs.stream().allMatch((cr) -> forSameTopology(cr.assignment, assignment)); Set<Future<Void>> futures = new HashSet<>(dynamicState.changingBlobs.size()); // We need to add the new futures to the existing ones if (forSameTopology(dynamicState.pendingChangingBlobsAssignment, assignment)) { futures.addAll(dynamicState.pendingChangingBlobs); } // Acknowledge all changing blobs as futures for (BlobChanging rc : dynamicState.changingBlobs) { futures.add(rc.latch.countDown()); } LOG.debug("found changing blobs {} moving them to pending...", dynamicState.changingBlobs); return dynamicState.withChangingBlobs(Collections.emptySet()) .withPendingChangingBlobs(futures, assignment); }
return prepareForNewAssignmentNoWorkersRunning(dynamicState.withPendingChangingBlobs(Collections.emptySet(), null), staticState);
.withPendingChangingBlobs(Collections.emptySet(), null), staticState); return dynamicState .withCurrentAssignment(c, dynamicState.pendingChangingBlobsAssignment).withState(MachineState.WAITING_FOR_WORKER_START) .withPendingChangingBlobs(Collections.emptySet(), null); } catch (TimeoutException ex) { return dynamicState;