public UUID apply(ExpectedSlotStatus input) { return input.getId(); } };
@Override public void setExpectedState(ExpectedSlotStatus slotStatus) { Preconditions.checkNotNull(slotStatus, "slotStatus is null"); if (isDomainCreated()) { List<ReplaceableAttribute> attributes = newArrayList(); attributes.add(new ReplaceableAttribute("state", slotStatus.getStatus().toString(), true)); if (slotStatus.getAssignment() != null) { attributes.add(new ReplaceableAttribute("binary", slotStatus.getAssignment().getBinary(), true)); attributes.add(new ReplaceableAttribute("config", slotStatus.getAssignment().getConfig(), true)); } try { simpleDb.putAttributes(new PutAttributesRequest().withDomainName(domainName).withItemName(slotStatus.getId().toString()).withAttributes(attributes)); expectedStateStoreUp(); } catch (Exception e) { expectedStateStoreDown(e); } } }
@Override public SlotStatus apply(RemoteAgent agent) { SlotStatus slotStatus = agent.install(installation); stateManager.setExpectedState(new ExpectedSlotStatus(slotStatus.getId(), STOPPED, installation.getAssignment())); return slotStatus; } });
private List<SlotStatus> getAllSlotsStatus(Predicate<SlotStatus> slotFilter, List<RemoteSlot> allSlots) ImmutableMap<UUID, ExpectedSlotStatus> expectedStates = Maps.uniqueIndex(stateManager.getAllExpectedStates(), ExpectedSlotStatus.uuidGetter()); ImmutableMap<UUID, SlotStatus> actualStates = Maps.uniqueIndex(transform(allSlots, getSlotStatus()), SlotStatus.uuidGetter()); if (actualState == null) { if (expectedState == null || expectedState.getStatus() == SlotLifecycleState.TERMINATED) { continue; "/unknown", UNKNOWN, expectedState.getAssignment(), null, ImmutableMap.<String, Integer>of(), expectedState.getStatus(), expectedState.getAssignment(), "Slot is missing; Expected slot to be " + expectedState.getStatus()); fullSlotStatus = actualState.changeExpectedState(expectedState.getStatus(), expectedState.getAssignment()); if (!Objects.equal(actualState.getState(), expectedState.getStatus())) { messages.add("Expected state to be " + expectedState.getStatus()); if (!Objects.equal(actualState.getAssignment(), expectedState.getAssignment())) { Assignment assignment = expectedState.getAssignment(); if (assignment != null) { messages.add("Expected assignment to be " + assignment.getBinary() + " " + assignment.getConfig());
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) { switch (state) { case RUNNING: stateManager.setExpectedState(new ExpectedSlotStatus(slot.getId(), RUNNING, slot.status().getAssignment())); return slot.start(); case RESTARTING: stateManager.setExpectedState(new ExpectedSlotStatus(slot.getId(), RUNNING, slot.status().getAssignment())); return slot.restart(); case STOPPED: stateManager.setExpectedState(new ExpectedSlotStatus(slot.getId(), STOPPED, slot.status().getAssignment())); return slot.stop(); case KILLING: stateManager.setExpectedState(new ExpectedSlotStatus(slot.getId(), KILLING, slot.status().getAssignment())); return slot.kill(); default: throw new IllegalArgumentException("Unexpected state transition " + state); } } });
@Override public void setExpectedState(ExpectedSlotStatus slotStatus) { expectedState.put(slotStatus.getId().toString(), 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; } }));
@Override public void setExpectedState(ExpectedSlotStatus slotStatus) { Preconditions.checkNotNull(slotStatus, "slotStatus is null"); try { Files.write(codec.toJson(slotStatus), new File(dataDir, slotStatus.getId().toString() + ".json"), Charsets.UTF_8); } catch (Exception e) { log.error(e, "Error writing expected slot status"); } } }
stateManager.setExpectedState(new ExpectedSlotStatus(slotStatus.getId(), slotStatus.getState(), slotStatus.getAssignment()));
stateManager.setExpectedState(new ExpectedSlotStatus(slotStatus.getId(), slotStatus.getState(), slotStatus.getAssignment()));
@Override public SlotStatus apply(RemoteSlot slot) { boolean expectRestart = slot.status().getState() == RUNNING; Assignment assignment = newAssignments.get(slot.getId()); Preconditions.checkState(assignment != null, "Error no assignment for slot " + slot.getId()); URI configFile = repository.configToHttpUri(assignment.getConfig()); Installation installation = new Installation( repository.configShortName(assignment.getConfig()), assignment, repository.binaryToHttpUri(assignment.getBinary()), configFile, ImmutableMap.<String, Integer>of()); stateManager.setExpectedState(new ExpectedSlotStatus(slot.getId(), expectRestart ? RUNNING : STOPPED, installation.getAssignment())); SlotStatus slotStatus = slot.assign(installation); return slotStatus; } });