private void verifyNoSchedulersInPlacementZone(ContainerHostSpec hostSpec, Operation op, Runnable successCallback) { String placementZoneLink = hostSpec.hostState.resourcePoolLink; if (placementZoneLink == null || placementZoneLink.isEmpty()) { // no placement zone => no schedulers successCallback.run(); return; } AtomicBoolean schedulerFound = new AtomicBoolean(false); QueryTask queryTask = QueryUtil.buildPropertyQuery(ComputeState.class, ComputeState.FIELD_NAME_RESOURCE_POOL_LINK, placementZoneLink); QueryUtil.addExpandOption(queryTask); new ServiceDocumentQuery<>(getHost(), ComputeState.class) .query(queryTask, (r) -> { if (r.hasException()) { op.fail(r.getException()); } else if (r.hasResult()) { if (ContainerHostUtil.isTreatedLikeSchedulerHost(r.getResult())) { schedulerFound.set(true); op.fail(new LocalizableValidationException( PLACEMENT_ZONE_CONTAINS_SCHEDULERS_MESSAGE, PLACEMENT_ZONE_CONTAINS_SCHEDULERS_MESSAGE_CODE)); } } else { if (!schedulerFound.get()) { successCallback.run(); } } }); }
private static DeferredResult<Void> verifyZoneContainsSingleSchedulerOrNoHost( String resourcePoolLink, Operation op, Service service) { if (resourcePoolLink == null) { // there is no placement zone to verify return null; } Query query = Query.Builder.create() .addKindFieldClause(ComputeState.class) .addFieldClause(ComputeState.FIELD_NAME_RESOURCE_POOL_LINK, resourcePoolLink) .addCompositeFieldClause(ComputeState.FIELD_NAME_CUSTOM_PROPERTIES, ComputeConstants.COMPUTE_CONTAINER_HOST_PROP_NAME, "true") .build(); QueryUtils.QueryByPages<ComputeState> queryHelper = new QueryUtils.QueryByPages<>( service.getHost(), query, ComputeState.class, null); return queryHelper.collectDocuments(Collectors.toList()).thenAccept(computes -> { if (computes.size() > 1) { throw new LocalizableValidationException( MULTIPLE_HOSTS_IN_PLACEMENT_ZONE_MESSAGE, MULTIPLE_HOSTS_IN_PLACEMENT_ZONE_MESSAGE_CODE); } if (!computes.isEmpty() && !ContainerHostUtil.isTreatedLikeSchedulerHost(computes.get(0))) { throw new LocalizableValidationException( NON_SCHEDULER_HOST_IN_PLACEMENT_ZONE_MESSAGE, NON_SCHEDULER_HOST_IN_PLACEMENT_ZONE_MESSAGE_CODE); } }); }
AtomicBoolean schedulerFound = new AtomicBoolean(false); return queryHelper.queryDocuments(compute -> { if (ContainerHostUtil.isTreatedLikeSchedulerHost(compute)) { schedulerFound.set(true);