public SlotFilterBuilder addNotStateFilter(String notStateFilter) { Preconditions.checkNotNull(notStateFilter, "notStateFilter is null"); SlotLifecycleState state = SlotLifecycleState.lookup(notStateFilter); Preconditions.checkArgument(state != null, "unknown state %s", notStateFilter); notStateFilters.add(state); return this; }
public SlotStatus toSlotStatus(String instanceId) { Assignment assignment = null; if (binary != null) { assignment = new Assignment(binary, config); } Assignment expectedAssignment = null; if (expectedBinary != null) { assignment = new Assignment(expectedBinary, expectedConfig); } SlotLifecycleState expectedState = null; if (expectedStatus != null) { expectedState = SlotLifecycleState.valueOf(expectedStatus); } return SlotStatus.createSlotStatusWithExpectedState(id, self, externalUri, instanceId, location, SlotLifecycleState.valueOf(status), assignment, installPath, resources, expectedState, expectedAssignment, statusMessage); }
@Override public int hashCode() { int result = id.hashCode(); result = 31 * result + self.hashCode(); result = 31 * result + externalUri.hashCode(); result = 31 * result + instanceId.hashCode(); result = 31 * result + location.hashCode(); result = 31 * result + (assignment != null ? assignment.hashCode() : 0); result = 31 * result + state.hashCode(); result = 31 * result + version.hashCode(); result = 31 * result + (installPath != null ? installPath.hashCode() : 0); result = 31 * result + resources.hashCode(); result = 31 * result + (expectedState != null ? expectedState.hashCode() : 0); result = 31 * result + (expectedAssignment != null ? expectedAssignment.hashCode() : 0); return result; }
@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); } } }
@Test public void testTerminateSlot() throws Exception { SlotStatus slotStatus = agent.install(appleInstallation); Request request = Request.Builder.prepareDelete() .setUri(urlFor("/v1/agent/slot", slotStatus.getId().toString())) .build(); Map<String, Object> response = client.execute(request, createJsonResponseHandler(mapCodec, Status.OK.getStatusCode())); assertNull(agent.getSlot(slotStatus.getId())); Map<String, Object> expected = ImmutableMap.<String, Object>builder() .put("id", slotStatus.getId().toString()) .put("shortId", slotStatus.getId().toString()) .put("self", urlFor(slotStatus).toASCIIString()) .put("externalUri", urlFor(slotStatus).toASCIIString()) .put("location", slotStatus.getLocation()) .put("shortLocation", slotStatus.getLocation()) .put("status", TERMINATED.toString()) .put("version", VersionsUtil.createSlotVersion(slotStatus.getId(), TERMINATED, null)) .put("resources", ImmutableMap.<String, Integer>of()) .build(); assertEquals(response, expected); }
@Override public List<SlotStatusRepresentation> setState(SlotFilter slotFilter, SlotLifecycleState state, String expectedVersion) { URI uri = slotFilter.toUri(uriBuilderFrom(coordinatorUri).replacePath("/v1/slot/lifecycle")); Request.Builder requestBuilder = Request.Builder.preparePut() .setUri(uri) .setBodyGenerator(textBodyGenerator(state.name())); if (expectedVersion != null) { requestBuilder.setHeader(AIRSHIP_SLOTS_VERSION_HEADER, expectedVersion); } List<SlotStatusRepresentation> slots = client.execute(requestBuilder.build(), createJsonResponseHandler(SLOTS_CODEC)); return slots; }
private void assertSlotStatus(SlotStatusRepresentation slot, UUID expectedSlotId, Assignment expectedAssignment, SlotLifecycleState expectedState, AgentStatusRepresentation expectedAgent) { assertEquals(slot.getId(), expectedSlotId); if (expectedState != SlotLifecycleState.TERMINATED) { assertEquals(slot.getBinary(), expectedAssignment.getBinary()); assertEquals(slot.getConfig(), expectedAssignment.getConfig()); assertTrue(slot.getInstallPath().startsWith(tempDir.getAbsolutePath())); } else { assertNull(slot.getBinary()); assertNull(slot.getConfig()); assertNull(slot.getInstallPath()); } assertEquals(slot.getStatus(), expectedState.toString()); assertEquals(slot.getInstanceId(), expectedAgent.getInstanceId()); assertTrue(slot.getLocation().startsWith(expectedAgent.getLocation())); assertTrue(slot.getLocation().endsWith(slot.getShortLocation())); assertTrue(slot.getSelf().toASCIIString().startsWith(expectedAgent.getSelf().toASCIIString())); assertTrue(slot.getExternalUri().toASCIIString().startsWith(expectedAgent.getExternalUri().toASCIIString())); }
public SlotFilterBuilder addStateFilter(String stateFilter) { Preconditions.checkNotNull(stateFilter, "stateFilter is null"); SlotLifecycleState state = SlotLifecycleState.lookup(stateFilter); Preconditions.checkArgument(state != null, "unknown state %s", stateFilter); stateFilters.add(state); return this; }
@Override public List<SlotStatusRepresentation> setState(SlotFilter slotFilter, SlotLifecycleState state, String expectedVersion) { URI uri = slotFilter.toUri(uriBuilderFrom(coordinatorUri).replacePath("/v1/slot/lifecycle")); Request.Builder requestBuilder = Request.Builder.preparePut() .setUri(uri) .setBodyGenerator(textBodyGenerator(state.name())); if (expectedVersion != null) { requestBuilder.setHeader(AIRSHIP_SLOTS_VERSION_HEADER, expectedVersion); } List<SlotStatusRepresentation> slots = client.execute(requestBuilder.build(), createJsonResponseHandler(SLOTS_CODEC)); return slots; }
private void assertSlotStatus(SlotStatusRepresentation slot, UUID expectedSlotId, Assignment expectedAssignment, SlotLifecycleState expectedState, AgentStatusRepresentation expectedAgent) { assertEquals(slot.getId(), expectedSlotId); if (expectedState != SlotLifecycleState.TERMINATED) { assertEquals(slot.getBinary(), expectedAssignment.getBinary()); assertEquals(slot.getConfig(), expectedAssignment.getConfig()); assertTrue(slot.getInstallPath().startsWith(tempDir.getAbsolutePath())); } else { assertNull(slot.getBinary()); assertNull(slot.getConfig()); assertNull(slot.getInstallPath()); } assertEquals(slot.getStatus(), expectedState.toString()); assertEquals(slot.getInstanceId(), expectedAgent.getInstanceId()); assertTrue(slot.getLocation().startsWith(expectedAgent.getLocation())); assertTrue(slot.getLocation().endsWith(slot.getShortLocation())); assertTrue(slot.getSelf().toASCIIString().startsWith(expectedAgent.getSelf().toASCIIString())); assertTrue(slot.getExternalUri().toASCIIString().startsWith(expectedAgent.getExternalUri().toASCIIString())); }
@PUT @Produces(MediaType.APPLICATION_JSON) public Response setState(String newState, @Context UriInfo uriInfo, @HeaderParam(AIRSHIP_SLOTS_VERSION_HEADER) String expectedSlotsVersion) { Preconditions.checkNotNull(newState, "newState must not be null"); SlotLifecycleState state = SlotLifecycleState.lookup(newState); if (state == null || state == UNKNOWN) { return Response.status(Response.Status.BAD_REQUEST).build(); } // build filter List<UUID> uuids = Lists.transform(coordinator.getAllSlotStatus(), SlotStatus.uuidGetter()); Predicate<SlotStatus> slotFilter = SlotFilterBuilder.build(uriInfo, true, uuids); // set slot state List<SlotStatus> results = coordinator.setState(state, slotFilter, expectedSlotsVersion); // build response return Response.ok(transform(results, fromSlotStatus(coordinator.getAllSlotStatus(), repository))) .header(AIRSHIP_SLOTS_VERSION_HEADER, createSlotsVersion(results)) .build(); } }
@Test public void testTerminateSlot() throws Exception { SlotStatus slotStatus = agent.install(appleInstallation); Request request = Request.Builder.prepareDelete() .setUri(urlFor("/v1/agent/slot", slotStatus.getId().toString())) .build(); Map<String, Object> response = client.execute(request, createJsonResponseHandler(mapCodec, Status.OK.getStatusCode())); assertNull(agent.getSlot(slotStatus.getId())); Map<String, Object> expected = ImmutableMap.<String, Object>builder() .put("id", slotStatus.getId().toString()) .put("shortId", slotStatus.getId().toString()) .put("self", urlFor(slotStatus).toASCIIString()) .put("externalUri", urlFor(slotStatus).toASCIIString()) .put("location", slotStatus.getLocation()) .put("shortLocation", slotStatus.getLocation()) .put("status", TERMINATED.toString()) .put("version", VersionsUtil.createSlotVersion(slotStatus.getId(), TERMINATED, null)) .put("resources", ImmutableMap.<String, Integer>of()) .build(); assertEquals(response, expected); }
@Override public String getColorizedValue(Column column) { Object value = getObjectValue(column); if (Column.status == column) { SlotLifecycleState state = SlotLifecycleState.lookup(toString(value)); if (SlotLifecycleState.RUNNING == state) { return colorize(state, Color.GREEN); } else if (SlotLifecycleState.UNKNOWN == state) { return colorize(state, Color.RED); } } else if (Column.statusMessage == column) { return colorize(value, Color.RED); } return toString(value); }
private void assertSlotStatus(SlotStatusRepresentation slot, UUID expectedSlotId, Assignment expectedAssignment, SlotLifecycleState expectedState, AgentStatusRepresentation expectedAgent) { assertEquals(slot.getId(), expectedSlotId); if (expectedState != SlotLifecycleState.TERMINATED) { assertEquals(slot.getBinary(), expectedAssignment.getBinary()); assertEquals(slot.getConfig(), expectedAssignment.getConfig()); assertNotNull(slot.getInstallPath()); } else { assertNull(slot.getBinary()); assertNull(slot.getConfig()); assertNull(slot.getInstallPath()); } assertEquals(slot.getStatus(), expectedState.toString()); assertEquals(slot.getInstanceId(), expectedAgent.getInstanceId()); assertTrue(slot.getLocation().startsWith(expectedAgent.getLocation())); assertTrue(slot.getLocation().endsWith(slot.getShortLocation())); assertTrue(slot.getSelf().toASCIIString().startsWith(expectedAgent.getSelf().toASCIIString())); assertTrue(slot.getExternalUri().toASCIIString().startsWith(expectedAgent.getExternalUri().toASCIIString())); }
@Override public String getColorizedValue(Column column) { Object value = getObjectValue(column); if (Column.status == column) { SlotLifecycleState state = SlotLifecycleState.lookup(toString(value)); if (SlotLifecycleState.RUNNING == state) { return colorize(state, Color.GREEN); } else if (SlotLifecycleState.UNKNOWN == state) { return colorize(state, Color.RED); } } else if (Column.statusMessage == column) { return colorize(value, Color.RED); } return toString(value); }
assertEquals(slots.get(BANANA_ASSIGNMENT_EXACT).size(), 0); execute("start", "-s", SlotLifecycleState.RUNNING.toString()); slots = slotsByAssignment(); assertEquals(slots.get(APPLE_ASSIGNMENT).size(), 2); assertEquals(slots.get(BANANA_ASSIGNMENT_EXACT).size(), 2); execute("start", "-S", SlotLifecycleState.RUNNING.toString()); slots = slotsByAssignment(); assertEquals(slots.get(APPLE_ASSIGNMENT).size(), 0); assertEquals(slots.get(BANANA_ASSIGNMENT_EXACT).size(), 0); execute("start", "-s", SlotLifecycleState.STOPPED.toString()); slots = slotsByAssignment(); assertEquals(slots.get(APPLE_ASSIGNMENT).size(), 0);
assertEquals(slots.get(BANANA_ASSIGNMENT_EXACT).size(), 2); execute("start", "-s", SlotLifecycleState.RUNNING.toString()); slots = slotsByAssignment(); assertEquals(slots.get(APPLE_ASSIGNMENT).size(), 0); assertEquals(slots.get(BANANA_ASSIGNMENT_EXACT).size(), 2); execute("start", "-s", SlotLifecycleState.STOPPED.toString()); slots = slotsByAssignment(); assertEquals(slots.get(APPLE_ASSIGNMENT).size(), 2);
@Test public void testStop() throws Exception { SlotStatus slotStatus = agent.install(appleInstallation); agent.getSlot(slotStatus.getId()).start(); Request request = Request.Builder.preparePut() .setUri(urlFor(slotStatus, "lifecycle")) .setBodyGenerator(createStaticBodyGenerator("stopped", UTF_8)) .build(); Map<String, Object> response = client.execute(request, createJsonResponseHandler(mapCodec, Status.OK.getStatusCode())); Map<String, Object> expected = ImmutableMap.<String, Object>builder() .put("id", slotStatus.getId().toString()) .put("shortId", slotStatus.getId().toString()) .put("binary", appleInstallation.getAssignment().getBinary()) .put("shortBinary", appleInstallation.getAssignment().getBinary()) .put("config", appleInstallation.getAssignment().getConfig()) .put("shortConfig", appleInstallation.getAssignment().getConfig()) .put("self", urlFor(slotStatus).toASCIIString()) .put("externalUri", urlFor(slotStatus).toASCIIString()) .put("location", slotStatus.getLocation()) .put("shortLocation", slotStatus.getLocation()) .put("status", STOPPED.toString()) .put("version", slotStatus.getVersion()) .put("installPath", slotStatus.getInstallPath()) .put("resources", ImmutableMap.<String, Integer>of("memory", 512)) .build(); assertEquals(response, expected); }