From f95082ca128a479131b8a5cca09816994b7f25ff Mon Sep 17 00:00:00 2001 From: Edison Su Date: Thu, 15 Sep 2011 10:11:26 -0700 Subject: [PATCH] fix simulator too slow when programming security rule: by don't write the rule into memory instead of database. Later on, I can choose a new db source for simulator, instead of share the same db with mgt server --- .../agent/manager/MockVmManagerImpl.java | 42 ++++++++----------- 1 file changed, 18 insertions(+), 24 deletions(-) diff --git a/agent-simulator/src/com/cloud/agent/manager/MockVmManagerImpl.java b/agent-simulator/src/com/cloud/agent/manager/MockVmManagerImpl.java index 573dff8e9e5..21a9cb1f5b3 100644 --- a/agent-simulator/src/com/cloud/agent/manager/MockVmManagerImpl.java +++ b/agent-simulator/src/com/cloud/agent/manager/MockVmManagerImpl.java @@ -7,8 +7,10 @@ package com.cloud.agent.manager; import java.util.HashMap; +import java.util.ArrayList; import java.util.List; import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; import javax.ejb.Local; import javax.naming.ConfigurationException; @@ -63,6 +65,7 @@ import com.cloud.simulator.dao.MockHostDao; import com.cloud.simulator.dao.MockSecurityRulesDao; import com.cloud.simulator.dao.MockVMDao; import com.cloud.utils.Pair; +import com.cloud.utils.Ternary; import com.cloud.utils.component.Inject; import com.cloud.vm.VirtualMachine.State; @@ -75,6 +78,7 @@ public class MockVmManagerImpl implements MockVmManager { @Inject MockAgentManager _mockAgentMgr = null; @Inject MockHostDao _mockHostDao = null; @Inject MockSecurityRulesDao _mockSecurityDao = null; + private Map>> _securityRules = new ConcurrentHashMap>>(); public MockVmManagerImpl() { } @@ -353,28 +357,14 @@ public class MockVmManagerImpl implements MockVmManager { @Override public SecurityIngressRuleAnswer AddSecurityIngressRules(SecurityIngressRulesCmd cmd, String hostGuid) { - MockVMVO vm = _mockVmDao.findByVmName(cmd.getVmName()); - if (vm == null) { - return new SecurityIngressRuleAnswer(cmd, false, "cant' find the vm: " + cmd.getVmName()); - } - boolean update = logSecurityGroupAction(cmd); - MockSecurityRulesVO rules = _mockSecurityDao.findByVmId(cmd.getVmId()); + logSecurityGroupAction(cmd); + List> rules = _securityRules.get(hostGuid); if (rules == null) { - rules = new MockSecurityRulesVO(); - rules.setRuleSet(cmd.stringifyRules()); - rules.setSeqNum(cmd.getSeqNum()); - rules.setSignature(cmd.getSignature()); - rules.setVmId(cmd.getVmId()); - rules.setHostId(hostGuid); - - _mockSecurityDao.persist(rules); - } else if (update){ - rules.setSeqNum(cmd.getSeqNum()); - rules.setSignature(cmd.getSignature()); - rules.setRuleSet(cmd.stringifyRules()); - rules.setVmId(cmd.getVmId()); - rules.setHostId(hostGuid); - _mockSecurityDao.update(rules.getId(), rules); + rules = new ArrayList>(); + rules.add(new Ternary(cmd.getVmName(), cmd.getVmId(), cmd.getSeqNum())); + _securityRules.put(hostGuid, rules); + } else { + rules.add(new Ternary(cmd.getVmName(), cmd.getVmId(), cmd.getSeqNum())); } return new SecurityIngressRuleAnswer(cmd); @@ -438,9 +428,13 @@ public class MockVmManagerImpl implements MockVmManager { @Override public HashMap> syncNetworkGroups(String hostGuid) { HashMap> maps = new HashMap>(); - List rules = _mockSecurityDao.findByHost(hostGuid); - for (MockSecurityRulesVO rule : rules) { - maps.put(rule.getVmName(), new Pair(rule.getVmId(), rule.getSeqNum())); + + List> rules = _securityRules.get(hostGuid); + if (rules == null) { + return maps; + } + for (Ternary rule : rules) { + maps.put(rule.first(), new Pair(rule.second(), rule.third())); } return maps; }