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

dahn pushed a commit to branch revert-3313-simulator-ha-routers
in repository https://gitbox.apache.org/repos/asf/cloudstack.git

commit a674723662cff06585362db76c008d852dd65e73
Author: dahn <daan.hoogl...@gmail.com>
AuthorDate: Tue Jan 7 09:53:47 2020 +0100

    Revert "Simulator: Better VR Redundant Status Behaviour (#3313)"
    
    This reverts commit d868cd1d6a8432fdeb61c7d920b3d9cbecefd824.
---
 .../com/cloud/agent/manager/MockVmManagerImpl.java | 243 ++++-----------------
 1 file changed, 44 insertions(+), 199 deletions(-)

diff --git 
a/plugins/hypervisors/simulator/src/main/java/com/cloud/agent/manager/MockVmManagerImpl.java
 
b/plugins/hypervisors/simulator/src/main/java/com/cloud/agent/manager/MockVmManagerImpl.java
index 3d0200f..6eaf09c 100644
--- 
a/plugins/hypervisors/simulator/src/main/java/com/cloud/agent/manager/MockVmManagerImpl.java
+++ 
b/plugins/hypervisors/simulator/src/main/java/com/cloud/agent/manager/MockVmManagerImpl.java
@@ -16,7 +16,6 @@
 // under the License.
 package com.cloud.agent.manager;
 
-import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -76,8 +75,7 @@ import com.cloud.agent.api.routing.VmDataCommand;
 import com.cloud.agent.api.to.NicTO;
 import com.cloud.agent.api.to.VirtualMachineTO;
 import com.cloud.network.Networks.TrafficType;
-import com.cloud.network.dao.NetworkDao;
-import com.cloud.network.router.VirtualRouter.Role;
+import com.cloud.network.router.VirtualRouter;
 import com.cloud.simulator.MockHost;
 import com.cloud.simulator.MockSecurityRulesVO;
 import com.cloud.simulator.MockVMVO;
@@ -88,14 +86,9 @@ import com.cloud.simulator.dao.MockVMDao;
 import com.cloud.utils.Pair;
 import com.cloud.utils.Ternary;
 import com.cloud.utils.component.ManagerBase;
-import com.cloud.utils.db.SearchBuilder;
-import com.cloud.utils.db.SearchCriteria;
 import com.cloud.utils.db.TransactionLegacy;
-import com.cloud.utils.db.SearchCriteria.Func;
 import com.cloud.utils.exception.CloudRuntimeException;
-import com.cloud.vm.DomainRouterVO;
 import com.cloud.vm.VirtualMachine.PowerState;
