private void selectResourceNamePrefix(ResourceNamePrefixTaskState state, Iterator<String> iterator, boolean globalSearch) { if (!iterator.hasNext()) { if (state.tenantLinks != null && !state.tenantLinks.isEmpty() && !globalSearch) { // search for global placements (without group) queryResourceNamePrefixes(state, true); } else { failTask("No available resource name prefixes", null); } return; } String resourceNamePrefixLink = iterator.next(); requestResourceNamePrefix(state, resourceNamePrefixLink, iterator, globalSearch); }
namePrefixRequest.resourceCount = state.resourceCount; sendRequest(Operation .createPatch(this, resourceNamePrefixLink) .setBody(namePrefixRequest) .setCompletion((o, e) -> { if (e != null) { logWarning("Failure requesting resource name prefixes: %s. Retrying with" + " the next one...", e.getMessage()); selectResourceNamePrefix(state, iterator, globalSearch); return; prefix)); } catch (IllegalFormatException fe) { failTask("Failure formatting baseResourceNameFormat", fe); return; complete(DefaultSubStage.COMPLETED, s -> { s.resourceNames = resourceNames; });
private void queryResourceNamePrefixes(ResourceNamePrefixTaskState state, boolean globalSearch) { // match on group property: QueryTask q = QueryUtil.buildQuery(ResourceNamePrefixState.class, true); q.tenantLinks = state.tenantLinks; List<String> documentLinks = new ArrayList<>(); new ServiceDocumentQuery<>(getHost(), ResourceNamePrefixState.class) .query(q, (r) -> { if (r.hasException()) { failTask("Cannot retrieve prefixes", r.getException()); } else if (r.hasResult()) { documentLinks.add(r.getDocumentSelfLink()); } else { selectResourceNamePrefix(state, documentLinks.iterator(), globalSearch); } }); }
@Override protected void handleStartedStagePatch(ResourceNamePrefixTaskState state) { switch (state.taskSubStage) { case CREATED: queryResourceNamePrefixes(state, false); break; default: break; } }