Skip to content

Commit

Permalink
Generalize election policy capability.
Browse files Browse the repository at this point in the history
  • Loading branch information
pferraro committed May 12, 2017
1 parent 60b63fb commit 62e4697
Show file tree
Hide file tree
Showing 6 changed files with 52 additions and 108 deletions.
Expand Up @@ -23,10 +23,12 @@
package org.wildfly.extension.clustering.singleton; package org.wildfly.extension.clustering.singleton;


import static org.wildfly.extension.clustering.singleton.ElectionPolicyResourceDefinition.Attribute.*; import static org.wildfly.extension.clustering.singleton.ElectionPolicyResourceDefinition.Attribute.*;
import static org.wildfly.extension.clustering.singleton.ElectionPolicyResourceDefinition.Capability.*;


import java.util.List; import java.util.List;
import java.util.concurrent.CopyOnWriteArrayList; import java.util.concurrent.CopyOnWriteArrayList;


import org.jboss.as.clustering.controller.CapabilityServiceNameProvider;
import org.jboss.as.clustering.controller.CommonUnaryRequirement; import org.jboss.as.clustering.controller.CommonUnaryRequirement;
import org.jboss.as.clustering.controller.ResourceServiceBuilder; import org.jboss.as.clustering.controller.ResourceServiceBuilder;
import org.jboss.as.clustering.dmr.ModelNodes; import org.jboss.as.clustering.dmr.ModelNodes;
Expand All @@ -52,13 +54,13 @@
* Builds a service that provides an election policy. * Builds a service that provides an election policy.
* @author Paul Ferraro * @author Paul Ferraro
*/ */
public abstract class ElectionPolicyBuilder extends ElectionPolicyServiceNameProvider implements ResourceServiceBuilder<SingletonElectionPolicy>, Value<SingletonElectionPolicy> { public abstract class ElectionPolicyBuilder extends CapabilityServiceNameProvider implements ResourceServiceBuilder<SingletonElectionPolicy>, Value<SingletonElectionPolicy> {


private final List<Preference> preferences = new CopyOnWriteArrayList<>(); private final List<Preference> preferences = new CopyOnWriteArrayList<>();
private final List<Dependency> dependencies = new CopyOnWriteArrayList<>(); private final List<Dependency> dependencies = new CopyOnWriteArrayList<>();


protected ElectionPolicyBuilder(PathAddress policyAddress) { protected ElectionPolicyBuilder(PathAddress address) {
super(policyAddress); super(ELECTION_POLICY, address);
} }


@Override @Override
Expand Down
Expand Up @@ -22,9 +22,16 @@


package org.wildfly.extension.clustering.singleton; package org.wildfly.extension.clustering.singleton;


import org.jboss.as.clustering.controller.ChildResourceDefinition; import java.util.function.Consumer;

import org.jboss.as.clustering.controller.CapabilityReference; import org.jboss.as.clustering.controller.CapabilityReference;
import org.jboss.as.clustering.controller.ChildResourceDefinition;
import org.jboss.as.clustering.controller.CommonUnaryRequirement; import org.jboss.as.clustering.controller.CommonUnaryRequirement;
import org.jboss.as.clustering.controller.ResourceDescriptor;
import org.jboss.as.clustering.controller.ResourceServiceBuilderFactory;
import org.jboss.as.clustering.controller.ResourceServiceHandler;
import org.jboss.as.clustering.controller.SimpleResourceRegistration;
import org.jboss.as.clustering.controller.SimpleResourceServiceHandler;
import org.jboss.as.controller.AttributeDefinition; import org.jboss.as.controller.AttributeDefinition;
import org.jboss.as.controller.CapabilityReferenceRecorder; import org.jboss.as.controller.CapabilityReferenceRecorder;
import org.jboss.as.controller.PathAddress; import org.jboss.as.controller.PathAddress;
Expand All @@ -33,6 +40,7 @@
import org.jboss.as.controller.capability.RuntimeCapability; import org.jboss.as.controller.capability.RuntimeCapability;
import org.jboss.as.controller.descriptions.ResourceDescriptionResolver; import org.jboss.as.controller.descriptions.ResourceDescriptionResolver;
import org.jboss.as.controller.registry.ManagementResourceRegistration; import org.jboss.as.controller.registry.ManagementResourceRegistration;
import org.wildfly.clustering.singleton.SingletonElectionPolicy;


/** /**
* Definition of an election policy resource. * Definition of an election policy resource.
Expand All @@ -47,12 +55,12 @@ static PathElement pathElement(String value) {
} }


enum Capability implements org.jboss.as.clustering.controller.Capability { enum Capability implements org.jboss.as.clustering.controller.Capability {
SOCKET_BINDING_PREFERENCE("org.wildfly.clustering.singleton.singleton-policy.election-policy.socket-binding-preference"), ELECTION_POLICY("org.wildfly.clustering.singleton.policy.election", SingletonElectionPolicy.class),
; ;
private final RuntimeCapability<Void> definition; private final RuntimeCapability<Void> definition;


Capability(String name) { Capability(String name, Class<?> type) {
this.definition = RuntimeCapability.Builder.of(name, true).build(); this.definition = RuntimeCapability.Builder.of(name, true, type).build();
} }


@Override @Override
Expand All @@ -68,7 +76,7 @@ public RuntimeCapability<Void> resolve(PathAddress address) {


enum Attribute implements org.jboss.as.clustering.controller.Attribute { enum Attribute implements org.jboss.as.clustering.controller.Attribute {
NAME_PREFERENCES("name-preferences", "socket-binding-preferences"), NAME_PREFERENCES("name-preferences", "socket-binding-preferences"),
SOCKET_BINDING_PREFERENCES("socket-binding-preferences", "name-preferences", new CapabilityReference(Capability.SOCKET_BINDING_PREFERENCE, CommonUnaryRequirement.OUTBOUND_SOCKET_BINDING)), SOCKET_BINDING_PREFERENCES("socket-binding-preferences", "name-preferences", new CapabilityReference(Capability.ELECTION_POLICY, CommonUnaryRequirement.OUTBOUND_SOCKET_BINDING)),
; ;
private final AttributeDefinition definition; private final AttributeDefinition definition;


Expand Down Expand Up @@ -96,7 +104,25 @@ private static StringListAttributeDefinition.Builder createBuilder(String name,
} }
} }


ElectionPolicyResourceDefinition(PathElement path, ResourceDescriptionResolver resolver) { private final Consumer<ResourceDescriptor> configurator;
private final ResourceServiceBuilderFactory<SingletonElectionPolicy> builderFactory;

ElectionPolicyResourceDefinition(PathElement path, ResourceDescriptionResolver resolver, Consumer<ResourceDescriptor> configurator, ResourceServiceBuilderFactory<SingletonElectionPolicy> builderFactory) {
super(path, resolver); super(path, resolver);
this.configurator = configurator;
this.builderFactory = builderFactory;
}

@Override
public void register(ManagementResourceRegistration parentRegistration) {
ManagementResourceRegistration registration = parentRegistration.registerSubModel(this);

ResourceDescriptor descriptor = new ResourceDescriptor(this.getResourceDescriptionResolver())
.addAttributes(ElectionPolicyResourceDefinition.Attribute.class)
.addCapabilities(ElectionPolicyResourceDefinition.Capability.class)
;
this.configurator.accept(descriptor);
ResourceServiceHandler handler = new SimpleResourceServiceHandler<>(this.builderFactory);
new SimpleResourceRegistration(descriptor, handler).register(registration);
} }
} }

This file was deleted.

Expand Up @@ -22,12 +22,8 @@


package org.wildfly.extension.clustering.singleton; package org.wildfly.extension.clustering.singleton;


import org.jboss.as.clustering.controller.ResourceDescriptor; import org.jboss.as.clustering.function.Consumers;
import org.jboss.as.clustering.controller.SimpleResourceRegistration;
import org.jboss.as.clustering.controller.ResourceServiceHandler;
import org.jboss.as.clustering.controller.SimpleResourceServiceHandler;
import org.jboss.as.controller.PathElement; import org.jboss.as.controller.PathElement;
import org.jboss.as.controller.registry.ManagementResourceRegistration;


/** /**
* @author Paul Ferraro * @author Paul Ferraro
Expand All @@ -38,18 +34,6 @@ public class RandomElectionPolicyResourceDefinition extends ElectionPolicyResour
static final PathElement PATH = pathElement(PATH_VALUE); static final PathElement PATH = pathElement(PATH_VALUE);


RandomElectionPolicyResourceDefinition() { RandomElectionPolicyResourceDefinition() {
super(PATH, new SingletonResourceDescriptionResolver(PATH, WILDCARD_PATH)); super(PATH, new SingletonResourceDescriptionResolver(PATH, WILDCARD_PATH), Consumers.empty(), address -> new RandomElectionPolicyBuilder(address));
}

@Override
public void register(ManagementResourceRegistration parentRegistration) {
ManagementResourceRegistration registration = parentRegistration.registerSubModel(this);

ResourceDescriptor descriptor = new ResourceDescriptor(this.getResourceDescriptionResolver())
.addAttributes(ElectionPolicyResourceDefinition.Attribute.class)
.addCapabilities(ElectionPolicyResourceDefinition.Capability.class)
;
ResourceServiceHandler handler = new SimpleResourceServiceHandler<>(address -> new RandomElectionPolicyBuilder(address.getParent()));
new SimpleResourceRegistration(descriptor, handler).register(registration);
} }
} }
Expand Up @@ -22,14 +22,9 @@


package org.wildfly.extension.clustering.singleton; package org.wildfly.extension.clustering.singleton;


import org.jboss.as.clustering.controller.ResourceDescriptor;
import org.jboss.as.clustering.controller.SimpleResourceRegistration;
import org.jboss.as.clustering.controller.ResourceServiceHandler;
import org.jboss.as.clustering.controller.SimpleResourceServiceHandler;
import org.jboss.as.controller.PathElement; import org.jboss.as.controller.PathElement;
import org.jboss.as.controller.SimpleAttributeDefinition; import org.jboss.as.controller.SimpleAttributeDefinition;
import org.jboss.as.controller.SimpleAttributeDefinitionBuilder; import org.jboss.as.controller.SimpleAttributeDefinitionBuilder;
import org.jboss.as.controller.registry.ManagementResourceRegistration;
import org.jboss.dmr.ModelNode; import org.jboss.dmr.ModelNode;
import org.jboss.dmr.ModelType; import org.jboss.dmr.ModelType;


Expand Down Expand Up @@ -62,19 +57,6 @@ public SimpleAttributeDefinition getDefinition() {
} }


SimpleElectionPolicyResourceDefinition() { SimpleElectionPolicyResourceDefinition() {
super(PATH, new SingletonResourceDescriptionResolver(PATH, WILDCARD_PATH)); super(PATH, new SingletonResourceDescriptionResolver(PATH, WILDCARD_PATH), descriptor -> descriptor.addAttributes(Attribute.class), address -> new SimpleElectionPolicyBuilder(address));
}

@Override
public void register(ManagementResourceRegistration parentRegistration) {
ManagementResourceRegistration registration = parentRegistration.registerSubModel(this);

ResourceDescriptor descriptor = new ResourceDescriptor(this.getResourceDescriptionResolver())
.addAttributes(Attribute.class)
.addAttributes(ElectionPolicyResourceDefinition.Attribute.class)
.addCapabilities(ElectionPolicyResourceDefinition.Capability.class)
;
ResourceServiceHandler handler = new SimpleResourceServiceHandler<>(address -> new SimpleElectionPolicyBuilder(address.getParent()));
new SimpleResourceRegistration(descriptor, handler).register(registration);
} }
} }
Expand Up @@ -25,6 +25,9 @@
import static org.wildfly.extension.clustering.singleton.SingletonPolicyResourceDefinition.Attribute.*; import static org.wildfly.extension.clustering.singleton.SingletonPolicyResourceDefinition.Attribute.*;
import static org.wildfly.extension.clustering.singleton.SingletonPolicyResourceDefinition.Capability.*; import static org.wildfly.extension.clustering.singleton.SingletonPolicyResourceDefinition.Capability.*;


import java.util.stream.Stream;

import org.jboss.as.clustering.controller.CapabilityServiceNameProvider;
import org.jboss.as.clustering.controller.ResourceServiceBuilder; import org.jboss.as.clustering.controller.ResourceServiceBuilder;
import org.jboss.as.clustering.dmr.ModelNodes; import org.jboss.as.clustering.dmr.ModelNodes;
import org.jboss.as.controller.OperationContext; import org.jboss.as.controller.OperationContext;
Expand All @@ -38,7 +41,6 @@
import org.jboss.msc.service.ServiceTarget; import org.jboss.msc.service.ServiceTarget;
import org.jboss.msc.service.ValueService; import org.jboss.msc.service.ValueService;
import org.jboss.msc.value.ImmediateValue; import org.jboss.msc.value.ImmediateValue;
import org.jboss.msc.value.InjectedValue;
import org.wildfly.clustering.service.Builder; import org.wildfly.clustering.service.Builder;
import org.wildfly.clustering.service.InjectedValueDependency; import org.wildfly.clustering.service.InjectedValueDependency;
import org.wildfly.clustering.service.ValueDependency; import org.wildfly.clustering.service.ValueDependency;
Expand All @@ -51,31 +53,24 @@
* Builds a service that provides a {@link SingletonPolicy}. * Builds a service that provides a {@link SingletonPolicy}.
* @author Paul Ferraro * @author Paul Ferraro
*/ */
public class SingletonPolicyBuilder implements ResourceServiceBuilder<SingletonPolicy>, SingletonPolicy { public class SingletonPolicyBuilder extends CapabilityServiceNameProvider implements ResourceServiceBuilder<SingletonPolicy>, SingletonPolicy {

private final InjectedValue<SingletonElectionPolicy> policy = new InjectedValue<>();


private final PathAddress address; private final ValueDependency<SingletonElectionPolicy> policy;


private volatile ValueDependency<SingletonServiceBuilderFactory> factory; private volatile ValueDependency<SingletonServiceBuilderFactory> factory;
private volatile int quorum; private volatile int quorum;


public SingletonPolicyBuilder(PathAddress address) { public SingletonPolicyBuilder(PathAddress address) {
this.address = address; super(POLICY, address);
} this.policy = new InjectedValueDependency<>(ElectionPolicyResourceDefinition.Capability.ELECTION_POLICY.getServiceName(address.append(ElectionPolicyResourceDefinition.WILDCARD_PATH)), SingletonElectionPolicy.class);

@Override
public ServiceName getServiceName() {
return POLICY.getServiceName(this.address);
} }


@Override @Override
public ServiceBuilder<SingletonPolicy> build(ServiceTarget target) { public ServiceBuilder<SingletonPolicy> build(ServiceTarget target) {
ServiceBuilder<SingletonPolicy> builder = target.addService(this.getServiceName(), new ValueService<>(new ImmediateValue<SingletonPolicy>(this))) Service<SingletonPolicy> service = new ValueService<>(new ImmediateValue<>(this));
.addDependency(new ElectionPolicyServiceNameProvider(this.address).getServiceName(), SingletonElectionPolicy.class, this.policy) ServiceBuilder<SingletonPolicy> builder = target.addService(this.getServiceName(), service).setInitialMode(ServiceController.Mode.PASSIVE);
.setInitialMode(ServiceController.Mode.PASSIVE) Stream.of(this.policy, this.factory).forEach(dependency -> dependency.register(builder));
; return builder;
return this.factory.register(builder);
} }


@Override @Override
Expand Down Expand Up @@ -105,6 +100,6 @@ public <T> Builder<T> createSingletonServiceBuilder(ServiceName name, Service<T>


@Override @Override
public String toString() { public String toString() {
return this.address.getLastElement().getValue(); return this.getServiceName().getSimpleName();
} }
} }

0 comments on commit 62e4697

Please sign in to comment.