Skip to content

Commit

Permalink
Remove handler should ignore runtime attributes when removing capabil…
Browse files Browse the repository at this point in the history
…ity references, since these are not present in the model.

Aliases can also be ignored as these are constrainted by the target attribute.
  • Loading branch information
pferraro committed Sep 25, 2023
1 parent f0b102e commit 7ddd842
Showing 1 changed file with 15 additions and 14 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,7 @@ public abstract class AbstractRemoveStepHandler implements OperationStepHandler
protected AbstractRemoveStepHandler() {
}

@Override
public void execute(OperationContext context, ModelNode operation) throws OperationFailedException {

Resource resource = context.readResource(PathAddress.EMPTY_ADDRESS);
Expand All @@ -66,6 +67,7 @@ public void execute(OperationContext context, ModelNode operation) throws Operat

if (requiresRuntime(context)) {
context.addStep(new OperationStepHandler() {
@Override
public void execute(OperationContext context, ModelNode operation) throws OperationFailedException {
performRuntime(context, operation, model);

Expand Down Expand Up @@ -170,28 +172,27 @@ protected void performRemove(OperationContext context, final ModelNode operation
* is invoked before that method is. Will not be {@code null}
*/
protected void recordCapabilitiesAndRequirements(OperationContext context, ModelNode operation, Resource resource) throws OperationFailedException {
Set<RuntimeCapability> capabilitySet = context.getResourceRegistration().getCapabilities();

for (RuntimeCapability capability : capabilitySet) {
ImmutableManagementResourceRegistration registration = context.getResourceRegistration();
for (RuntimeCapability<?> capability : registration.getCapabilities()) {
if (capability.isDynamicallyNamed()) {
context.deregisterCapability(capability.getDynamicName(context.getCurrentAddress()));
} else {
context.deregisterCapability(capability.getName());
}
}
ModelNode model = resource.getModel();
ImmutableManagementResourceRegistration mrr = context.getResourceRegistration();
for (String attr : mrr.getAttributeNames(PathAddress.EMPTY_ADDRESS)) {
AttributeAccess aa = mrr.getAttributeAccess(PathAddress.EMPTY_ADDRESS, attr);
if (aa != null) {
AttributeDefinition ad = aa.getAttributeDefinition();
if (ad != null && (model.hasDefined(ad.getName()) || ad.hasCapabilityRequirements())) {
ad.removeCapabilityRequirements(context, resource, model.get(ad.getName()));
}
for (AttributeAccess attribute : registration.getAttributes(PathAddress.EMPTY_ADDRESS).values()) {
// Skip runtime attributes and aliases
if (AttributeAccess.Storage.RUNTIME.test(attribute) || AttributeAccess.Flag.ALIAS.test(attribute)) continue;

AttributeDefinition definition = attribute.getAttributeDefinition();
String attributeName = definition.getName();
if (model.hasDefined(attributeName) || definition.hasCapabilityRequirements()) {
definition.removeCapabilityRequirements(context, resource, model.get(attributeName));
}
}
assert mrr.getRequirements() != null;
for (CapabilityReferenceRecorder recorder : mrr.getRequirements()) {
assert registration.getRequirements() != null;
for (CapabilityReferenceRecorder recorder : registration.getRequirements()) {
recorder.removeCapabilityRequirements(context, resource, null);
}
}
Expand Down Expand Up @@ -227,7 +228,7 @@ protected boolean requiresRuntime(OperationContext context) {
return context.isDefaultRequiresRuntime();
}

private static boolean hasResource (OperationContext context) {
private static boolean hasResource(OperationContext context) {
try {
context.readResource(PathAddress.EMPTY_ADDRESS, false);
return true;
Expand Down

0 comments on commit 7ddd842

Please sign in to comment.