Managix was overly strict in not allowing multiple instances share an IP as it can potentially cause port conflicts (all ports (except 3) are non-configurable). This changes relaxes the constraint to allow multiple instances share an IP. However the instance cannot be ACTIVE concurrently.
diff --git a/asterix-installer/src/main/java/edu/uci/ics/asterix/installer/driver/InstallerUtil.java b/asterix-installer/src/main/java/edu/uci/ics/asterix/installer/driver/InstallerUtil.java
index e62cc59..2e04bbf 100644
--- a/asterix-installer/src/main/java/edu/uci/ics/asterix/installer/driver/InstallerUtil.java
+++ b/asterix-installer/src/main/java/edu/uci/ics/asterix/installer/driver/InstallerUtil.java
@@ -247,7 +247,8 @@
         String txnLogDir = null;
         for (Node node : cluster.getNode()) {
             coredumpDir = node.getLogDir() == null ? cluster.getLogDir() : node.getLogDir();
-            coredump.add(new Coredump(asterixInstanceName + "_" + node.getId(), coredumpDir  + File.separator + asterixInstanceName +  "_"  + node.getId()));
+            coredump.add(new Coredump(asterixInstanceName + "_" + node.getId(), coredumpDir + File.separator
+                    + asterixInstanceName + "_" + node.getId()));
 
             txnLogDir = node.getTxnLogDir() == null ? cluster.getTxnLogDir() : node.getTxnLogDir();
             txnLogDirs.add(new TransactionLogDir(asterixInstanceName + "_" + node.getId(), txnLogDir));
@@ -455,17 +456,19 @@
         boolean conflictFound = false;
         AsterixInstance conflictingInstance = null;
         for (AsterixInstance existing : existingInstances) {
-            conflictFound = existing.getCluster().getMasterNode().getClusterIp().equals(masterIp);
-            if (conflictFound) {
-                conflictingInstance = existing;
-                break;
-            }
-            for (Node n : existing.getCluster().getNode()) {
-                if (usedIps.contains(n.getClusterIp())) {
-                    conflictFound = true;
+            if (!existing.getState().equals(State.INACTIVE)) {
+                conflictFound = existing.getCluster().getMasterNode().getClusterIp().equals(masterIp);
+                if (conflictFound) {
                     conflictingInstance = existing;
                     break;
                 }
+                for (Node n : existing.getCluster().getNode()) {
+                    if (usedIps.contains(n.getClusterIp())) {
+                        conflictFound = true;
+                        conflictingInstance = existing;
+                        break;
+                    }
+                }
             }
         }
         if (conflictFound) {