Periodic update of DNS entries.

The new DNS mechanism to resolve instance names on private network with
multi hosted mode doesn't scale.
This patch add the possibility to update the DNS entries periodically on
each network host in addition to fanout cast each time the DNS entries
need to be updated.

DocImpact: new config options
Fixes LP bug #1086026

Change-Id: I59094a29c9f5010f5e55a6f11160263337b058b2
This commit is contained in:
Édouard Thuleau 2012-12-04 17:06:23 +01:00
parent 32eb83be79
commit ae3bb03699
2 changed files with 22 additions and 0 deletions
etc/nova
nova/network

@ -920,6 +920,15 @@
# l3_lib=nova.network.l3.LinuxNetL3
#### (StrOpt) Indicates underlying L3 management library
# update_dns_entries=false
#### (BoolOpt) If True, when a DNS entry must be updated, it sends a fanout
#### cast to all network hosts to update their DNS entries in multi
#### host mode
# dns_update_periodic_interval=-1
#### (IntOpt) Number of periodic scheduler ticks to wait between runs of
#### updates to DNS entries
######## defined in nova.network.quantumv2.api ########

@ -170,6 +170,10 @@ network_opts = [
help='If True, when a DNS entry must be updated, it sends a '
'fanout cast to all network hosts to update their DNS '
'entries in multi host mode'),
cfg.IntOpt("dns_update_periodic_interval",
default=-1,
help='Number of periodic scheduler ticks to wait between '
'runs of updates to DNS entries.'),
cfg.StrOpt('dhcp_domain',
default='novalocal',
help='domain to use for building the hostnames'),
@ -1943,6 +1947,15 @@ class NetworkManager(manager.SchedulerDependentManager):
return self.db.virtual_interface_get_by_address(context,
mac_address)
@manager.periodic_task(
ticks_between_runs=CONF.dns_update_periodic_interval)
def _periodic_update_dns(self, context):
"""Update local DNS entries of all networks on this host"""
networks = self.db.network_get_all_by_host(context, self.host)
for network in networks:
dev = self.driver.get_dev(network)
self.driver.update_dns(context, dev, network)
def update_dns(self, context, network_ids):
"""Called when fixed IP is allocated or deallocated"""
if CONF.fake_network: