From 4fa95df837cccf2338aa0ae7b809354e932600ee Mon Sep 17 00:00:00 2001 From: Edison Su Date: Wed, 5 Oct 2011 14:46:24 -0700 Subject: [PATCH] bug 11463: Simulator: try to put security rule into db again, but only put seq/signature into db. Hope it will be faster. --- .../agent/manager/MockVmManagerImpl.java | 35 +++++++++++++++---- .../com/cloud/resource/AgentResourceBase.java | 1 + .../cloud/simulator/MockSecurityRulesVO.java | 11 ------ setup/db/create-schema-simulator.sql | 3 +- 4 files changed, 32 insertions(+), 18 deletions(-) diff --git a/agent-simulator/src/com/cloud/agent/manager/MockVmManagerImpl.java b/agent-simulator/src/com/cloud/agent/manager/MockVmManagerImpl.java index fa46b1536d3..ed3bb96c284 100644 --- a/agent-simulator/src/com/cloud/agent/manager/MockVmManagerImpl.java +++ b/agent-simulator/src/com/cloud/agent/manager/MockVmManagerImpl.java @@ -357,7 +357,7 @@ public class MockVmManagerImpl implements MockVmManager { if (!info.isEnabled()) { return new SecurityIngressRuleAnswer(cmd, false, "Disabled", SecurityIngressRuleAnswer.FailureReason.CANNOT_BRIDGE_FIREWALL); } - + /* Map> rules = _securityRules.get(info.getHostUuid()); if (rules == null) { @@ -368,16 +368,34 @@ public class MockVmManagerImpl implements MockVmManager { } else { logSecurityGroupAction(cmd, rules.get(cmd.getVmName())); rules.put(cmd.getVmName(), new Ternary(cmd.getSignature(), cmd.getVmId(), cmd.getSeqNum())); - } + }*/ + MockSecurityRulesVO rule = _mockSecurityDao.findByVmId(cmd.getVmId()); + if (rule == null) { + logSecurityGroupAction(cmd, null); + rule = new MockSecurityRulesVO(); + rule.setSeqNum(cmd.getSeqNum()); + rule.setSignature(cmd.getSignature()); + rule.setVmId(cmd.getVmId()); + rule.setVmName(cmd.getVmName()); + rule.setHostId(info.getHostUuid()); + rule = _mockSecurityDao.persist(rule); + } else { + boolean update = logSecurityGroupAction(cmd, rule); + if (update) { + rule.setSeqNum(cmd.getSeqNum()); + rule.setSignature(cmd.getSignature()); + _mockSecurityDao.update(rule.getId(), rule); + } + } return new SecurityIngressRuleAnswer(cmd); } - private boolean logSecurityGroupAction(SecurityIngressRulesCmd cmd, Ternary rule) { + private boolean logSecurityGroupAction(SecurityIngressRulesCmd cmd, MockSecurityRulesVO rule) { String action = ", do nothing"; String reason = ", reason="; - Long currSeqnum = rule == null? null: rule.third(); - String currSig = rule == null? null: rule.first(); + Long currSeqnum = rule == null? null: rule.getSeqNum(); + String currSig = rule == null? null: rule.getSignature(); boolean updateSeqnoAndSig = false; if (currSeqnum != null) { if (cmd.getSeqNum() > currSeqnum) { @@ -430,13 +448,18 @@ public class MockVmManagerImpl implements MockVmManager { @Override public HashMap> syncNetworkGroups(SimulatorInfo info) { HashMap> maps = new HashMap>(); - + /* Map> rules = _securityRules.get(info.getHostUuid()); if (rules == null) { return maps; } for (Map.Entry> rule : rules.entrySet()) { maps.put(rule.getKey(), new Pair(rule.getValue().second(), rule.getValue().third())); + }*/ + + List rules = _mockSecurityDao.findByHost(info.getHostUuid()); + for (MockSecurityRulesVO rule: rules) { + maps.put(rule.getVmName(), new Pair(rule.getVmId(), rule.getSeqNum())); } return maps; } diff --git a/agent-simulator/src/com/cloud/resource/AgentResourceBase.java b/agent-simulator/src/com/cloud/resource/AgentResourceBase.java index 663c2118b87..7fd43562eac 100644 --- a/agent-simulator/src/com/cloud/resource/AgentResourceBase.java +++ b/agent-simulator/src/com/cloud/resource/AgentResourceBase.java @@ -208,6 +208,7 @@ public class AgentResourceBase implements ServerResource { @Override public boolean stop() { + s_logger.debug("anget is stopped"); this.stopped = true; return true; } diff --git a/agent-simulator/src/com/cloud/simulator/MockSecurityRulesVO.java b/agent-simulator/src/com/cloud/simulator/MockSecurityRulesVO.java index 369295e48b3..d2081bd8ce5 100644 --- a/agent-simulator/src/com/cloud/simulator/MockSecurityRulesVO.java +++ b/agent-simulator/src/com/cloud/simulator/MockSecurityRulesVO.java @@ -25,9 +25,6 @@ public class MockSecurityRulesVO { @Column(name="seqnum") private Long seqNum; - @Column(name="ruleset") - private String ruleSet; - @Column(name="hostid") private String hostId; @@ -77,12 +74,4 @@ public class MockSecurityRulesVO { public void setSeqNum(Long seqNum) { this.seqNum = seqNum; } - - public String getRuleSet() { - return this.ruleSet; - } - - public void setRuleSet(String ruleset) { - this.ruleSet = ruleset; - } } diff --git a/setup/db/create-schema-simulator.sql b/setup/db/create-schema-simulator.sql index ac8f319c36d..1c54ae37dc5 100644 --- a/setup/db/create-schema-simulator.sql +++ b/setup/db/create-schema-simulator.sql @@ -95,11 +95,12 @@ CREATE TABLE `cloud`.`mocksecurityrules` ( `id` bigint unsigned NOT NULL auto_increment, `vmid` bigint unsigned, `signature` varchar(255), - `ruleset` varchar(4095), `hostid` varchar(255), `seqnum` bigint unsigned, `vmname` varchar(255), PRIMARY KEY (`id`), INDEX `i_mocksecurityrules__vmid`(`vmid`), + INDEX `i_mocksecurityrules__seqnum`(`seqnum`), + INDEX `i_mocksecurityrules__signature`(`signature`), INDEX `i_mocksecurityrules__hostid`(`hostid`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;