This is an automated email from the ASF dual-hosted git repository.

clebertsuconic pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/activemq-artemis.git


The following commit(s) were added to refs/heads/main by this push:
     new 61b9753f80 ARTEMIS-4679 Config HA policy by using broker properties
61b9753f80 is described below

commit 61b9753f8070b3c81c9b86ce6abe3197b9df7d38
Author: Domenico Francesco Bruscino <[email protected]>
AuthorDate: Mon Mar 11 09:03:04 2024 +0100

    ARTEMIS-4679 Config HA policy by using broker properties
---
 .../FluentPropertyBeanIntrospectorWithIgnores.java |  46 ++--
 .../DistributedPrimitiveManagerConfiguration.java  |  20 +-
 .../core/config/ha/ReplicaPolicyConfiguration.java |   2 +-
 .../ha/SharedStorePrimaryPolicyConfiguration.java  |   2 +-
 .../core/config/impl/ConfigurationImpl.java        |  35 +++
 .../artemis/core/server/ActiveMQMessageBundle.java |   3 +
 .../core/config/impl/ConfigurationImplTest.java    | 257 +++++++++++++++++++++
 7 files changed, 342 insertions(+), 23 deletions(-)

diff --git 
a/artemis-commons/src/main/java/org/apache/activemq/artemis/utils/uri/FluentPropertyBeanIntrospectorWithIgnores.java
 
b/artemis-commons/src/main/java/org/apache/activemq/artemis/utils/uri/FluentPropertyBeanIntrospectorWithIgnores.java
index 7f90085e8f..2c7ed6cd34 100644
--- 
a/artemis-commons/src/main/java/org/apache/activemq/artemis/utils/uri/FluentPropertyBeanIntrospectorWithIgnores.java
+++ 
b/artemis-commons/src/main/java/org/apache/activemq/artemis/utils/uri/FluentPropertyBeanIntrospectorWithIgnores.java
@@ -17,6 +17,7 @@
 package org.apache.activemq.artemis.utils.uri;
 
 import java.beans.IntrospectionException;
+import java.beans.Introspector;
 import java.beans.PropertyDescriptor;
 import java.lang.reflect.Method;
 import java.util.Locale;
@@ -48,34 +49,45 @@ public class FluentPropertyBeanIntrospectorWithIgnores 
extends FluentPropertyBea
    public void introspect(IntrospectionContext icontext) throws 
IntrospectionException {
       for (Method m : icontext.getTargetClass().getMethods()) {
          if (m.getName().startsWith(getWriteMethodPrefix())) {
-            String propertyName = propertyName(m);
-            PropertyDescriptor pd = 
icontext.getPropertyDescriptor(propertyName);
-
             if (isIgnored(icontext.getTargetClass().getName(), m.getName())) {
                logger.trace("{} Ignored for {}", m.getName(), 
icontext.getTargetClass().getName());
                continue;
             }
-            try {
-               if (pd == null) {
-                  
icontext.addPropertyDescriptor(createFluentPropertyDescritor(m, propertyName));
-               } else if (pd.getWriteMethod() == null) {
-                  pd.setWriteMethod(m);
-               }
-            } catch (IntrospectionException e) {
-               logger.trace("error for property named {}", propertyName, e);
-            }
+
+            introspect(icontext, m, propertyName(m));
+            introspect(icontext, m, defaultPropertyName(m));
          }
       }
    }
 
