@Override public void handlePost(Operation post) { ElasticPlacementZoneConfigurationState state = validateState(post); doCreate(post, state); }
@Override public void handleDelete(Operation delete) { doDelete(delete, getLinkFromUrl(delete, true)); }
@Override public void handleGet(Operation get) { // resolve the link to the requested resource pool String resourcePoolLink = getLinkFromUrl(get, false); if (resourcePoolLink == null || resourcePoolLink.isEmpty()) { // return the configuration state for all elastic placement zones doGetAll(get, UriUtils.hasODataExpandParamValue(get.getUri())); } else { // return the configuration state for the requested resource pool doGet(get, resourcePoolLink); } }
@Override public void handlePatch(Operation patch) { ElasticPlacementZoneConfigurationState state = validateState(patch); doUpdate(patch, state); }
private void doDelete(Operation originalOp, String resourcePoolLink) { Operation queryEpzOp = createEpzQueryOperation(resourcePoolLink, false); queryEpzOp.setCompletion((o, e) -> { if (e != null) { .createDelete(getHost(), resourcePoolLink) .setReferer(getUri()) .setCompletion((op, err) -> { if (err != null) { && !returnedQueryTask.results.documentLinks.isEmpty()) { deleteOps.add(Operation .createDelete(getHost(), returnedQueryTask.results.documentLinks.get(0)) .setReferer(getUri()) .setCompletion((op, err) -> { if (err != null) { logWarning( "Couldn't delete EPZ after deletion of RP '%s' is already " + "completed: %s", opSequence = opSequence.next(deleteOps.get(i)); opSequence.abortOnFirstFailure().sendWith(getHost()); }); queryEpzOp.sendWith(getHost());
.createPost(getHost(), ResourcePoolService.FACTORY_LINK) .setBody(state.resourcePoolState) .setReferer(getUri()); Operation[] createEpzOpHolder = { null }; createEpzOpHolder[0].setBody(state.epzState); } else { triggerDependentUpdates(state.documentSelfLink); originalOp.complete(); .createPost(getHost(), ElasticPlacementZoneService.FACTORY_LINK) .setReferer(getUri()); operations = operations.next(createEpzOpHolder[0]) .setCompletion(false, (ops, exs) -> { triggerDependentUpdates(state.documentSelfLink); originalOp.complete(); }); operations.sendWith(getHost());
URI rpFactoryUri = UriUtils.buildUri(getHost(), ResourcePoolService.FACTORY_LINK, originalOp.getUri().getQuery()); operationsToJoin.add(Operation .createGet(expand ? UriUtils.buildExpandLinksQueryUri(rpFactoryUri) : rpFactoryUri) .setReferer(getUri())); URI epzFactoryUri = UriUtils.buildUri(getHost(), ElasticPlacementZoneService.FACTORY_LINK); operationsToJoin.add(Operation .createGet(UriUtils.buildExpandLinksQueryUri(epzFactoryUri)) .setReferer(getUri())); originalOp.complete(); }) .sendWith(getHost());
private void doGet(Operation originalOp, String resourcePoolLink) { .createGet(getHost(), resourcePoolLink) .setReferer(getUri()); Operation queryEpzOp = createEpzQueryOperation(resourcePoolLink, true); && !returnedQueryTask.results.documents.isEmpty()) { if (returnedQueryTask.results.documents.size() > 1) { logWarning( "%d elastic placement zones found for resource pool '%s'", returnedQueryTask.results.documents.size(), originalOp.complete(); }) .sendWith(getHost());
.createPatch(getHost(), state.resourcePoolState.documentSelfLink) .setBody(state.resourcePoolState) .setReferer(getUri())); .createPost(getHost(), ElasticPlacementZoneService.FACTORY_LINK) .setBody(state.epzState) .setReferer(getUri())); triggerDependentUpdates(originalRpLink); .sendWith(getHost());
private Operation createEpzQueryOperation(String resourcePoolLink, boolean expandContent) { Query epzQuery = Query.Builder.create() .addKindFieldClause(ElasticPlacementZoneState.class) .addFieldClause(ElasticPlacementZoneState.FIELD_NAME_RESOURCE_POOL_LINK, resourcePoolLink) .build(); QueryTask.Builder epzQueryTaskBuilder = QueryTask.Builder.createDirectTask() .setQuery(epzQuery); if (expandContent) { epzQueryTaskBuilder.addOption(QueryOption.EXPAND_CONTENT); } Operation queryEpzOp = Operation .createPost(getHost(), ServiceUriPaths.CORE_QUERY_TASKS) .setBody(epzQueryTaskBuilder.build()) .setReferer(getUri()); return queryEpzOp; }