Skip to content

Commit

Permalink
WFLY-8446 Infinispan store=file resource needs capability references …
Browse files Browse the repository at this point in the history
…for path resolution
  • Loading branch information
pferraro committed Apr 3, 2017
1 parent c491096 commit 36b25bc
Show file tree
Hide file tree
Showing 6 changed files with 61 additions and 16 deletions.
Expand Up @@ -24,6 +24,7 @@

import javax.management.MBeanServer;

import org.jboss.as.controller.services.path.PathManager;
import org.jboss.as.naming.NamingStore;
import org.jboss.as.naming.service.NamingService;
import org.wildfly.clustering.service.Requirement;
Expand All @@ -35,6 +36,7 @@
public enum CommonRequirement implements Requirement, ServiceNameFactoryProvider {
MBEAN_SERVER("org.wildfly.management.jmx", MBeanServer.class),
NAMING_STORE(NamingService.CAPABILITY_NAME, NamingStore.class),
PATH_MANAGER("org.wildfly.management.path-manager", PathManager.class),
;
private final String name;
private final Class<?> type;
Expand Down
Expand Up @@ -41,6 +41,7 @@ public enum CommonUnaryRequirement implements UnaryRequirement, UnaryServiceName
DATA_SOURCE("org.wildfly.data-source", DataSource.class),
KEY_STORE("org.wildfly.security.key-store", KeyStore.class),
OUTBOUND_SOCKET_BINDING("org.wildfly.network.outbound-socket-binding", OutboundSocketBinding.class),
PATH("org.wildfly.management.path", String.class),
SOCKET_BINDING("org.wildfly.network.socket-binding", SocketBinding.class),
SSL_CONTEXT("org.wildfly.security.ssl-context", SSLContext.class),
;
Expand Down
Expand Up @@ -31,26 +31,27 @@
import org.infinispan.configuration.cache.PersistenceConfiguration;
import org.infinispan.configuration.cache.SingleFileStoreConfiguration;
import org.infinispan.configuration.cache.SingleFileStoreConfigurationBuilder;
import org.jboss.as.clustering.controller.CommonRequirement;
import org.jboss.as.clustering.dmr.ModelNodes;
import org.jboss.as.controller.OperationContext;
import org.jboss.as.controller.OperationFailedException;
import org.jboss.as.controller.PathAddress;
import org.jboss.as.controller.services.path.PathManager;
import org.jboss.as.controller.services.path.PathManagerService;
import org.jboss.dmr.ModelNode;
import org.jboss.msc.service.ServiceBuilder;
import org.jboss.msc.service.ServiceTarget;
import org.jboss.msc.value.InjectedValue;
import org.wildfly.clustering.service.Builder;
import org.wildfly.clustering.service.InjectedValueDependency;
import org.wildfly.clustering.service.ValueDependency;

/**
* @author Paul Ferraro
*/
public class FileStoreBuilder extends StoreBuilder<SingleFileStoreConfiguration, SingleFileStoreConfigurationBuilder> {

private final InjectedValue<PathManager> pathManager = new InjectedValue<>();
private final String containerName;

private volatile ValueDependency<PathManager> pathManager;
private volatile String relativePath;
private volatile String relativeTo;

Expand All @@ -61,11 +62,12 @@ public class FileStoreBuilder extends StoreBuilder<SingleFileStoreConfiguration,

@Override
public ServiceBuilder<PersistenceConfiguration> build(ServiceTarget target) {
return super.build(target).addDependency(PathManagerService.SERVICE_NAME, PathManager.class, this.pathManager);
return this.pathManager.register(super.build(target));
}

@Override
public Builder<PersistenceConfiguration> configure(OperationContext context, ModelNode model) throws OperationFailedException {
this.pathManager = new InjectedValueDependency<>(CommonRequirement.PATH_MANAGER.getServiceName(context), PathManager.class);
this.relativePath = ModelNodes.optionalString(RELATIVE_PATH.resolveModelAttribute(context, model)).orElse(InfinispanExtension.SUBSYSTEM_NAME + File.separatorChar + this.containerName);
this.relativeTo = RELATIVE_TO.resolveModelAttribute(context, model).asString();
return super.configure(context, model);
Expand Down
Expand Up @@ -22,16 +22,26 @@

package org.jboss.as.clustering.infinispan.subsystem;

import java.util.function.UnaryOperator;
import java.util.stream.Stream;

import org.jboss.as.clustering.controller.CapabilityReference;
import org.jboss.as.clustering.controller.CommonRequirement;
import org.jboss.as.clustering.controller.CommonUnaryRequirement;
import org.jboss.as.controller.AttributeDefinition;
import org.jboss.as.controller.ModelVersion;
import org.jboss.as.controller.PathAddress;
import org.jboss.as.controller.PathElement;
import org.jboss.as.controller.SimpleAttributeDefinitionBuilder;
import org.jboss.as.controller.capability.RuntimeCapability;
import org.jboss.as.controller.registry.AttributeAccess;
import org.jboss.as.controller.services.path.ResolvePathHandler;
import org.jboss.as.controller.transform.description.RejectAttributeChecker;
import org.jboss.as.controller.transform.description.ResourceTransformationDescriptionBuilder;
import org.jboss.as.server.ServerEnvironment;
import org.jboss.dmr.ModelNode;
import org.jboss.dmr.ModelType;
import org.wildfly.clustering.service.Requirement;

/**
* Resource description for the addressable resource /subsystem=infinispan/cache-container=X/cache=Y/store=STORE
Expand All @@ -43,19 +53,40 @@ public class FileStoreResourceDefinition extends StoreResourceDefinition {
static final PathElement LEGACY_PATH = PathElement.pathElement("file-store", "FILE_STORE");
static final PathElement PATH = pathElement("file");

enum Capability implements org.jboss.as.clustering.controller.Capability {
RELATIVE_PATH("org.wildfly.clustering.infinispan.cache.store.file.relative-path", CommonRequirement.PATH_MANAGER),
;
private final RuntimeCapability<Void> definition;

Capability(String name, Requirement... requirements) {
this.definition = RuntimeCapability.Builder.of(name, true).addRequirements(Stream.of(requirements).map(Requirement::getName).toArray(String[]::new)).build();
}

@Override
public RuntimeCapability<?> getDefinition() {
return this.definition;
}

@Override
public RuntimeCapability<?> resolve(PathAddress address) {
PathAddress cacheAddress = address.getParent();
PathAddress containerAddress = cacheAddress.getParent();
return this.definition.fromBaseCapability(containerAddress.getLastElement().getValue(), cacheAddress.getLastElement().getValue());
}
}

enum Attribute implements org.jboss.as.clustering.controller.Attribute {
RELATIVE_PATH("path", ModelType.STRING, null),
RELATIVE_TO("relative-to", ModelType.STRING, new ModelNode(ServerEnvironment.SERVER_DATA_DIR)),
RELATIVE_PATH("path", ModelType.STRING, builder -> builder.setAllowExpression(true)),
RELATIVE_TO("relative-to", ModelType.STRING, builder -> builder.setDefaultValue(new ModelNode(ServerEnvironment.SERVER_DATA_DIR)).setCapabilityReference(new CapabilityReference(Capability.RELATIVE_PATH, CommonUnaryRequirement.PATH))),
;
private final AttributeDefinition definition;

Attribute(String name, ModelType type, ModelNode defaultValue) {
this.definition = new SimpleAttributeDefinitionBuilder(name, type)
.setAllowExpression(true)
.setRequired(false)
.setDefaultValue(defaultValue)
.setFlags(AttributeAccess.Flag.RESTART_RESOURCE_SERVICES)
.build();
Attribute(String name, ModelType type) {
this(name, type, UnaryOperator.identity());
}

Attribute(String name, ModelType type, UnaryOperator<SimpleAttributeDefinitionBuilder> configurator) {
this.definition = configurator.apply(new SimpleAttributeDefinitionBuilder(name, type).setRequired(false).setFlags(AttributeAccess.Flag.RESTART_RESOURCE_SERVICES)).build();
}

@Override
Expand All @@ -67,12 +98,17 @@ public AttributeDefinition getDefinition() {
static void buildTransformation(ModelVersion version, ResourceTransformationDescriptionBuilder parent) {
ResourceTransformationDescriptionBuilder builder = InfinispanModel.VERSION_4_0_0.requiresTransformation(version) ? parent.addChildRedirection(PATH, LEGACY_PATH) : parent.addChildResource(PATH);

if (InfinispanModel.VERSION_4_2_0.requiresTransformation(version)) {
builder.getAttributeBuilder().addRejectCheck(RejectAttributeChecker.SIMPLE_EXPRESSIONS, Attribute.RELATIVE_TO.getName());
}

StoreResourceDefinition.buildTransformation(version, builder, PATH);
}

FileStoreResourceDefinition() {
super(PATH, LEGACY_PATH, new InfinispanResourceDescriptionResolver(PATH, WILDCARD_PATH), descriptor -> descriptor.addAttributes(Attribute.class), address -> new FileStoreBuilder(address.getParent()), registration ->
registration.getPathManager().ifPresent(pathManager -> {
super(PATH, LEGACY_PATH, new InfinispanResourceDescriptionResolver(PATH, WILDCARD_PATH),
descriptor -> descriptor.addAttributes(Attribute.class).addCapabilities(Capability.class),
address -> new FileStoreBuilder(address.getParent()), registration -> registration.getPathManager().ifPresent(pathManager -> {
ResolvePathHandler pathHandler = ResolvePathHandler.Builder.of(pathManager)
.setPathAttribute(Attribute.RELATIVE_PATH.getDefinition())
.setRelativeToAttribute(Attribute.RELATIVE_TO.getDefinition())
Expand Down
Expand Up @@ -37,6 +37,7 @@
import java.util.LinkedList;
import java.util.List;

import org.jboss.as.clustering.controller.CommonRequirement;
import org.jboss.as.clustering.controller.CommonUnaryRequirement;
import org.jboss.as.clustering.controller.Operations;
import org.jboss.as.clustering.jgroups.subsystem.JGroupsSubsystemInitialization;
Expand All @@ -47,6 +48,7 @@
import org.jboss.as.model.test.ModelFixer;
import org.jboss.as.model.test.ModelTestControllerVersion;
import org.jboss.as.model.test.ModelTestUtils;
import org.jboss.as.server.ServerEnvironment;
import org.jboss.as.subsystem.test.AdditionalInitialization;
import org.jboss.as.subsystem.test.KernelServices;
import org.jboss.as.subsystem.test.KernelServicesBuilder;
Expand Down Expand Up @@ -148,6 +150,8 @@ private static String[] getDependencies(ModelTestControllerVersion version) {
@Override
AdditionalInitialization createAdditionalInitialization() {
return new InfinispanSubsystemInitialization()
.require(CommonRequirement.PATH_MANAGER)
.require(CommonUnaryRequirement.PATH, ServerEnvironment.SERVER_TEMP_DIR)
.require(CommonUnaryRequirement.OUTBOUND_SOCKET_BINDING, "hotrod-server-1", "hotrod-server-2")
.require(CommonUnaryRequirement.DATA_SOURCE, "ExampleDS")
.require(JGroupsRequirement.CHANNEL_FACTORY, "maximal-channel")
Expand Down
2 changes: 1 addition & 1 deletion pom.xml
Expand Up @@ -215,7 +215,7 @@
<version.org.syslog4j>0.9.30</version.org.syslog4j>
<version.org.wildfly.build-tools>1.1.8.Final</version.org.wildfly.build-tools>
<version.org.wildfly.checkstyle-config>1.0.5.Final</version.org.wildfly.checkstyle-config>
<version.org.wildfly.core>3.0.0.Beta12</version.org.wildfly.core>
<version.org.wildfly.core>3.0.0.Beta13</version.org.wildfly.core>
<version.org.wildfly.plugin>1.2.0.Alpha2</version.org.wildfly.plugin>
<version.org.wildfly.arquillian>2.1.0.Alpha1</version.org.wildfly.arquillian>
<version.org.wildfly.http-client>1.0.0.Alpha4</version.org.wildfly.http-client>
Expand Down

0 comments on commit 36b25bc

Please sign in to comment.