-   private PropertyDescriptor createFluentPropertyDescritor(Method m,
-                                                            String 
propertyName) throws IntrospectionException {
-      return new PropertyDescriptor(propertyName(m), null, m);
+   private void introspect(IntrospectionContext icontext, Method writeMethod, 
String propertyName) {
+      PropertyDescriptor pd = icontext.getPropertyDescriptor(propertyName);
+
+      try {
+         if (pd == null) {
+            
icontext.addPropertyDescriptor(createFluentPropertyDescritor(writeMethod, 
propertyName));
+         } else if (pd.getWriteMethod() == null) {
+            pd.setWriteMethod(writeMethod);
+         }
+      } catch (IntrospectionException e) {
+         logger.trace("error for property named {}", propertyName, e);
+      }
+   }
+
+   private PropertyDescriptor createFluentPropertyDescritor(Method 
writeMethod, String propertyName) throws IntrospectionException {
+      return new PropertyDescriptor(propertyName, null, writeMethod);
    }
 
-   private String propertyName(Method m) {
+   private String propertyName(final Method m) {
       String methodName = 
m.getName().substring(getWriteMethodPrefix().length());
-      return (methodName.length() > 1) ? 
Character.toLowerCase(methodName.charAt(0)) + methodName.substring(1) : 
methodName.toLowerCase(Locale.ENGLISH);
+      return (methodName.length() > 1) ? 
Character.toLowerCase(methodName.charAt(0)) +
+         methodName.substring(1) : methodName.toLowerCase(Locale.ENGLISH);
    }
 
+   private String defaultPropertyName(final Method m) {
+      final String methodName = m.getName().substring(
+         getWriteMethodPrefix().length());
+      return (methodName.length() > 1) ? Introspector.decapitalize(methodName) 
: methodName
+         .toLowerCase(Locale.ENGLISH);
+   }
 }
diff --git 
a/artemis-server/src/main/java/org/apache/activemq/artemis/core/config/ha/DistributedPrimitiveManagerConfiguration.java
 
b/artemis-server/src/main/java/org/apache/activemq/artemis/core/config/ha/DistributedPrimitiveManagerConfiguration.java
index 0dc7971e92..6d2823a1fd 100644
--- 
a/artemis-server/src/main/java/org/apache/activemq/artemis/core/config/ha/DistributedPrimitiveManagerConfiguration.java
+++ 
b/artemis-server/src/main/java/org/apache/activemq/artemis/core/config/ha/DistributedPrimitiveManagerConfiguration.java
@@ -17,23 +17,35 @@
 package org.apache.activemq.artemis.core.config.ha;
 
 import java.io.Serializable;
+import java.util.HashMap;
 import java.util.Map;
 
 public class DistributedPrimitiveManagerConfiguration implements Serializable {
 
-   private final String className;
+   private String className;
    private final Map<String, String> properties;
 
+   public DistributedPrimitiveManagerConfiguration() {
+      properties = new HashMap<>();
+   }
+
    public DistributedPrimitiveManagerConfiguration(String className, 
Map<String, String> properties) {
       this.className = className;
       this.properties = properties;
    }
 
+   public String getClassName() {
+      return className;
+   }
+
+   public DistributedPrimitiveManagerConfiguration setClassName(String 
className) {
+      this.className = className;
+      return this;
+   }
+
+
    public Map<String, String> getProperties() {
       return properties;
    }
 
-   public String getClassName() {
-      return className;
-   }
 }
diff --git 
a/artemis-server/src/main/java/org/apache/activemq/artemis/core/config/ha/ReplicaPolicyConfiguration.java
 
b/artemis-server/src/main/java/org/apache/activemq/artemis/core/config/ha/ReplicaPolicyConfiguration.java
index 4bf24a7263..721771cb2f 100644
--- 
a/artemis-server/src/main/java/org/apache/activemq/artemis/core/config/ha/ReplicaPolicyConfiguration.java
+++ 
b/artemis-server/src/main/java/org/apache/activemq/artemis/core/config/ha/ReplicaPolicyConfiguration.java
@@ -137,7 +137,7 @@ public class ReplicaPolicyConfiguration implements 
HAPolicyConfiguration {
       return voteOnReplicationFailure;
    }
 
-   public void setVoteOnReplicationFailure(Boolean voteOnReplicationFailure) {
+   public void setVoteOnReplicationFailure(boolean voteOnReplicationFailure) {
       this.voteOnReplicationFailure = voteOnReplicationFailure;
    }
 
diff --git 
a/artemis-server/src/main/java/org/apache/activemq/artemis/core/config/ha/SharedStorePrimaryPolicyConfiguration.java
 
b/artemis-server/src/main/java/org/apache/activemq/artemis/core/config/ha/SharedStorePrimaryPolicyConfiguration.java
index 7fad98305f..91539ebf17 100644
--- 
a/artemis-server/src/main/java/org/apache/activemq/artemis/core/config/ha/SharedStorePrimaryPolicyConfiguration.java
+++ 
b/artemis-server/src/main/java/org/apache/activemq/artemis/core/config/ha/SharedStorePrimaryPolicyConfiguration.java
@@ -55,7 +55,7 @@ public class SharedStorePrimaryPolicyConfiguration implements 
HAPolicyConfigurat
       return waitForActivation;
    }
 
-   public SharedStorePrimaryPolicyConfiguration setWaitForActivation(Boolean 
waitForActivation) {
+   public SharedStorePrimaryPolicyConfiguration setWaitForActivation(boolean 
waitForActivation) {
       this.waitForActivation = waitForActivation;
       return this;
    }
diff --git 
a/artemis-server/src/main/java/org/apache/activemq/artemis/core/config/impl/ConfigurationImpl.java
 
b/artemis-server/src/main/java/org/apache/activemq/artemis/core/config/impl/ConfigurationImpl.java
index 7212f061c9..1e552f65a2 100644
--- 
a/artemis-server/src/main/java/org/apache/activemq/artemis/core/config/impl/ConfigurationImpl.java
+++ 
b/artemis-server/src/main/java/org/apache/activemq/artemis/core/config/impl/ConfigurationImpl.java
@@ -61,6 +61,12 @@ import 
org.apache.activemq.artemis.api.core.QueueConfiguration;
 import org.apache.activemq.artemis.api.core.SimpleString;
 import org.apache.activemq.artemis.api.core.TransportConfiguration;
 import org.apache.activemq.artemis.core.config.TransformerConfiguration;
+import org.apache.activemq.artemis.core.config.ha.ColocatedPolicyConfiguration;
+import org.apache.activemq.artemis.core.config.ha.LiveOnlyPolicyConfiguration;
+import 
org.apache.activemq.artemis.core.config.ha.ReplicationBackupPolicyConfiguration;
+import 
org.apache.activemq.artemis.core.config.ha.ReplicationPrimaryPolicyConfiguration;
+import 
org.apache.activemq.artemis.core.config.ha.SharedStoreBackupPolicyConfiguration;
+import 
org.apache.activemq.artemis.core.config.ha.SharedStorePrimaryPolicyConfiguration;
 import 
org.apache.activemq.artemis.core.config.routing.ConnectionRouterConfiguration;
 import 
org.apache.activemq.artemis.core.config.amqpBrokerConnectivity.AMQPBrokerConnectConfiguration;
 import 
org.apache.activemq.artemis.core.config.amqpBrokerConnectivity.AMQPFederationBrokerPlugin;
@@ -869,6 +875,35 @@ public class ConfigurationImpl implements Configuration, 
Serializable {
          }
       }, Long.TYPE);
 
