CLOUDSTACK-8952 - Do not restart conntrackd unless it's needed

- With the keepalived fixed they should not be needed anymore. So first reducing them drasticaly
   - I am now making a backup of the template file, write to the template file and compare it with the existing configuration
   - The template file is recovered afer the process
   - I also check if the process is running
   - I fixed a bug in the compare method
   - I am now updating the configuration variable once the file content is flushed to disk
This commit is contained in:
Wilder Rodrigues 2015-10-14 14:24:11 +02:00
parent 5a216056b5
commit b4920aa028
4 changed files with 18 additions and 17 deletions

View File

@ -64,6 +64,9 @@ class CsFile:
handle.write(line) handle.write(line)
handle.close() handle.close()
logging.info("Wrote edited file %s" % self.filename) logging.info("Wrote edited file %s" % self.filename)
self.config = list(self.new_config)
logging.info("Updated file in-cache configuration")
def dump(self): def dump(self):
for line in self.new_config: for line in self.new_config:
@ -160,4 +163,6 @@ class CsFile:
def compare(self, o): def compare(self, o):
return (isinstance(o, self.__class__) and set(self.config) == set(o.new_config)) result = (isinstance(o, self.__class__) and set(self.config) == set(o.config))
logging.debug("Comparison of CsFiles content is ==> %s" % result)
return result

View File

@ -17,7 +17,6 @@
import logging import logging
import os.path import os.path
import re import re
import shutil
from cs.CsDatabag import CsDataBag from cs.CsDatabag import CsDataBag
from CsProcess import CsProcess from CsProcess import CsProcess
from CsFile import CsFile from CsFile import CsFile
@ -37,13 +36,14 @@ class CsLoadBalancer(CsDataBag):
return return
config = self.dbag['config'][0]['configuration'] config = self.dbag['config'][0]['configuration']
file1 = CsFile(HAPROXY_CONF_T) file1 = CsFile(HAPROXY_CONF_T)
file2 = CsFile(HAPROXY_CONF_P)
file1.empty() file1.empty()
for x in config: for x in config:
[file1.append(w, -1) for w in x.split('\n')] [file1.append(w, -1) for w in x.split('\n')]
file1.commit()
file2 = CsFile(HAPROXY_CONF_P)
if not file2.compare(file1): if not file2.compare(file1):
file1.commit() CsHelper.copy(HAPROXY_CONF_T, HAPROXY_CONF_P)
shutil.copy2(HAPROXY_CONF_T, HAPROXY_CONF_P)
proc = CsProcess(['/var/run/haproxy.pid']) proc = CsProcess(['/var/run/haproxy.pid'])
if not proc.find(): if not proc.find():

View File

@ -131,9 +131,9 @@ class CsRedundant(object):
CsHelper.copy(conntrackd_template_conf, conntrackd_temp_bkp) CsHelper.copy(conntrackd_template_conf, conntrackd_temp_bkp)
connt = CsFile(conntrackd_template_conf) conntrackd_tmpl = CsFile(conntrackd_template_conf)
if guest is not None: if guest is not None:
connt.section("Multicast {", "}", [ conntrackd_tmpl.section("Multicast {", "}", [
"IPv4_address 225.0.0.50\n", "IPv4_address 225.0.0.50\n",
"Group 3780\n", "Group 3780\n",
"IPv4_interface %s\n" % guest.get_ip(), "IPv4_interface %s\n" % guest.get_ip(),
@ -141,14 +141,15 @@ class CsRedundant(object):
"SndSocketBuffer 1249280\n", "SndSocketBuffer 1249280\n",
"RcvSocketBuffer 1249280\n", "RcvSocketBuffer 1249280\n",
"Checksum on\n"]) "Checksum on\n"])
connt.section("Address Ignore {", "}", self._collect_ignore_ips()) conntrackd_tmpl.section("Address Ignore {", "}", self._collect_ignore_ips())
connt.commit() conntrackd_tmpl.commit()
conntrackd_conf = CsFile(self.CONNTRACKD_CONF) conntrackd_conf = CsFile(self.CONNTRACKD_CONF)
if not connt.compare(conntrackd_conf): is_equals = conntrackd_tmpl.compare(conntrackd_conf)
proc = CsProcess(['/etc/conntrackd/conntrackd.conf'])
if not proc.find() or not is_equals:
CsHelper.copy(conntrackd_template_conf, self.CONNTRACKD_CONF) CsHelper.copy(conntrackd_template_conf, self.CONNTRACKD_CONF)
proc = CsProcess(['/etc/conntrackd/conntrackd.conf'])
CsHelper.service("conntrackd", "restart") CsHelper.service("conntrackd", "restart")
# Restore the template file and remove the backup. # Restore the template file and remove the backup.

View File

@ -458,26 +458,22 @@ class TestVPCRedundancy(cloudstackTestCase):
self.query_routers() self.query_routers()
self.networks.append(self.create_network(self.services["network_offering"], "10.1.1.1")) self.networks.append(self.create_network(self.services["network_offering"], "10.1.1.1"))
self.networks.append(self.create_network(self.services["network_offering_no_lb"], "10.1.2.1")) self.networks.append(self.create_network(self.services["network_offering_no_lb"], "10.1.2.1"))
time.sleep(30)
self.check_master_status(2) self.check_master_status(2)
self.add_nat_rules() self.add_nat_rules()
self.do_vpc_test(False) self.do_vpc_test(False)
time.sleep(30)
self.stop_router_by_type("MASTER") self.stop_router_by_type("MASTER")
# wait for the backup router to transit to master state # wait for the backup router to transit to master state
time.sleep(30) time.sleep(10)
self.check_master_status(1) self.check_master_status(1)
self.do_vpc_test(False) self.do_vpc_test(False)
self.delete_nat_rules() self.delete_nat_rules()
time.sleep(45)
self.check_master_status(1) self.check_master_status(1)
self.do_vpc_test(True) self.do_vpc_test(True)
self.start_routers() self.start_routers()
self.add_nat_rules() self.add_nat_rules()
time.sleep(30)
self.check_master_status(2) self.check_master_status(2)
self.do_vpc_test(False) self.do_vpc_test(False)
@ -488,7 +484,6 @@ class TestVPCRedundancy(cloudstackTestCase):
self.query_routers() self.query_routers()
self.networks.append(self.create_network(self.services["network_offering"], "10.1.1.1")) self.networks.append(self.create_network(self.services["network_offering"], "10.1.1.1"))
self.networks.append(self.create_network(self.services["network_offering_no_lb"], "10.1.2.1")) self.networks.append(self.create_network(self.services["network_offering_no_lb"], "10.1.2.1"))
time.sleep(30)
self.check_master_status(2) self.check_master_status(2)
self.add_nat_rules() self.add_nat_rules()
self.do_default_routes_test() self.do_default_routes_test()