public List<SlotStatus> resetExpectedState(Predicate<SlotStatus> filter, String expectedSlotsVersion) { // filter the slots List<SlotStatus> filteredSlots = getAllSlotsStatus(filter); // verify the state of the system hasn't changed checkSlotsVersion(expectedSlotsVersion, filteredSlots); return ImmutableList.copyOf(transform(filteredSlots, new Function<SlotStatus, SlotStatus>() { @Override public SlotStatus apply(SlotStatus slotStatus) { if (slotStatus.getState() != SlotLifecycleState.UNKNOWN) { stateManager.setExpectedState(new ExpectedSlotStatus(slotStatus.getId(), slotStatus.getState(), slotStatus.getAssignment())); } else { stateManager.deleteExpectedState(slotStatus.getId()); } return slotStatus; } })); }
throw new IllegalArgumentException("Unexpected state transition " + state); stateManager.setExpectedState(new ExpectedSlotStatus(slotStatus.getId(), expectedState, slotStatus.getAssignment())); return slotStatus;
public List<SlotStatus> install(Predicate<AgentStatus> filter, int limit, Assignment assignment) { Installation installation = InstallationUtils.toInstallation(repository, assignment); List<RemoteAgent> targetAgents = selectAgents(filter, installation); // randomize agents so all processes don't end up on the same node // todo sort agents by number of process already installed on them List<SlotStatus> slots = newArrayList(); for (RemoteAgent agent : targetAgents) { if (slots.size() >= limit) { break; } // install SlotStatus slotStatus = agent.install(installation); stateManager.setExpectedState(new ExpectedSlotStatus(slotStatus.getId(), STOPPED, installation.getAssignment())); slots.add(slotStatus); } return ImmutableList.copyOf(slots); }
@Override public SlotStatus apply(RemoteSlot slot) { SlotStatus slotStatus = slot.assign(installation); stateManager.setExpectedState(new ExpectedSlotStatus(slotStatus.getId(), STOPPED, installation.getAssignment())); return slotStatus; } }));
stateManager.setExpectedState(new ExpectedSlotStatus(slotStatus.getId(), STOPPED, installation.getAssignment())); return slotStatus;
return new ExpectedSlotStatus(UUID.fromString(id), SlotLifecycleState.valueOf(state), null); return new ExpectedSlotStatus(UUID.fromString(id), SlotLifecycleState.valueOf(state), new Assignment(binary, config));
@Override public SlotStatus apply(RemoteSlot slot) { SlotStatus slotStatus; SlotLifecycleState expectedState; switch (state) { case RUNNING: slotStatus = slot.start(); expectedState = RUNNING; break; case RESTARTING: slotStatus = slot.restart(); expectedState = RUNNING; break; case STOPPED: slotStatus = slot.stop(); expectedState = STOPPED; break; default: throw new IllegalArgumentException("Unexpected state transition " + state); } stateManager.setExpectedState(new ExpectedSlotStatus(slotStatus.getId(), expectedState, slotStatus.getAssignment())); return slotStatus; } }));
@Override public SlotStatus apply(SlotStatus slotStatus) { if (slotStatus.getState() != SlotLifecycleState.UNKNOWN) { stateManager.setExpectedState(new ExpectedSlotStatus(slotStatus.getId(), slotStatus.getState(), slotStatus.getAssignment())); } else { stateManager.deleteExpectedState(slotStatus.getId()); } return slotStatus; } }));
stateManager.setExpectedState(new ExpectedSlotStatus(slotStatus.getId(), slotStatus.getState(), slotStatus.getAssignment()));