From 6944979f94e0001b0f1202ab2fcc7471858de013 Mon Sep 17 00:00:00 2001 From: edison Date: Wed, 10 Nov 2010 13:35:08 -0800 Subject: [PATCH] bug 7142: fix the race condition that multiple create vlan requests coming from mgt svr status 7142: resolved fixed --- .../computing/LibvirtComputingResource.java | 10 ++++++-- scripts/vm/network/vnet/modifyvlan.sh | 23 ++++++++++++++----- 2 files changed, 25 insertions(+), 8 deletions(-) mode change 100644 => 100755 scripts/vm/network/vnet/modifyvlan.sh diff --git a/agent/src/com/cloud/agent/resource/computing/LibvirtComputingResource.java b/agent/src/com/cloud/agent/resource/computing/LibvirtComputingResource.java index e997cae9dc2..ca9725d50bf 100644 --- a/agent/src/com/cloud/agent/resource/computing/LibvirtComputingResource.java +++ b/agent/src/com/cloud/agent/resource/computing/LibvirtComputingResource.java @@ -859,8 +859,14 @@ public class LibvirtComputingResource extends ServerResourceBase implements Serv boolean isDirectAttachedNetwork(String type) { if ("untagged".equalsIgnoreCase(type)) return true; - else + else { + try { + Long vnetId = Long.valueOf(type); + } catch (NumberFormatException e) { + return true; + } return false; + } } protected synchronized String startDomainRouter(StartRouterCommand cmd) { @@ -2231,7 +2237,7 @@ public class LibvirtComputingResource extends ServerResourceBase implements Serv return new MigrateAnswer(cmd, result == null, result, null); } - private Answer execute(PrepareForMigrationCommand cmd) { + private synchronized Answer execute(PrepareForMigrationCommand cmd) { final String vmName = cmd.getVmName(); String result = null; diff --git a/scripts/vm/network/vnet/modifyvlan.sh b/scripts/vm/network/vnet/modifyvlan.sh old mode 100644 new mode 100755 index 930d5218d28..9396dc60b81 --- a/scripts/vm/network/vnet/modifyvlan.sh +++ b/scripts/vm/network/vnet/modifyvlan.sh @@ -22,8 +22,12 @@ addVlan() { if [ $? -gt 0 ] then - printf "Failed to create vlan $vlanId on pif: $pif." - return 1 + # race condition that someone already creates the vlan + if [ ! -d /sys/class/net/$vlanDev ] + then + printf "Failed to create vlan $vlanId on pif: $pif." + return 1 + fi fi fi @@ -40,8 +44,11 @@ addVlan() { if [ $? -gt 0 ] then - printf "Failed to create br: $vlanBr" - return 2 + if [ ! -d /sys/class/net/$vlanBr ] + then + printf "Failed to create br: $vlanBr" + return 2 + fi fi fi @@ -52,8 +59,12 @@ addVlan() { brctl addif $vlanBr $vlanDev > /dev/null if [ $? -gt 0 ] then - printf "Failed to add vlan: $vlanDev to $vlanBr" - return 3 + ls /sys/class/net/$vlanBr/brif/ |grep -w "$vlanDev" > /dev/null + if [ $? -gt 0 ] + then + printf "Failed to add vlan: $vlanDev to $vlanBr" + return 3 + fi fi fi # is vlanBr up?