ARTEMIS-305 - fixing colocated configuration can have mismatch of policies

https://issues.apache.org/jira/browse/ARTEMIS-305


Project: http://git-wip-us.apache.org/repos/asf/activemq-artemis/repo
Commit: http://git-wip-us.apache.org/repos/asf/activemq-artemis/commit/b34ee871
Tree: http://git-wip-us.apache.org/repos/asf/activemq-artemis/tree/b34ee871
Diff: http://git-wip-us.apache.org/repos/asf/activemq-artemis/diff/b34ee871

Branch: refs/heads/master
Commit: b34ee8717f24448900cf89811e9ca0a37f3882e1
Parents: db04192
Author: Andy Taylor <andy.tayl...@gmail.com>
Authored: Fri Nov 20 10:38:21 2015 +0000
Committer: Andy Taylor <andy.tayl...@gmail.com>
Committed: Wed Nov 25 09:45:39 2015 +0000

----------------------------------------------------------------------
 .../artemis/core/config/ConfigurationUtils.java | 30 ++++++++----
 .../core/server/ActiveMQMessageBundle.java      |  3 ++
 .../config/impl/HAPolicyConfigurationTest.java  | 48 ++++++++++++++++++++
 .../colocated-hapolicy-config-null-backup.xml   | 42 +++++++++++++++++
 .../colocated-hapolicy-config2-null-backup.xml  | 37 +++++++++++++++
 5 files changed, 152 insertions(+), 8 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/b34ee871/artemis-server/src/main/java/org/apache/activemq/artemis/core/config/ConfigurationUtils.java
----------------------------------------------------------------------
diff --git 
a/artemis-server/src/main/java/org/apache/activemq/artemis/core/config/ConfigurationUtils.java
 
b/artemis-server/src/main/java/org/apache/activemq/artemis/core/config/ConfigurationUtils.java
index f1bb89c..bd626a5 100644
--- 
a/artemis-server/src/main/java/org/apache/activemq/artemis/core/config/ConfigurationUtils.java
+++ 
b/artemis-server/src/main/java/org/apache/activemq/artemis/core/config/ConfigurationUtils.java
@@ -81,22 +81,36 @@ public final class ConfigurationUtils {
          case COLOCATED: {
             ColocatedPolicyConfiguration pc = (ColocatedPolicyConfiguration) 
conf;
 
-            HAPolicyConfiguration backupConf = pc.getBackupConfig();
-            BackupPolicy backupPolicy;
-            if (backupConf == null) {
-               backupPolicy = new ReplicaPolicy();
-            }
-            else {
-               backupPolicy = (BackupPolicy) getHAPolicy(backupConf);
-            }
             HAPolicyConfiguration liveConf = pc.getLiveConfig();
             HAPolicy livePolicy;
+            //if null default to colocated
             if (liveConf == null) {
                livePolicy = new ReplicatedPolicy();
             }
             else {
                livePolicy = getHAPolicy(liveConf);
             }
+            HAPolicyConfiguration backupConf = pc.getBackupConfig();
+            BackupPolicy backupPolicy;
+            if (backupConf == null) {
+               if (livePolicy instanceof ReplicatedPolicy) {
+                  backupPolicy = new ReplicaPolicy();
+               }
+               else if (livePolicy instanceof SharedStoreMasterPolicy) {
+                  backupPolicy = new SharedStoreSlavePolicy();
+               }
+               else {
+                  throw ActiveMQMessageBundle.BUNDLE.liveBackupMismatch();
+               }
+            }
+            else {
+               backupPolicy = (BackupPolicy) getHAPolicy(backupConf);
+            }
+
+            if ((livePolicy instanceof ReplicatedPolicy && !(backupPolicy 
instanceof ReplicaPolicy)) ||
+                  (livePolicy instanceof SharedStoreMasterPolicy && 
!(backupPolicy instanceof SharedStoreSlavePolicy))) {
+               throw ActiveMQMessageBundle.BUNDLE.liveBackupMismatch();
+            }
             return new ColocatedPolicy(pc.isRequestBackup(), 
pc.getBackupRequestRetries(), pc.getBackupRequestRetryInterval(), 
pc.getMaxBackups(), pc.getBackupPortOffset(), pc.getExcludedConnectors(), 
livePolicy, backupPolicy);
          }
 

http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/b34ee871/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/ActiveMQMessageBundle.java
----------------------------------------------------------------------
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 a08a1f4..a46d240 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
@@ -362,4 +362,7 @@ public interface ActiveMQMessageBundle {
 
    @Message(id = 119114, value = "Replication synchronization process timed 
out after waiting {0} milliseconds", format = Message.Format.MESSAGE_FORMAT)
    IllegalStateException replicationSynchronizationTimeout(long timeout);
+
+   @Message(id = 119115, value = "Colocated Policy hasn't different type live 
and backup", format = Message.Format.MESSAGE_FORMAT)
+   ActiveMQIllegalStateException liveBackupMismatch();
 }

http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/b34ee871/artemis-server/src/test/java/org/apache/activemq/artemis/core/config/impl/HAPolicyConfigurationTest.java
----------------------------------------------------------------------
diff --git 
a/artemis-server/src/test/java/org/apache/activemq/artemis/core/config/impl/HAPolicyConfigurationTest.java
 
b/artemis-server/src/test/java/org/apache/activemq/artemis/core/config/impl/HAPolicyConfigurationTest.java
index 7fd25f1..59019dd 100644
--- 
a/artemis-server/src/test/java/org/apache/activemq/artemis/core/config/impl/HAPolicyConfigurationTest.java
+++ 
b/artemis-server/src/test/java/org/apache/activemq/artemis/core/config/impl/HAPolicyConfigurationTest.java
@@ -334,6 +334,31 @@ public class HAPolicyConfigurationTest extends 
ActiveMQTestBase {
    }
 
    @Test
+   public void colocatedTestNullBackup() throws Exception {
+      Configuration configuration = 
createConfiguration("colocated-hapolicy-config-null-backup.xml");
+      ActiveMQServerImpl server = new ActiveMQServerImpl(configuration);
+      try {
+         server.start();
+         Activation activation = server.getActivation();
+         assertTrue(activation instanceof ColocatedActivation);
+         HAPolicy haPolicy = server.getHAPolicy();
+         assertTrue(haPolicy instanceof ColocatedPolicy);
+         ColocatedPolicy colocatedPolicy = (ColocatedPolicy) haPolicy;
+         ReplicatedPolicy livePolicy = (ReplicatedPolicy) 
colocatedPolicy.getLivePolicy();
+         assertNotNull(livePolicy);
+
+         assertEquals(livePolicy.getGroupName(), "purple");
+         assertTrue(livePolicy.isCheckForLiveServer());
+         assertEquals(livePolicy.getClusterName(), "abcdefg");
+         ReplicaPolicy backupPolicy = (ReplicaPolicy) 
colocatedPolicy.getBackupPolicy();
+         assertNotNull(backupPolicy);
+      }
+      finally {
+         server.stop();
+      }
+   }
+
+   @Test
    public void colocatedTest2() throws Exception {
       Configuration configuration = 
createConfiguration("colocated-hapolicy-config2.xml");
       ActiveMQServerImpl server = new ActiveMQServerImpl(configuration);
@@ -358,6 +383,29 @@ public class HAPolicyConfigurationTest extends 
ActiveMQTestBase {
       }
    }
 
+   @Test
+   public void colocatedTest2nullbackup() throws Exception {
+      Configuration configuration = 
createConfiguration("colocated-hapolicy-config2-null-backup.xml");
+      ActiveMQServerImpl server = new ActiveMQServerImpl(configuration);
+      try {
+         server.start();
+         Activation activation = server.getActivation();
+         assertTrue(activation instanceof ColocatedActivation);
+         HAPolicy haPolicy = server.getHAPolicy();
+         assertTrue(haPolicy instanceof ColocatedPolicy);
+         ColocatedPolicy colocatedPolicy = (ColocatedPolicy) haPolicy;
+         SharedStoreMasterPolicy livePolicy = (SharedStoreMasterPolicy) 
colocatedPolicy.getLivePolicy();
+         assertNotNull(livePolicy);
+
+         assertFalse(livePolicy.isFailoverOnServerShutdown());
+         SharedStoreSlavePolicy backupPolicy = (SharedStoreSlavePolicy) 
colocatedPolicy.getBackupPolicy();
+         assertNotNull(backupPolicy);
+      }
+      finally {
+         server.stop();
+      }
+   }
+
    private void liveOnlyTest(String file) throws Exception {
       Configuration configuration = createConfiguration(file);
       ActiveMQServerImpl server = new ActiveMQServerImpl(configuration);

http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/b34ee871/artemis-server/src/test/resources/colocated-hapolicy-config-null-backup.xml
----------------------------------------------------------------------
diff --git 
a/artemis-server/src/test/resources/colocated-hapolicy-config-null-backup.xml 
b/artemis-server/src/test/resources/colocated-hapolicy-config-null-backup.xml
new file mode 100644
index 0000000..5b6b6d5
--- /dev/null
+++ 
b/artemis-server/src/test/resources/colocated-hapolicy-config-null-backup.xml
@@ -0,0 +1,42 @@
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one or more
+  contributor license agreements.  See the NOTICE file distributed with
+  this work for additional information regarding copyright ownership.
+  The ASF licenses this file to You under the Apache License, Version 2.0
+  (the "License"); you may not use this file except in compliance with
+  the License.  You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+-->
+<configuration
+      xmlns="urn:activemq"
+      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
+      xsi:schemaLocation="urn:activemq 
../../../../activemq-server/src/main/resources/schema/artemis-server.xsd">
+   <core xmlns="urn:activemq:core">
+      <discovery-groups>
+         <discovery-group name="wahey"/>
+      </discovery-groups>
+      <ha-policy>
+         <replication>
+            <colocated>
+               <backup-request-retries>44</backup-request-retries>
+               
<backup-request-retry-interval>33</backup-request-retry-interval>
+               <max-backups>3</max-backups>
+               <request-backup>false</request-backup>
+               <backup-port-offset>33</backup-port-offset>
+               <master>
+                  <group-name>purple</group-name>
+                  <check-for-live-server>true</check-for-live-server>
+                  <cluster-name>abcdefg</cluster-name>
+               </master>
+            </colocated>
+         </replication>
+      </ha-policy>
+   </core>
+</configuration>

http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/b34ee871/artemis-server/src/test/resources/colocated-hapolicy-config2-null-backup.xml
----------------------------------------------------------------------
diff --git 
a/artemis-server/src/test/resources/colocated-hapolicy-config2-null-backup.xml 
b/artemis-server/src/test/resources/colocated-hapolicy-config2-null-backup.xml
new file mode 100644
index 0000000..e420033
--- /dev/null
+++ 
b/artemis-server/src/test/resources/colocated-hapolicy-config2-null-backup.xml
@@ -0,0 +1,37 @@
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one or more
+  contributor license agreements.  See the NOTICE file distributed with
+  this work for additional information regarding copyright ownership.
+  The ASF licenses this file to You under the Apache License, Version 2.0
+  (the "License"); you may not use this file except in compliance with
+  the License.  You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+-->
+<configuration
+      xmlns="urn:activemq"
+      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
+      xsi:schemaLocation="urn:activemq 
../../../../activemq-server/src/main/resources/schema/artemis-server.xsd">
+   <core xmlns="urn:activemq:core">
+      <ha-policy>
+         <shared-store>
+            <colocated>
+               <backup-request-retries>44</backup-request-retries>
+               
<backup-request-retry-interval>33</backup-request-retry-interval>
+               <max-backups>3</max-backups>
+               <request-backup>false</request-backup>
+               <backup-port-offset>33</backup-port-offset>
+               <master>
+                  <failover-on-shutdown>false</failover-on-shutdown>
+               </master>
+            </colocated>
+         </shared-store>
+      </ha-policy>
+   </core>
+</configuration>

Reply via email to