+      beanUtils.getConvertUtils().register(new Converter() {
+         @Override
+         public <T> T convert(Class<T> type, Object value) {
+            HAPolicyConfiguration.TYPE haPolicyType =
+               HAPolicyConfiguration.TYPE.valueOf(value.toString());
+
+            switch (haPolicyType) {
+               case PRIMARY_ONLY:
+                  return (T) new LiveOnlyPolicyConfiguration();
+               case REPLICATED:
+                  return (T) new ReplicatedPolicyConfiguration();
+               case REPLICA:
+                  return (T) new ReplicaPolicyConfiguration();
+               case SHARED_STORE_PRIMARY:
+                  return (T) new SharedStorePrimaryPolicyConfiguration();
+               case SHARED_STORE_BACKUP:
+                  return (T) new SharedStoreBackupPolicyConfiguration();
+               case COLOCATED:
+                  return (T) new ColocatedPolicyConfiguration();
+               case REPLICATION_PRIMARY:
+                  return (T) 
ReplicationPrimaryPolicyConfiguration.withDefault();
+               case REPLICATION_BACKUP:
+                  return (T) 
ReplicationBackupPolicyConfiguration.withDefault();
+            }
+
+            throw 
ActiveMQMessageBundle.BUNDLE.unsupportedHAPolicyPropertyType(value.toString());
+         }
+      }, HAPolicyConfiguration.class);
+
       BeanSupport.customise(beanUtils);
 
       logger.trace("populate: bean: {} with {}", this, beanProperties);
diff --git 
a/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/ActiveMQMessageBundle.java
 
