Merge "Change pool manager cache driver"

This commit is contained in:
Zuul 2018-02-16 08:17:10 +00:00 committed by Gerrit Code Review
commit f761fd5611
4 changed files with 41 additions and 2 deletions

View File

@ -548,3 +548,13 @@ class DesignateCharm(openstack_charm.HAOpenStackCharm):
return 'blocked', ('Need either a dns-backend relation or '
'config(dns-slaves) or both.')
return None, None
def pool_manager_cache_sync_done(self):
return hookenv.leader_get(attribute='pool-manager-cache-sync-done')
def pool_manager_cache_sync(self):
if not self.pool_manager_cache_sync_done() and hookenv.is_leader():
sync_cmd = "designate-manage pool-manager-cache sync"
subprocess.check_call(sync_cmd.split(), timeout=60)
hookenv.leader_set({'pool-manager-cache-sync-done': True})
self.restart_all()

View File

@ -73,6 +73,7 @@ def install_packages():
reactive.remove_state('shared-db.setup')
reactive.remove_state('base-config.rendered')
reactive.remove_state('db.synched')
reactive.remove_state('pool-manager-cache.synched')
@reactive.when('amqp.connected')
@ -146,6 +147,16 @@ def run_db_migration(*args):
reactive.set_state('db.synched')
@reactive.when_not('pool-manager-cache.synched')
@reactive.when('base-config.rendered')
@reactive.when(*COMPLETE_INTERFACE_STATES)
def sync_pool_manager_cache(*args):
with provide_charm_instance() as instance:
instance.pool_manager_cache_sync()
if instance.pool_manager_cache_sync_done():
reactive.set_state('pool-manager-cache.synched')
@reactive.when('cluster.available')
def update_peers(cluster):
"""Inform designate peers about this unit"""
@ -156,6 +167,7 @@ def update_peers(cluster):
@reactive.when('db.synched')
@reactive.when('pool-manager-cache.synched')
@reactive.when(*COMPLETE_INTERFACE_STATES)
def configure_designate_full(*args):
"""Write out all designate config include bootstrap domain info"""

View File

@ -274,7 +274,7 @@ pool_id = 794ccc2c-d751-44fe-b57f-8894c9f5c842
#periodic_sync_seconds = None
# The cache driver to use
#cache_driver = memcache
cache_driver = sqlalchemy
###################################
## Pool Manager Cache Configuration

View File

@ -30,9 +30,12 @@ class TestRegisteredHooks(test_utils.TestRegisteredHooks):
'create_servers_and_domains': (
all_interfaces + ('base-config.rendered', 'db.synched')),
'configure_designate_full': (
all_interfaces + ('db.synched', )),
all_interfaces + (
'db.synched', 'pool-manager-cache.synched')),
'run_db_migration': (
all_interfaces + ('base-config.rendered', )),
'sync_pool_manager_cache': (
all_interfaces + ('base-config.rendered', )),
'configure_designate_basic': all_interfaces,
'expose_endpoint': ('dnsaas.connected', ),
},
@ -41,6 +44,7 @@ class TestRegisteredHooks(test_utils.TestRegisteredHooks):
'setup_database': ('shared-db.setup', ),
'install_packages': ('installed', ),
'run_db_migration': ('db.synched', ),
'sync_pool_manager_cache': ('pool-manager-cache.synched', ),
'configure_designate_basic': ('base-config.rendered', ),
'create_servers_and_domains': ('domains.created', ),
'run_assess_status_on_every_hook': (
@ -150,6 +154,19 @@ class TestHandlers(test_utils.PatchHelper):
the_charm.db_sync.assert_called_once_with()
self.set_state.assert_called_once_with('db.synched')
def test_sync_pool_manager_cache(self):
the_charm = self._patch_provide_charm_instance()
self.patch_object(handlers.reactive, 'set_state')
the_charm.pool_manager_cache_sync_done.return_value = False
handlers.sync_pool_manager_cache('arg1', 'arg2')
the_charm.pool_manager_cache_sync.assert_called_once_with()
self.assertFalse(self.set_state.called)
the_charm.pool_manager_cache_sync.reset_mock()
the_charm.pool_manager_cache_sync_done.return_value = True
handlers.sync_pool_manager_cache('arg1', 'arg2')
the_charm.pool_manager_cache_sync.assert_called_once_with()
self.set_state.assert_called_once_with('pool-manager-cache.synched')
def test_update_peers(self):
the_charm = self._patch_provide_charm_instance()
handlers.update_peers('cluster')