From d8289337bcd9ed9d5c0bc04e0c34eae7ef4f87af Mon Sep 17 00:00:00 2001 From: Paul Ferraro Date: Mon, 14 Nov 2016 11:10:55 -0500 Subject: [PATCH] WFLY-6906 Silence "ISPN000152: Passivation configured without an eviction policy being selected. Only manually evicted entities will be passivated." --- .../validation/EnumValidatorBuilder.java | 13 +++++++--- .../infinispan/subsystem/EvictionBuilder.java | 25 ++++++++++++++++--- .../subsystem/EvictionResourceDefinition.java | 4 ++- 3 files changed, 33 insertions(+), 9 deletions(-) diff --git a/clustering/common/src/main/java/org/jboss/as/clustering/controller/validation/EnumValidatorBuilder.java b/clustering/common/src/main/java/org/jboss/as/clustering/controller/validation/EnumValidatorBuilder.java index e922013855f3..5574231c6e3d 100644 --- a/clustering/common/src/main/java/org/jboss/as/clustering/controller/validation/EnumValidatorBuilder.java +++ b/clustering/common/src/main/java/org/jboss/as/clustering/controller/validation/EnumValidatorBuilder.java @@ -22,6 +22,10 @@ package org.jboss.as.clustering.controller.validation; +import java.lang.reflect.Array; +import java.util.EnumSet; +import java.util.Set; + import org.jboss.as.controller.operations.validation.EnumValidator; import org.jboss.as.controller.operations.validation.ParameterValidator; @@ -31,19 +35,20 @@ public class EnumValidatorBuilder> extends AbstractParameterValidatorBuilder { private final Class enumClass; - private final E[] allowed; + private final Set allowed; public EnumValidatorBuilder(Class enumClass) { - this(enumClass, enumClass.getEnumConstants()); + this(enumClass, EnumSet.allOf(enumClass)); } - public EnumValidatorBuilder(Class enumClass, @SuppressWarnings("unchecked") E... allowed) { + public EnumValidatorBuilder(Class enumClass, Set allowed) { this.enumClass = enumClass; this.allowed = allowed; } + @SuppressWarnings("unchecked") @Override public ParameterValidator build() { - return new EnumValidator<>(this.enumClass, this.allowsUndefined, this.allowsExpressions, this.allowed); + return new EnumValidator<>(this.enumClass, this.allowsUndefined, this.allowsExpressions, this.allowed.toArray((E[]) Array.newInstance(this.enumClass, this.allowed.size()))); } } diff --git a/clustering/infinispan/extension/src/main/java/org/jboss/as/clustering/infinispan/subsystem/EvictionBuilder.java b/clustering/infinispan/extension/src/main/java/org/jboss/as/clustering/infinispan/subsystem/EvictionBuilder.java index 4916fe536bb7..ee0d636b1f5b 100644 --- a/clustering/infinispan/extension/src/main/java/org/jboss/as/clustering/infinispan/subsystem/EvictionBuilder.java +++ b/clustering/infinispan/extension/src/main/java/org/jboss/as/clustering/infinispan/subsystem/EvictionBuilder.java @@ -28,6 +28,7 @@ import org.infinispan.configuration.cache.ConfigurationBuilder; import org.infinispan.configuration.cache.EvictionConfiguration; import org.infinispan.configuration.cache.EvictionConfigurationBuilder; +import org.infinispan.configuration.cache.PersistenceConfiguration; import org.infinispan.eviction.EvictionStrategy; import org.infinispan.eviction.EvictionType; import org.jboss.as.clustering.controller.ResourceServiceBuilder; @@ -36,7 +37,11 @@ import org.jboss.as.controller.OperationFailedException; import org.jboss.as.controller.PathAddress; import org.jboss.dmr.ModelNode; +import org.jboss.msc.service.ServiceBuilder; +import org.jboss.msc.service.ServiceTarget; import org.wildfly.clustering.service.Builder; +import org.wildfly.clustering.service.InjectedValueDependency; +import org.wildfly.clustering.service.ValueDependency; /** * @author Paul Ferraro @@ -44,16 +49,24 @@ public class EvictionBuilder extends ComponentBuilder implements ResourceServiceBuilder { private final EvictionConfigurationBuilder builder = new ConfigurationBuilder().eviction(); + private final ValueDependency persistence; + + private volatile EvictionStrategy strategy; EvictionBuilder(PathAddress cacheAddress) { super(CacheComponent.EVICTION, cacheAddress); + this.persistence = new InjectedValueDependency<>(CacheComponent.PERSISTENCE.getServiceName(cacheAddress), PersistenceConfiguration.class); + } + + @Override + public ServiceBuilder build(ServiceTarget target) { + return this.persistence.register(super.build(target)); } @Override public Builder configure(OperationContext context, ModelNode model) throws OperationFailedException { - EvictionStrategy strategy = ModelNodes.asEnum(STRATEGY.resolveModelAttribute(context, model), EvictionStrategy.class); - this.builder.strategy(strategy); - if (strategy.isEnabled()) { + this.strategy = ModelNodes.asEnum(STRATEGY.resolveModelAttribute(context, model), EvictionStrategy.class); + if (this.strategy.isEnabled()) { this.builder.type(EvictionType.COUNT).size(MAX_ENTRIES.resolveModelAttribute(context, model).asLong()); } return this; @@ -61,6 +74,10 @@ public Builder configure(OperationContext context, ModelN @Override public EvictionConfiguration getValue() { - return this.builder.create(); + if ((this.strategy == EvictionStrategy.NONE) && this.persistence.getValue().passivation()) { + // When passivation is enabled, convert NONE to MANUAL, which silences log WARNs on cache configuration validation + this.strategy = EvictionStrategy.MANUAL; + } + return this.builder.strategy(this.strategy).create(); } } diff --git a/clustering/infinispan/extension/src/main/java/org/jboss/as/clustering/infinispan/subsystem/EvictionResourceDefinition.java b/clustering/infinispan/extension/src/main/java/org/jboss/as/clustering/infinispan/subsystem/EvictionResourceDefinition.java index 2d170ceedf08..0739d025e116 100644 --- a/clustering/infinispan/extension/src/main/java/org/jboss/as/clustering/infinispan/subsystem/EvictionResourceDefinition.java +++ b/clustering/infinispan/extension/src/main/java/org/jboss/as/clustering/infinispan/subsystem/EvictionResourceDefinition.java @@ -22,6 +22,8 @@ package org.jboss.as.clustering.infinispan.subsystem; +import java.util.EnumSet; + import org.infinispan.eviction.EvictionStrategy; import org.jboss.as.clustering.controller.MetricHandler; import org.jboss.as.clustering.controller.ResourceDescriptor; @@ -59,7 +61,7 @@ public class EvictionResourceDefinition extends ComponentResourceDefinition { static final PathElement LEGACY_PATH = PathElement.pathElement(PATH.getValue(), "EVICTION"); enum Attribute implements org.jboss.as.clustering.controller.Attribute { - STRATEGY("strategy", ModelType.STRING, new ModelNode(EvictionStrategy.NONE.name()), new EnumValidatorBuilder<>(EvictionStrategy.class)), + STRATEGY("strategy", ModelType.STRING, new ModelNode(EvictionStrategy.NONE.name()), new EnumValidatorBuilder<>(EvictionStrategy.class, EnumSet.complementOf(EnumSet.of(EvictionStrategy.MANUAL)))), MAX_ENTRIES("max-entries", ModelType.LONG, new ModelNode(-1L)), ; private final AttributeDefinition definition;