private static void copyRequirements(Map<CapabilityId, Map<String, RuntimeRequirementRegistration>> source, Map<CapabilityId, Map<String, RuntimeRequirementRegistration>> dest) { for (Map.Entry<CapabilityId, Map<String, RuntimeRequirementRegistration>> entry : source.entrySet()) { Map<String, RuntimeRequirementRegistration> mapCopy = new HashMap<>(); for (Map.Entry<String, RuntimeRequirementRegistration> innerEntry : entry.getValue().entrySet()) { mapCopy.put(innerEntry.getKey(), new RuntimeRequirementRegistration(innerEntry.getValue())); } dest.put(entry.getKey(), mapCopy); } }
/** * This must be called with the write lock held. * @param requirement the requirement */ private void registerRequirement(RuntimeRequirementRegistration requirement) { assert writeLock.isHeldByCurrentThread(); CapabilityId dependentId = requirement.getDependentId(); if (!capabilities.containsKey(dependentId)) { throw ControllerLogger.MGMT_OP_LOGGER.unknownCapabilityInContext(dependentId.getName(), dependentId.getScope().getName()); } Map<CapabilityId, Map<String, RuntimeRequirementRegistration>> requirementMap = requirement.isRuntimeOnly() ? runtimeOnlyRequirements : requirements; Map<String, RuntimeRequirementRegistration> dependents = requirementMap.get(dependentId); if (dependents == null) { dependents = new HashMap<>(); requirementMap.put(dependentId, dependents); } RuntimeRequirementRegistration existing = dependents.get(requirement.getRequiredName()); if (existing == null) { dependents.put(requirement.getRequiredName(), requirement); } else { existing.addRegistrationPoint(requirement.getOldestRegistrationPoint()); } modified = true; }
private RuntimeRequirementRegistration removeRequirement(RuntimeRequirementRegistration requirementRegistration, boolean optional) { assert writeLock.isHeldByCurrentThread(); Map<CapabilityId, Map<String, RuntimeRequirementRegistration>> requirementMap = optional ? runtimeOnlyRequirements : requirements; Map<String, RuntimeRequirementRegistration> dependents = requirementMap.get(requirementRegistration.getDependentId()); RuntimeRequirementRegistration result = null; if (dependents != null) { RuntimeRequirementRegistration rrr = dependents.get(requirementRegistration.getRequiredName()); if (rrr != null) { rrr.removeRegistrationPoint(requirementRegistration.getOldestRegistrationPoint()); if (rrr.getRegistrationPointCount() == 0) { result = dependents.remove(requirementRegistration.getRequiredName()); } if (dependents.size() == 0) { requirementMap.remove(requirementRegistration.getDependentId()); } modified = true; } } return result; }
/** * Copy constructor. * * @param toCopy the registration to copy. */ public RequirementRegistration(RuntimeRequirementRegistration toCopy) { this(toCopy.getRequiredName(), toCopy.getDependentId()); this.registrationPoints.putAll(((RequirementRegistration)toCopy).registrationPoints); }
RegistrationPoint rp = reg.getOldestRegistrationPoint(); if (rp.getAttribute() == null) { msg = msg.append('\n').append(ControllerLogger.ROOT_LOGGER.requirementPointSimple(reg.getDependentName(), rp.getAddress().toCLIStyleString())); } else { msg = msg.append('\n').append(ControllerLogger.ROOT_LOGGER.requirementPointFull(reg.getDependentName(), rp.getAttribute(), rp.getAddress().toCLIStyleString())); ? ControllerLogger.ROOT_LOGGER.formattedCapabilityName(reqReq.getRequiredName()) : ControllerLogger.ROOT_LOGGER.formattedCapabilityId(reqReq.getRequiredName(), reqReq.getDependentContext().getName()); Set<PathAddress> possiblePoints = managementModel.getCapabilityRegistry().getPossibleProviderPoints(reqReq.getDependentId()); appendPossibleProviderPoints(unexplainedProblem, formattedCapability, possiblePoints); for (Step step : inconsistent) { ModelNode response = step.response; String depConName = reg.getDependentContext().getName(); response.get(FAILURE_DESCRIPTION).set(ControllerLogger.ROOT_LOGGER.inconsistentCapabilityContexts(reg.getRequiredName(), reg.getDependentName(), depConName, depConName)); ControllerLogger.ROOT_LOGGER.inconsistentCapabilityContexts(reg.getDependentName(), depConName, step.address.toCLIStyleString(), reg.getRequiredName(), depConName); unexplainedProblem.append('\n'); String depConName = reg.getDependentContext().getName(); unexplainedProblem.append(ControllerLogger.ROOT_LOGGER.inconsistentCapabilityContexts(reg.getRequiredName(), reg.getDependentName(), depConName, depConName));
Set<CapabilityScope> consistentSet = consistentSets == null ? null : consistentSets.get(dependentContext); for (RuntimeRequirementRegistration req : entry.getValue().values()) { SatisfactoryCapability satisfactory = findSatisfactoryCapability(req.getRequiredName(), dependentContext, !forServer); if (satisfactory == null) { && (req.getRequiredName().startsWith("org.wildfly.domain.server-group.") || req.getRequiredName().startsWith("org.wildfly.domain.socket-binding-group."))) { ControllerLogger.MGMT_OP_LOGGER.tracef("Ignoring that dependent %s cannot resolve required capability %s as the 'hostXmlOnly' param is set", dependentId, req.getRequiredName()); continue; CapabilityId basicId = new CapabilityId(req.getRequiredName(), dependentContext); Set<RuntimeRequirementRegistration> set = missing.get(basicId); if (set == null) { CapabilityScope reqDependent = req.getDependentContext(); recordConsistentSets(requiresConsistency, consistentSets, reqDependent, consistentSet, req, satisfactory, reqDependent); isInconsistent = isInconsistent || (consistentSet != null && consistentSet.size() == 0);
void removeCapabilityRequirement(String required, String dependent, Step step, String attributeName) { assert isControllingThread(); assertStageModel(currentStage); ensureLocalCapabilityRegistry(); RuntimeRequirementRegistration registration = createRequirementRegistration(required, dependent, false, step, attributeName); managementModel.getCapabilityRegistry().removeCapabilityRequirement(registration); removeRequirement(required, registration.getDependentContext(), step); }
RegistrationPoint rp = reg.getOldestRegistrationPoint(); if (rp.getAttribute() == null) { msg = msg.append('\n').append(ControllerLogger.ROOT_LOGGER.requirementPointSimple(reg.getDependentName(), rp.getAddress().toCLIStyleString())); } else { msg = msg.append('\n').append(ControllerLogger.ROOT_LOGGER.requirementPointFull(reg.getDependentName(), rp.getAttribute(), rp.getAddress().toCLIStyleString())); ? ControllerLogger.ROOT_LOGGER.formattedCapabilityName(reqReq.getRequiredName()) : ControllerLogger.ROOT_LOGGER.formattedCapabilityId(reqReq.getRequiredName(), reqReq.getDependentContext().getName()); Set<PathAddress> possiblePoints = managementModel.getCapabilityRegistry().getPossibleProviderPoints(reqReq.getDependentId()); appendPossibleProviderPoints(unexplainedProblem, formattedCapability, possiblePoints); for (Step step : inconsistent) { ModelNode response = step.response; String depConName = reg.getDependentContext().getName(); response.get(FAILURE_DESCRIPTION).set(ControllerLogger.ROOT_LOGGER.inconsistentCapabilityContexts(reg.getRequiredName(), reg.getDependentName(), depConName, depConName)); ControllerLogger.ROOT_LOGGER.inconsistentCapabilityContexts(reg.getDependentName(), depConName, step.address.toCLIStyleString(), reg.getRequiredName(), depConName); unexplainedProblem.append('\n'); String depConName = reg.getDependentContext().getName(); unexplainedProblem.append(ControllerLogger.ROOT_LOGGER.inconsistentCapabilityContexts(reg.getRequiredName(), reg.getDependentName(), depConName, depConName));
/** * Copy constructor. * * @param toCopy the registration to copy. */ public RequirementRegistration(RuntimeRequirementRegistration toCopy) { this(toCopy.getRequiredName(), toCopy.getDependentId()); this.registrationPoints.putAll(((RequirementRegistration)toCopy).registrationPoints); }
Set<CapabilityScope> consistentSet = consistentSets == null ? null : consistentSets.get(dependentContext); for (RuntimeRequirementRegistration req : entry.getValue().values()) { SatisfactoryCapability satisfactory = findSatisfactoryCapability(req.getRequiredName(), dependentContext, !forServer); if (satisfactory == null) { && (req.getRequiredName().startsWith("org.wildfly.domain.server-group.") || req.getRequiredName().startsWith("org.wildfly.domain.socket-binding-group."))) { ControllerLogger.MGMT_OP_LOGGER.tracef("Ignoring that dependent %s cannot resolve required capability %s as the 'hostXmlOnly' param is set", dependentId, req.getRequiredName()); continue; CapabilityId basicId = new CapabilityId(req.getRequiredName(), dependentContext); Set<RuntimeRequirementRegistration> set = missing.get(basicId); if (set == null) { CapabilityScope reqDependent = req.getDependentContext(); recordConsistentSets(requiresConsistency, consistentSets, reqDependent, consistentSet, req, satisfactory, reqDependent); isInconsistent = isInconsistent || (consistentSet != null && consistentSet.size() == 0);
void removeCapabilityRequirement(String required, String dependent, Step step, String attributeName) { assert isControllingThread(); assertStageModel(currentStage); ensureLocalCapabilityRegistry(); RuntimeRequirementRegistration registration = createRequirementRegistration(required, dependent, false, step, attributeName); managementModel.getCapabilityRegistry().removeCapabilityRequirement(registration); removeRequirement(required, registration.getDependentContext(), step); }
private RuntimeRequirementRegistration removeRequirement(RuntimeRequirementRegistration requirementRegistration, boolean optional) { assert writeLock.isHeldByCurrentThread(); Map<CapabilityId, Map<String, RuntimeRequirementRegistration>> requirementMap = optional ? runtimeOnlyRequirements : requirements; Map<String, RuntimeRequirementRegistration> dependents = requirementMap.get(requirementRegistration.getDependentId()); RuntimeRequirementRegistration result = null; if (dependents != null) { RuntimeRequirementRegistration rrr = dependents.get(requirementRegistration.getRequiredName()); if (rrr != null) { rrr.removeRegistrationPoint(requirementRegistration.getOldestRegistrationPoint()); if (rrr.getRegistrationPointCount() == 0) { result = dependents.remove(requirementRegistration.getRequiredName()); } if (dependents.size() == 0) { requirementMap.remove(requirementRegistration.getDependentId()); } modified = true; } } return result; }
/** * This must be called with the write lock held. * @param requirement the requirement */ private void registerRequirement(RuntimeRequirementRegistration requirement) { assert writeLock.isHeldByCurrentThread(); CapabilityId dependentId = requirement.getDependentId(); if (!capabilities.containsKey(dependentId)) { throw ControllerLogger.MGMT_OP_LOGGER.unknownCapabilityInContext(dependentId.getName(), dependentId.getScope().getName()); } Map<CapabilityId, Map<String, RuntimeRequirementRegistration>> requirementMap = requirement.isRuntimeOnly() ? runtimeOnlyRequirements : requirements; Map<String, RuntimeRequirementRegistration> dependents = requirementMap.get(dependentId); if (dependents == null) { dependents = new HashMap<>(); requirementMap.put(dependentId, dependents); } RuntimeRequirementRegistration existing = dependents.get(requirement.getRequiredName()); if (existing == null) { dependents.put(requirement.getRequiredName(), requirement); } else { existing.addRegistrationPoint(requirement.getOldestRegistrationPoint()); } modified = true; }
private static void copyRequirements(Map<CapabilityId, Map<String, RuntimeRequirementRegistration>> source, Map<CapabilityId, Map<String, RuntimeRequirementRegistration>> dest) { for (Map.Entry<CapabilityId, Map<String, RuntimeRequirementRegistration>> entry : source.entrySet()) { Map<String, RuntimeRequirementRegistration> mapCopy = new HashMap<>(); for (Map.Entry<String, RuntimeRequirementRegistration> innerEntry : entry.getValue().entrySet()) { mapCopy.put(innerEntry.getKey(), new RuntimeRequirementRegistration(innerEntry.getValue())); } dest.put(entry.getKey(), mapCopy); } }
boolean requestOptionalCapability(String required, String dependent, boolean runtimeOnly, Step step, String attribute) { assert isControllingThread(); assertCapabilitiesAvailable(currentStage); ensureLocalCapabilityRegistry(); RuntimeCapabilityRegistry registry = managementModel.getCapabilityRegistry(); if (dependent == null) { // WFCORE-900 we're currently forgiving of this, but only for runtime-only requirements assert runtimeOnly; CapabilityScope context = createCapabilityContext(step.address); return registry.hasCapability(required, context); } RuntimeRequirementRegistration registration = createRequirementRegistration(required, dependent, runtimeOnly, step, attribute); CapabilityScope context = registration.getDependentContext(); if (registry.hasCapability(required, context)) { registry.registerAdditionalCapabilityRequirement(registration); recordRequirement(registration, step); return true; } return false; }
private RuntimeRequirementRegistration createRequirementRegistration(String required, String dependent, boolean runtimeOnly, Step step, String attribute) { CapabilityScope context = createCapabilityContext(step.address); RegistrationPoint rp = new RegistrationPoint(step.address, attribute); return new RuntimeRequirementRegistration(required, dependent, context, rp, runtimeOnly); }
boolean requestOptionalCapability(String required, String dependent, boolean runtimeOnly, Step step, String attribute) { assert isControllingThread(); assertCapabilitiesAvailable(currentStage); ensureLocalCapabilityRegistry(); RuntimeCapabilityRegistry registry = managementModel.getCapabilityRegistry(); if (dependent == null) { // WFCORE-900 we're currently forgiving of this, but only for runtime-only requirements assert runtimeOnly; CapabilityScope context = createCapabilityContext(step.address); return registry.hasCapability(required, context); } RuntimeRequirementRegistration registration = createRequirementRegistration(required, dependent, runtimeOnly, step, attribute); CapabilityScope context = registration.getDependentContext(); if (registry.hasCapability(required, context)) { registry.registerAdditionalCapabilityRequirement(registration); recordRequirement(registration, step); return true; } return false; }
private RuntimeRequirementRegistration createRequirementRegistration(String required, String dependent, boolean runtimeOnly, Step step, String attribute) { CapabilityScope context = createCapabilityContext(step.address); RegistrationPoint rp = new RegistrationPoint(step.address, attribute); return new RuntimeRequirementRegistration(required, dependent, context, rp, runtimeOnly); }
RuntimeRequirementRegistration removedReqReg = removeRequirement(new RuntimeRequirementRegistration(req, capabilityName, scope, rp), false); if (removedReqReg != null) { removedRequirements.put(req, removedReqReg); removeRequirement(new RuntimeRequirementRegistration(req, capabilityName, scope, rp), true);
RuntimeRequirementRegistration removedReqReg = removeRequirement(new RuntimeRequirementRegistration(req, capabilityName, scope, rp), false); if (removedReqReg != null) { removedRequirements.put(req, removedReqReg); removeRequirement(new RuntimeRequirementRegistration(req, capabilityName, scope, rp), true);