-import com.cloud.vm.dao.DomainRouterDao;
 
 @Component
 public class MockVmManagerImpl extends ManagerBase implements MockVmManager {
@@ -109,10 +102,6 @@ public class MockVmManagerImpl extends ManagerBase 
implements MockVmManager {
     MockHostDao _mockHostDao = null;
     @Inject
     MockSecurityRulesDao _mockSecurityDao = null;
-    @Inject
-    DomainRouterDao _routerDao = null;
-    @Inject
-    NetworkDao _networkDao = null;
     private final Map<String, Map<String, Ternary<String, Long, Long>>> 
_securityRules = new ConcurrentHashMap<String, Map<String, Ternary<String, 
Long, Long>>>();
 
     public MockVmManagerImpl() {
@@ -201,51 +190,44 @@ public class MockVmManagerImpl extends ManagerBase 
implements MockVmManager {
             }
         }
 
-        if (vm.getPowerState() == PowerState.PowerOn) {
+        if (vm.getPowerState() == PowerState.PowerOn && 
vmName.startsWith("s-")) {
+            String prvIp = null;
+            String prvMac = null;
+            String prvNetMask = null;
 
-            if (vmName.startsWith("s-")) {
-                String prvIp = null;
-                String prvMac = null;
-                String prvNetMask = null;
-
-                for (final NicTO nic : nics) {
-                    if (nic.getType() == TrafficType.Management) {
-                        prvIp = nic.getIp();
-                        prvMac = nic.getMac();
-                        prvNetMask = nic.getNetmask();
-                    }
+            for (final NicTO nic : nics) {
+                if (nic.getType() == TrafficType.Management) {
+                    prvIp = nic.getIp();
+                    prvMac = nic.getMac();
+                    prvNetMask = nic.getNetmask();
                 }
-                long dcId = 0;
-                long podId = 0;
-                String name = null;
-                String vmType = null;
-                String url = null;
-                final String[] args = bootArgs.trim().split(" ");
-                for (final String arg : args) {
-                    final String[] params = arg.split("=");
-                    if (params.length < 1) {
-                        continue;
-                    }
-
-                    if (params[0].equalsIgnoreCase("zone")) {
-                        dcId = Long.parseLong(params[1]);
-                    } else if (params[0].equalsIgnoreCase("name")) {
-                        name = params[1];
-                    } else if (params[0].equalsIgnoreCase("type")) {
-                        vmType = params[1];
-                    } else if (params[0].equalsIgnoreCase("url")) {
-                        url = params[1];
-                    } else if (params[0].equalsIgnoreCase("pod")) {
-                        podId = Long.parseLong(params[1]);
-                    }
+            }
+            long dcId = 0;
+            long podId = 0;
+            String name = null;
+            String vmType = null;
+            String url = null;
+            final String[] args = bootArgs.trim().split(" ");
+            for (final String arg : args) {
+                final String[] params = arg.split("=");
+                if (params.length < 1) {
+                    continue;
                 }
 
-                _mockAgentMgr.handleSystemVMStart(vm.getId(), prvIp, prvMac, 
prvNetMask, dcId, podId, name, vmType, url);
+                if (params[0].equalsIgnoreCase("zone")) {
+                    dcId = Long.parseLong(params[1]);
+                } else if (params[0].equalsIgnoreCase("name")) {
+                    name = params[1];
+                } else if (params[0].equalsIgnoreCase("type")) {
+                    vmType = params[1];
+                } else if (params[0].equalsIgnoreCase("url")) {
+                    url = params[1];
+                } else if (params[0].equalsIgnoreCase("pod")) {
+                    podId = Long.parseLong(params[1]);
+                }
             }
 
-            if (vmName.startsWith("r-") && 
bootArgs.indexOf("redundant_router=1") > 0) {
-                handleRouterStartStop(vmName, true);
-            }
+            _mockAgentMgr.handleSystemVMStart(vm.getId(), prvIp, prvMac, 
prvNetMask, dcId, podId, name, vmType, url);
         }
 
         return null;
@@ -278,14 +260,17 @@ public class MockVmManagerImpl extends ManagerBase 
implements MockVmManager {
         final String router_name = 
cmd.getAccessDetail(NetworkElementCommand.ROUTER_NAME);
         final MockVm vm = _mockVmDao.findByVmName(router_name);
         final String args = vm.getBootargs();
-
-        String state = "UNKNOWN";
-        if (args.indexOf("redundant_router=1") > 0) {
-            state = getRedundantState(vm);
+        if (args.indexOf("router_pr=100") > 0) {
+            s_logger.debug("Router priority is for MASTER");
+            final CheckRouterAnswer ans = new CheckRouterAnswer(cmd, "Status: 
MASTER", true);
+            ans.setState(VirtualRouter.RedundantState.MASTER);
+            return ans;
+        } else {
+            s_logger.debug("Router priority is for BACKUP");
+            final CheckRouterAnswer ans = new CheckRouterAnswer(cmd, "Status: 
BACKUP", true);
+            ans.setState(VirtualRouter.RedundantState.BACKUP);
+            return ans;
         }
-
-        final CheckRouterAnswer ans = new CheckRouterAnswer(cmd, "Status: " + 
state, true);
-        return ans;
     }
 
     @Override
@@ -527,10 +512,10 @@ public class MockVmManagerImpl extends ManagerBase 
implements MockVmManager {
 
     @Override
     public StopAnswer stopVM(final StopCommand cmd) {
-        final String vmName = cmd.getVmName();
         TransactionLegacy txn = 
TransactionLegacy.open(TransactionLegacy.SIMULATOR_DB);
         try {
             txn.start();
+            final String vmName = cmd.getVmName();
             final MockVm vm = _mockVmDao.findByVmName(vmName);
             if (vm != null) {
                 vm.setPowerState(PowerState.PowerOff);
@@ -540,16 +525,7 @@ public class MockVmManagerImpl extends ManagerBase 
implements MockVmManager {
             if (vmName.startsWith("s-")) {
                 _mockAgentMgr.handleSystemVMStop(vm.getId());
             }
-
             txn.commit();
-            txn.close();
-            txn = TransactionLegacy.open(TransactionLegacy.CLOUD_DB);
-            txn.close();
-
-            if (vmName.startsWith("r-")) {
-                handleRouterStartStop(vmName, false);
-            }
-
             return new StopAnswer(cmd, null, true);
         } catch (final Exception ex) {
             txn.rollback();
@@ -563,13 +539,6 @@ public class MockVmManagerImpl extends ManagerBase 
implements MockVmManager {
 
     @Override
     public RebootAnswer rebootVM(final RebootCommand cmd) {
-
-        String vmName = cmd.getVmName();
-        if (vmName.startsWith("r-")) {
-            handleRouterStartStop(vmName, false);
-            handleRouterStartStop(vmName, true);
-        }
-
         return new RebootAnswer(cmd, "Rebooted " + cmd.getVmName(), true);
     }
 
@@ -685,128 +654,4 @@ public class MockVmManagerImpl extends ManagerBase 
implements MockVmManager {
     public Answer fence(final FenceCommand cmd) {
         return new FenceAnswer(cmd);
     }
-
-    private void handleRouterStartStop(String vrName, Boolean start) {
-        SearchBuilder<DomainRouterVO> sb = _routerDao.createSearchBuilder();
-        sb.select(null, Func.DISTINCT, sb.entity().getId());
-        sb.and("name", sb.entity().getInstanceName(), SearchCriteria.Op.EQ);
-        SearchCriteria<DomainRouterVO> sc = sb.create();
-        sc.setParameters("name", vrName);
-
-        DomainRouterVO router = _routerDao.findOneBy(sc);
-        List<Long> networkIds = _routerDao.getRouterNetworks(router.getId());
-        if (networkIds.size() == 0) {
-            throw new CloudRuntimeException("Could not find a network for VR " 
+ vrName);
-        }
-
-        List<MockVm> vrs = getMockRouters(networkIds.get(0));
-        MockVm vm = vrs.stream().filter(v -> 
v.getName().equalsIgnoreCase(vrName)).findFirst().get();
-        String currentRedundantState = getRedundantState(vm);
-
-        if (start) {
-            // If no master found, make us the master
-            Boolean foundMaster = vrs.stream()
-                .filter(v -> !v.getName().equals(vrName)
-                    && v.getPowerState() == PowerState.PowerOn
-                    && getRedundantState(v).equalsIgnoreCase("MASTER"))
-                .findFirst()
-                .isPresent();
-
-            if (!foundMaster) {
-                if (!currentRedundantState.equalsIgnoreCase("MASTER")) {
-                    // There are no MASTER routers on this network - make this 
master instead
-                    updateRedundantState(vm, "MASTER");
-                    s_logger.debug("Promoted " + vm.getName() + " to MASTER");
-                }
-            } else if (!currentRedundantState.equals("BACKUP")) {
-                updateRedundantState(vm, "BACKUP");
-                s_logger.debug("Demoted " + vm.getName() + " to BACKUP");
-            }
-
-        } else {
-            // If we were master, make someone else
-            if (currentRedundantState.equals("MASTER")) {
-                // Need to make something else master..
-                MockVm backupVr = vrs.stream()
-                    .filter(v -> !v.getName().equals(vrName)
-                        && v.getPowerState() == PowerState.PowerOn
-                        && getRedundantState(v).equalsIgnoreCase("BACKUP"))
-                    .findFirst()
-                    .orElse(null);
-                if (backupVr != null) {
-                    updateRedundantState(backupVr, "MASTER");
-                    s_logger.debug("Promoted " + backupVr.getName() + " to 
MASTER");
-                }
-                updateRedundantState(vm, "BACKUP");
-                s_logger.debug("Demoted " + vm.getName() + " to BACKUP");
-            }
-        }
-    }
-
-    private List<MockVm> getMockRouters(Long networkId) {
-
-        List<DomainRouterVO> routers = 
_routerDao.listByNetworkAndRole(networkId, Role.VIRTUAL_ROUTER);
-        if (routers.size() == 0) {
-            throw new CloudRuntimeException("Didn't find any Virtual Routers 
on " + networkId);
-        }
-
-        ArrayList<MockVm> vrs = new ArrayList<MockVm>();
-        TransactionLegacy txn = 
TransactionLegacy.open(TransactionLegacy.SIMULATOR_DB);
-        try {
-            txn.close();
-
-            for (final DomainRouterVO router : routers) {
-                MockVm v = _mockVmDao.findByVmName(router.getInstanceName());
-                if (v != null) {
-                    vrs.add(v);
-                }
-            }
-        } finally {
-            txn = TransactionLegacy.open(TransactionLegacy.CLOUD_DB);
-            txn.close();
-        }
-
-        return vrs;
-    }
-
-    private String getRedundantState(MockVm vm) {
-        String state = "UNKNOWN";
-        for (final String arg : vm.getBootargs().trim().split(" ")) {
-            final String[] params = arg.split("=");
-            if (params.length < 1) {
-                continue;
-            }
-            if (params[0].equalsIgnoreCase("redundant_state")) {
-                state = params[1];
-            }
-        }
-        return state;
-    }
-
-    private void updateRedundantState(MockVm vm, String newState) {
-        // Replace the current state
-        ArrayList<String> args = new ArrayList<String>();
-        for (final String arg : vm.getBootargs().trim().split(" ")) {
-            if (arg.startsWith("redundant_state=")) {
-                args.add("redundant_state=" + newState);
-            } else {
-                args.add(arg);
-            }
-        }
-        vm.setBootargs(" " + String.join(" ", args));
-
-        TransactionLegacy txn = 
TransactionLegacy.open(TransactionLegacy.SIMULATOR_DB);
-        try {
-            txn.start();
-            _mockVmDao.update(vm.getId(), (MockVMVO)vm);
-            txn.commit();
-        } catch (final Exception ex) {
-            txn.rollback();
-            throw new CloudRuntimeException("unable to update vm " + 
vm.getName(), ex);
-        } finally {
-            txn.close();
-            txn = TransactionLegacy.open(TransactionLegacy.CLOUD_DB);
-            txn.close();
-        }
-    }
 }

Reply via email to