From 5b86cb12fd884a85df0aa16860bb407e02e758c7 Mon Sep 17 00:00:00 2001 From: Chiradeep Vittal Date: Tue, 4 Oct 2011 17:10:52 -0700 Subject: [PATCH] bug 11625: separate out error paths to enable fine grained error handling and cleanup status 11625: resolved fixed --- scripts/vm/hypervisor/xenserver/vmops | 26 ++++++++++++++++++++++++-- 1 file changed, 24 insertions(+), 2 deletions(-) diff --git a/scripts/vm/hypervisor/xenserver/vmops b/scripts/vm/hypervisor/xenserver/vmops index a598871858c..01cd69752a4 100755 --- a/scripts/vm/hypervisor/xenserver/vmops +++ b/scripts/vm/hypervisor/xenserver/vmops @@ -434,18 +434,40 @@ def ipset(ipsetname, proto, start, end, ips): try: util.pread2(['ipset', '-N', ipsettmp, 'iptreemap']) + except: + util.SMlog("Failed to create temp ipset, reusing old name= " + ipsettmp) + try: + util.pread2(['ipset', '-F', ipsettmp]) + except: + util.SMlog("Failed to clear old temp ipset name=" + ipsettmp) + return False + + try: for ip in ips: try: util.pread2(['ipset', '-A', ipsettmp, ip]) except CommandException, cex: if cex.reason.rfind('already in set') == -1: raise - util.pread2(['ipset', '-W', ipsettmp, ipsetname]) - util.pread2(['ipset', '-X', ipsettmp]) except: util.SMlog("Failed to program ipset " + ipsetname) + util.pread2(['ipset', '-F', ipsettmp]) + util.pread2(['ipset', '-X', ipsettmp]) + return False + + try: + util.pread2(['ipset', '-W', ipsettmp, ipsetname]) + except: + util.SMlog("Failed to swap ipset " + ipsetname) result = False + try: + util.pread2(['ipset', '-F', ipsettmp]) + util.pread2(['ipset', '-X', ipsettmp]) + except: + # if the temporary name clashes next time we'll just reuse it + util.SMlog("Failed to delete temp ipset " + ipsettmp) + return result @echo