b/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/ActiveMQMessageBundle.java
index 1dc9a8b858..bf2cf7491c 100644
--- 
a/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/ActiveMQMessageBundle.java
+++ 
b/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/ActiveMQMessageBundle.java
@@ -545,4 +545,7 @@ public interface ActiveMQMessageBundle {
 
    @Message(id = 229251, value = "{} value '{}' is too long. It is {} 
characters but must be {} characters.")
    IllegalArgumentException wrongLength(String name, String val, int 
actualLength, int requiredLength);
+
+   @Message(id = 229252, value = "Invalid HAPolicy property: {}")
+   RuntimeException unsupportedHAPolicyPropertyType(String invalidHAPolicy);
 }
diff --git 
a/artemis-server/src/test/java/org/apache/activemq/artemis/core/config/impl/ConfigurationImplTest.java
 
b/artemis-server/src/test/java/org/apache/activemq/artemis/core/config/impl/ConfigurationImplTest.java
index 2e17ecc1e6..0617297150 100644
--- 
a/artemis-server/src/test/java/org/apache/activemq/artemis/core/config/impl/ConfigurationImplTest.java
+++ 
b/artemis-server/src/test/java/org/apache/activemq/artemis/core/config/impl/ConfigurationImplTest.java
@@ -42,6 +42,8 @@ import org.apache.activemq.artemis.api.core.SimpleString;
 import org.apache.activemq.artemis.api.core.TransportConfiguration;
 import org.apache.activemq.artemis.core.config.Configuration;
 import org.apache.activemq.artemis.core.config.ConfigurationUtils;
+import org.apache.activemq.artemis.core.config.HAPolicyConfiguration;
+import org.apache.activemq.artemis.core.config.ScaleDownConfiguration;
 import 
org.apache.activemq.artemis.core.config.amqpBrokerConnectivity.AMQPBrokerConnectConfiguration;
 import 
org.apache.activemq.artemis.core.config.amqpBrokerConnectivity.AMQPBrokerConnectionAddressType;
 import 
org.apache.activemq.artemis.core.config.amqpBrokerConnectivity.AMQPBrokerConnectionElement;
@@ -52,7 +54,15 @@ import 
org.apache.activemq.artemis.core.config.amqpBrokerConnectivity.AMQPMirror
 import 
org.apache.activemq.artemis.core.config.federation.FederationAddressPolicyConfiguration;
 import org.apache.activemq.artemis.core.config.federation.FederationPolicySet;
 import 
org.apache.activemq.artemis.core.config.federation.FederationQueuePolicyConfiguration;
+import org.apache.activemq.artemis.core.config.ha.ColocatedPolicyConfiguration;
+import org.apache.activemq.artemis.core.config.ha.LiveOnlyPolicyConfiguration;
 import 
org.apache.activemq.artemis.core.config.ha.PrimaryOnlyPolicyConfiguration;
+import org.apache.activemq.artemis.core.config.ha.ReplicaPolicyConfiguration;
+import 
org.apache.activemq.artemis.core.config.ha.ReplicatedPolicyConfiguration;
+import 
org.apache.activemq.artemis.core.config.ha.ReplicationBackupPolicyConfiguration;
+import 
org.apache.activemq.artemis.core.config.ha.ReplicationPrimaryPolicyConfiguration;
+import 
org.apache.activemq.artemis.core.config.ha.SharedStoreBackupPolicyConfiguration;
+import 
org.apache.activemq.artemis.core.config.ha.SharedStorePrimaryPolicyConfiguration;
 import 
org.apache.activemq.artemis.core.config.routing.ConnectionRouterConfiguration;
 import 
org.apache.activemq.artemis.core.config.storage.DatabaseStorageConfiguration;
 import org.apache.activemq.artemis.core.deployers.impl.FileConfigurationParser;
@@ -1107,6 +1117,253 @@ public class ConfigurationImplTest extends 
ServerTestBase {
       Assert.assertEquals(ComponentConfigurationRoutingType.STRIP, 
configuration.getBridgeConfigurations().get(0).getRoutingType());
    }
 
+   @Test
+   public void testLiveOnlyPolicyConfiguration() throws Throwable {
+      Properties properties = new 
ConfigurationImpl.InsertionOrderedProperties();
+      properties.put("HAPolicyConfiguration", "PRIMARY_ONLY");
+      addScaleDownConfigurationProperties(properties);
+
+      ConfigurationImpl configuration = new ConfigurationImpl();
+      configuration.parsePrefixedProperties(properties, null);
+
+      HAPolicyConfiguration haPolicyConfiguration = 
configuration.getHAPolicyConfiguration();
+      Assert.assertEquals(LiveOnlyPolicyConfiguration.class, 
haPolicyConfiguration.getClass());
+
+      
checkScaleDownConfiguration(((LiveOnlyPolicyConfiguration)haPolicyConfiguration).getScaleDownConfiguration());
+   }
+
+   @Test
+   public void testReplicatedPolicyConfiguration() throws Throwable {
+      Properties properties = new 
ConfigurationImpl.InsertionOrderedProperties();
+      properties.put("HAPolicyConfiguration", "REPLICATED");
+      properties.put("HAPolicyConfiguration.checkForActiveServer", "true");
+      properties.put("HAPolicyConfiguration.groupName", "g0");
+      properties.put("HAPolicyConfiguration.clusterName", "c0");
+      properties.put("HAPolicyConfiguration.maxSavedReplicatedJournalsSize", 
"3");
+      properties.put("HAPolicyConfiguration.voteOnReplicationFailure", "true");
+      properties.put("HAPolicyConfiguration.quorumSize", "9");
+      properties.put("HAPolicyConfiguration.voteRetries", "6");
+      properties.put("HAPolicyConfiguration.voteRetryWait", "1");
+      properties.put("HAPolicyConfiguration.quorumVoteWait", "2");
+      properties.put("HAPolicyConfiguration.retryReplicationWait", "4");
+
+      ConfigurationImpl configuration = new ConfigurationImpl();
+      configuration.parsePrefixedProperties(properties, null);
+
+      HAPolicyConfiguration haPolicyConfiguration = 
configuration.getHAPolicyConfiguration();
+      Assert.assertEquals(ReplicatedPolicyConfiguration.class, 
haPolicyConfiguration.getClass());
+
+      ReplicatedPolicyConfiguration replicatedPolicyConfiguration =
+         (ReplicatedPolicyConfiguration)haPolicyConfiguration;
+      Assert.assertEquals(true, 
replicatedPolicyConfiguration.isCheckForActiveServer());
+      Assert.assertEquals("g0", replicatedPolicyConfiguration.getGroupName());
+      Assert.assertEquals("c0", 
replicatedPolicyConfiguration.getClusterName());
+      Assert.assertEquals(3, 
replicatedPolicyConfiguration.getMaxSavedReplicatedJournalsSize());
+      Assert.assertEquals(true, 
replicatedPolicyConfiguration.getVoteOnReplicationFailure());
+      Assert.assertEquals(9, replicatedPolicyConfiguration.getQuorumSize());
+      Assert.assertEquals(6, replicatedPolicyConfiguration.getVoteRetries());
+      Assert.assertEquals(1, replicatedPolicyConfiguration.getVoteRetryWait());
+      Assert.assertEquals(2, 
replicatedPolicyConfiguration.getQuorumVoteWait());
+      Assert.assertEquals(Long.valueOf(4), 
replicatedPolicyConfiguration.getRetryReplicationWait());
+   }
+
+   @Test
+   public void testReplicaPolicyConfiguration() throws Throwable {
+      Properties properties = new 
ConfigurationImpl.InsertionOrderedProperties();
+      properties.put("HAPolicyConfiguration", "REPLICA");
+      properties.put("HAPolicyConfiguration.clusterName", "c0");
+      properties.put("HAPolicyConfiguration.maxSavedReplicatedJournalsSize", 
"3");
+      properties.put("HAPolicyConfiguration.groupName", "g0");
+      properties.put("HAPolicyConfiguration.restartBackup", "false");
+      properties.put("HAPolicyConfiguration.allowFailBack", "true");
+      properties.put("HAPolicyConfiguration.initialReplicationSyncTimeout", 
"7");
+      properties.put("HAPolicyConfiguration.voteOnReplicationFailure", "true");
+      properties.put("HAPolicyConfiguration.quorumSize", "9");
+      properties.put("HAPolicyConfiguration.voteRetries", "6");
+      properties.put("HAPolicyConfiguration.voteRetryWait", "1");
+      properties.put("HAPolicyConfiguration.quorumVoteWait", "2");
+      properties.put("HAPolicyConfiguration.retryReplicationWait", "4");
+      addScaleDownConfigurationProperties(properties);
+
+      ConfigurationImpl configuration = new ConfigurationImpl();
+      configuration.parsePrefixedProperties(properties, null);
+
+      HAPolicyConfiguration haPolicyConfiguration = 
configuration.getHAPolicyConfiguration();
+      Assert.assertEquals(ReplicaPolicyConfiguration.class, 
haPolicyConfiguration.getClass());
+
+      ReplicaPolicyConfiguration replicaPolicyConfiguration =
+         (ReplicaPolicyConfiguration)haPolicyConfiguration;
+      Assert.assertEquals("c0", replicaPolicyConfiguration.getClusterName());
+      Assert.assertEquals(3, 
replicaPolicyConfiguration.getMaxSavedReplicatedJournalsSize());
+      Assert.assertEquals("g0", replicaPolicyConfiguration.getGroupName());
+      Assert.assertEquals(false, replicaPolicyConfiguration.isRestartBackup());
+      Assert.assertEquals(true, replicaPolicyConfiguration.isAllowFailBack());
+      Assert.assertEquals(7, 
replicaPolicyConfiguration.getInitialReplicationSyncTimeout());
+      Assert.assertEquals(true, 
replicaPolicyConfiguration.getVoteOnReplicationFailure());
+      Assert.assertEquals(9, replicaPolicyConfiguration.getQuorumSize());
+      Assert.assertEquals(6, replicaPolicyConfiguration.getVoteRetries());
+      Assert.assertEquals(1, replicaPolicyConfiguration.getVoteRetryWait());
+      Assert.assertEquals(2, replicaPolicyConfiguration.getQuorumVoteWait());
+      Assert.assertEquals(4, 
replicaPolicyConfiguration.getRetryReplicationWait());
+
+      
checkScaleDownConfiguration(replicaPolicyConfiguration.getScaleDownConfiguration());
+   }
+
+   @Test
+   public void testSharedStorePrimaryConfiguration() throws Throwable {
+      Properties properties = new 
ConfigurationImpl.InsertionOrderedProperties();
+      properties.put("HAPolicyConfiguration", "SHARED_STORE_PRIMARY");
+      properties.put("HAPolicyConfiguration.failoverOnServerShutdown", "true");
+      properties.put("HAPolicyConfiguration.waitForActivation", "false");
+
+      ConfigurationImpl configuration = new ConfigurationImpl();
+      configuration.parsePrefixedProperties(properties, null);
+
+      HAPolicyConfiguration haPolicyConfiguration = 
configuration.getHAPolicyConfiguration();
+      Assert.assertEquals(SharedStorePrimaryPolicyConfiguration.class, 
haPolicyConfiguration.getClass());
+
+      SharedStorePrimaryPolicyConfiguration 
sharedStorePrimaryPolicyConfiguration =
+         (SharedStorePrimaryPolicyConfiguration)haPolicyConfiguration;
+      Assert.assertEquals(true, 
sharedStorePrimaryPolicyConfiguration.isFailoverOnServerShutdown());
+      Assert.assertEquals(false, 
sharedStorePrimaryPolicyConfiguration.isWaitForActivation());
+   }
+
+   @Test
+   public void testSharedStoreBackupPolicyConfiguration() throws Throwable {
+      Properties properties = new 
ConfigurationImpl.InsertionOrderedProperties();
+      properties.put("HAPolicyConfiguration", "SHARED_STORE_BACKUP");
+      properties.put("HAPolicyConfiguration.failoverOnServerShutdown", "true");
+      properties.put("HAPolicyConfiguration.restartBackup", "false");
+      properties.put("HAPolicyConfiguration.allowFailBack", "false");
+      addScaleDownConfigurationProperties(properties);
+
+      ConfigurationImpl configuration = new ConfigurationImpl();
+      configuration.parsePrefixedProperties(properties, null);
+
+      HAPolicyConfiguration haPolicyConfiguration = 
configuration.getHAPolicyConfiguration();
+      Assert.assertEquals(SharedStoreBackupPolicyConfiguration.class, 
haPolicyConfiguration.getClass());
+
+      SharedStoreBackupPolicyConfiguration 
sharedStoreBackupPolicyConfiguration =
+         (SharedStoreBackupPolicyConfiguration)haPolicyConfiguration;
+      Assert.assertEquals(true, 
sharedStoreBackupPolicyConfiguration.isFailoverOnServerShutdown());
+      Assert.assertEquals(false, 
sharedStoreBackupPolicyConfiguration.isRestartBackup());
+      Assert.assertEquals(false, 
sharedStoreBackupPolicyConfiguration.isAllowFailBack());
+
+      
checkScaleDownConfiguration(sharedStoreBackupPolicyConfiguration.getScaleDownConfiguration());
+   }
+
+   @Test
+   public void testColocatedPolicyConfiguration() throws Throwable {
+      Properties properties = new 
ConfigurationImpl.InsertionOrderedProperties();
+      properties.put("HAPolicyConfiguration", "COLOCATED");
+      properties.put("HAPolicyConfiguration.requestBackup", "true");
+      properties.put("HAPolicyConfiguration.backupRequestRetries", "5");
+      properties.put("HAPolicyConfiguration.backupRequestRetryInterval", "3");
+      properties.put("HAPolicyConfiguration.maxBackups", "9");
+      properties.put("HAPolicyConfiguration.backupPortOffset", "2");
+      properties.put("HAPolicyConfiguration.excludedConnectors", "a,b,c");
+      properties.put("HAPolicyConfiguration.portOffset", "4");
+      properties.put("HAPolicyConfiguration.primaryConfig", 
"SHARED_STORE_PRIMARY");
+      properties.put("HAPolicyConfiguration.backupConfig", 
"SHARED_STORE_BACKUP");
+
+      ConfigurationImpl configuration = new ConfigurationImpl();
+      configuration.parsePrefixedProperties(properties, null);
+
+      HAPolicyConfiguration haPolicyConfiguration = 
configuration.getHAPolicyConfiguration();
+      Assert.assertEquals(ColocatedPolicyConfiguration.class, 
haPolicyConfiguration.getClass());
+
+      ColocatedPolicyConfiguration colocatedPolicyConfiguration =
+         (ColocatedPolicyConfiguration)haPolicyConfiguration;
+      Assert.assertEquals(true, 
colocatedPolicyConfiguration.isRequestBackup());
+      Assert.assertEquals(5, 
colocatedPolicyConfiguration.getBackupRequestRetries());
+      Assert.assertEquals(3, 
colocatedPolicyConfiguration.getBackupRequestRetryInterval());
+      Assert.assertEquals(9, colocatedPolicyConfiguration.getMaxBackups());
+      Assert.assertEquals(2, 
colocatedPolicyConfiguration.getBackupPortOffset());
+      Assert.assertEquals(3, 
colocatedPolicyConfiguration.getExcludedConnectors().size());
+      Assert.assertEquals(4, colocatedPolicyConfiguration.getPortOffset());
+      Assert.assertEquals(SharedStorePrimaryPolicyConfiguration.class, 
colocatedPolicyConfiguration.getPrimaryConfig().getClass());
+      Assert.assertEquals(SharedStoreBackupPolicyConfiguration.class, 
colocatedPolicyConfiguration.getBackupConfig().getClass());
+   }
+
+   @Test
+   public void testReplicationPrimaryPolicyConfiguration() throws Throwable {
+      Properties properties = new 
ConfigurationImpl.InsertionOrderedProperties();
+      properties.put("HAPolicyConfiguration", "REPLICATION_PRIMARY");
+      properties.put("HAPolicyConfiguration.groupName", "g0");
+      properties.put("HAPolicyConfiguration.clusterName", "c0");
+      properties.put("HAPolicyConfiguration.initialReplicationSyncTimeout", 
"5");
+      properties.put("HAPolicyConfiguration.retryReplicationWait", "2");
+      
properties.put("HAPolicyConfiguration.distributedManagerConfiguration.className",
 "class0");
+      
properties.put("HAPolicyConfiguration.distributedManagerConfiguration.properties.k0",
 "v0");
+      properties.put("HAPolicyConfiguration.coordinationId", "cid0");
+      properties.put("HAPolicyConfiguration.maxSavedReplicatedJournalsSize", 
"3");
+
+      ConfigurationImpl configuration = new ConfigurationImpl();
+      configuration.parsePrefixedProperties(properties, null);
+
+      HAPolicyConfiguration haPolicyConfiguration = 
configuration.getHAPolicyConfiguration();
+      Assert.assertEquals(ReplicationPrimaryPolicyConfiguration.class, 
haPolicyConfiguration.getClass());
+
+      ReplicationPrimaryPolicyConfiguration 
replicationPrimaryPolicyConfiguration =
+         (ReplicationPrimaryPolicyConfiguration)haPolicyConfiguration;
+      Assert.assertEquals("g0", 
replicationPrimaryPolicyConfiguration.getGroupName());
+      Assert.assertEquals("c0", 
replicationPrimaryPolicyConfiguration.getClusterName());
+      Assert.assertEquals(5, 
replicationPrimaryPolicyConfiguration.getInitialReplicationSyncTimeout());
+      Assert.assertEquals(Long.valueOf(2), 
replicationPrimaryPolicyConfiguration.getRetryReplicationWait());
+      Assert.assertEquals("class0", 
replicationPrimaryPolicyConfiguration.getDistributedManagerConfiguration().getClassName());
+      Assert.assertEquals("v0", 
replicationPrimaryPolicyConfiguration.getDistributedManagerConfiguration().getProperties().get("k0"));
+      Assert.assertEquals("cid0", 
replicationPrimaryPolicyConfiguration.getCoordinationId());
+      Assert.assertEquals(3, 
replicationPrimaryPolicyConfiguration.getMaxSavedReplicatedJournalsSize());
+   }
+
+   @Test
+   public void testReplicationBackupPolicyConfiguration() throws Throwable {
+      Properties properties = new 
ConfigurationImpl.InsertionOrderedProperties();
+      properties.put("HAPolicyConfiguration", "REPLICATION_BACKUP");
+      properties.put("HAPolicyConfiguration.clusterName", "c0");
+      properties.put("HAPolicyConfiguration.maxSavedReplicatedJournalsSize", 
"3");
+      properties.put("HAPolicyConfiguration.groupName", "g0");
+      properties.put("HAPolicyConfiguration.allowFailBack", "true");
+      properties.put("HAPolicyConfiguration.initialReplicationSyncTimeout", 
"5");
+      properties.put("HAPolicyConfiguration.retryReplicationWait", "2");
+      
properties.put("HAPolicyConfiguration.distributedManagerConfiguration.className",
 "class0");
+      
properties.put("HAPolicyConfiguration.distributedManagerConfiguration.properties.k0",
 "v0");
+
+      ConfigurationImpl configuration = new ConfigurationImpl();
+      configuration.parsePrefixedProperties(properties, null);
+
+      HAPolicyConfiguration haPolicyConfiguration = 
configuration.getHAPolicyConfiguration();
+      Assert.assertEquals(ReplicationBackupPolicyConfiguration.class, 
haPolicyConfiguration.getClass());
+
+      ReplicationBackupPolicyConfiguration 
replicationBackupPolicyConfiguration =
+         (ReplicationBackupPolicyConfiguration)haPolicyConfiguration;
+      Assert.assertEquals("c0", 
replicationBackupPolicyConfiguration.getClusterName());
+      Assert.assertEquals(3, 
replicationBackupPolicyConfiguration.getMaxSavedReplicatedJournalsSize());
+      Assert.assertEquals("g0", 
replicationBackupPolicyConfiguration.getGroupName());
+      Assert.assertEquals(true, 
replicationBackupPolicyConfiguration.isAllowFailBack());
+      Assert.assertEquals(5, 
replicationBackupPolicyConfiguration.getInitialReplicationSyncTimeout());
+      Assert.assertEquals(2, 
replicationBackupPolicyConfiguration.getRetryReplicationWait());
+      Assert.assertEquals("class0", 
replicationBackupPolicyConfiguration.getDistributedManagerConfiguration().getClassName());
+      Assert.assertEquals("v0", 
replicationBackupPolicyConfiguration.getDistributedManagerConfiguration().getProperties().get("k0"));
+   }
+
+   private void addScaleDownConfigurationProperties(Properties properties) {
+      
properties.put("HAPolicyConfiguration.scaleDownConfiguration.connectors", 
"a,b,c");
+      
properties.put("HAPolicyConfiguration.scaleDownConfiguration.discoveryGroup", 
"dg0");
+      properties.put("HAPolicyConfiguration.scaleDownConfiguration.groupName", 
"g0");
+      
properties.put("HAPolicyConfiguration.scaleDownConfiguration.clusterName", 
"c0");
+      properties.put("HAPolicyConfiguration.scaleDownConfiguration.enabled", 
"false");
+   }
+
+   private void checkScaleDownConfiguration(ScaleDownConfiguration 
scaleDownConfiguration) {
+      Assert.assertNotNull(scaleDownConfiguration);
+      Assert.assertEquals(3, scaleDownConfiguration.getConnectors().size());
+      Assert.assertEquals("dg0", scaleDownConfiguration.getDiscoveryGroup());
+      Assert.assertEquals("g0", scaleDownConfiguration.getGroupName());
+      Assert.assertEquals("c0", scaleDownConfiguration.getClusterName());
+      Assert.assertEquals(false, scaleDownConfiguration.isEnabled());
+   }
+
    @Test
    public void testFederationUpstreamConfiguration() throws Throwable {
       ConfigurationImpl configuration = new ConfigurationImpl();

Reply via email to