From b77d1d4e5502e4515d6212cc2a2083aaa27bfc3a Mon Sep 17 00:00:00 2001 From: Graham Hayes Date: Wed, 15 Feb 2017 15:50:52 +0000 Subject: Set worker model to be the default We will create new grenade gate that ensure upgrading procedures from pool-manager-->worker and pool-manager-->pool-manager by setting $DESIGNATE_ENABLED_WORKER_MODEL variable. Co-Authored-By: Hieu LE Co-Authored-By: Nguyen Van Trung Change-Id: I5e220738a18422a28a3384db1ab671ea111ac9b2 Signed-off-by: Graham Hayes --- designate/tests/unit/test_central/test_basic.py | 181 ++++++++++++++++----- designate/worker/__init__.py | 6 +- devstack/plugin.sh | 5 +- .../pool-manager-disabled-ff8582b5f86d2360.yaml | 6 + 4 files changed, 155 insertions(+), 43 deletions(-) create mode 100644 releasenotes/notes/pool-manager-disabled-ff8582b5f86d2360.yaml diff --git a/designate/tests/unit/test_central/test_basic.py b/designate/tests/unit/test_central/test_basic.py index a1e2e0bd..5b882f4b 100644 --- a/designate/tests/unit/test_central/test_basic.py +++ b/designate/tests/unit/test_central/test_basic.py @@ -30,6 +30,7 @@ import testtools from designate import exceptions from designate import objects from designate.central.service import Service +from designate.tests import TestCase from designate.tests.fixtures import random_seed import designate.central.service @@ -37,7 +38,6 @@ LOG = logging.getLogger(__name__) # TODO(Federico): move this - def unwrap(f): """Unwrap a decorated function Requires __wrapped_function and __wrapper_name to be set @@ -218,6 +218,15 @@ fx_pool_manager = fixtures.MockPatch( ]) ) +fx_worker = fixtures.MockPatch( + 'designate.central.service.worker_rpcapi.WorkerAPI.get_instance', + mock.MagicMock(spec_set=[ + 'create_zone', + 'update_zone', + 'delete_zone' + ]) +) + fx_disable_notification = fixtures.MockPatch('designate.central.notification') @@ -227,7 +236,7 @@ class NotMockedError(NotImplementedError): @patch('designate.central.service.storage', mock.NonCallableMock(side_effect=NotMockedError)) -class CentralBasic(base.BaseTestCase): +class CentralBasic(TestCase): def setUp(self): super(CentralBasic, self).setUp() @@ -270,6 +279,7 @@ class CentralBasic(base.BaseTestCase): ]) designate.central.service.rpcapi = mock.Mock() designate.central.service.pool_manager_rpcapi = mock.Mock() + designate.central.service.worker_rpcapi = mock.Mock() self.context = mock.NonCallableMock(spec_set=[ 'elevated', 'sudo', @@ -971,10 +981,10 @@ class CentralZoneTestCase(CentralBasic): out = self.service.delete_zone(self.context, CentralZoneTestCase.zone__id) assert not self.service.storage.delete_zone.called - assert self.service.pool_manager_api.delete_zone.called + assert self.service.zone_api.delete_zone.called assert designate.central.service.policy.check.called ctx, deleted_dom = \ - self.service.pool_manager_api.delete_zone.call_args[0] + self.service.zone_api.delete_zone.call_args[0] self.assertEqual('foo', deleted_dom.name) self.assertEqual('foo', out.name) pcheck, ctx, target = \ @@ -1069,14 +1079,27 @@ class CentralZoneTestCase(CentralBasic): criterion='bogus' ) - def test_touch_zone(self): + def _test_touch_zone(self, worker_enabled=True): + if not worker_enabled: + self.config( + enabled="False", + group="service:worker" + ) + self.service._touch_zone_in_storage = Mock() self.service.storage.get_zone.return_value = RoObject( name='example.org.', tenant_id='2', ) - with fx_pool_manager: - self.service.touch_zone(self.context, CentralZoneTestCase.zone__id) + + if worker_enabled: + with fx_worker: + self.service.touch_zone(self.context, + CentralZoneTestCase.zone__id) + else: + with fx_pool_manager: + self.service.touch_zone(self.context, + CentralZoneTestCase.zone__id) assert designate.central.service.policy.check.called self.assertEqual( @@ -1084,6 +1107,12 @@ class CentralZoneTestCase(CentralBasic): designate.central.service.policy.check.call_args[0][0] ) + def test_touch_zone_with_worker_model(self): + self._test_touch_zone(worker_enabled=True) + + def test_touch_zone_with_pool_manager_model(self): + self._test_touch_zone(worker_enabled=False) + def test_get_recordset_not_found(self): self.service.storage.get_zone.return_value = RoObject( id=CentralZoneTestCase.zone__id, @@ -1185,7 +1214,12 @@ class CentralZoneTestCase(CentralBasic): with testtools.ExpectedException(exceptions.BadRequest): self.service.update_recordset(self.context, recordset) - def test_update_recordset(self): + def _test_update_recordset(self, worker_enabled=True): + if not worker_enabled: + self.config( + enabled="False", + group="service:worker" + ) self.service.storage.get_zone.return_value = RoObject( type='foo', name='example.org.', @@ -1200,10 +1234,13 @@ class CentralZoneTestCase(CentralBasic): self.service._update_recordset_in_storage = Mock( return_value=('x', 'y') ) - - with fx_pool_manager: - self.service.update_recordset(self.context, recordset) - assert self.service._update_recordset_in_storage.called + if worker_enabled: + with fx_worker: + self.service.update_recordset(self.context, recordset) + else: + with fx_pool_manager: + self.service.update_recordset(self.context, recordset) + assert self.service._update_recordset_in_storage.called n, ctx, target = designate.central.service.policy.check.call_args[0] self.assertEqual('update_recordset', n) @@ -1214,6 +1251,12 @@ class CentralZoneTestCase(CentralBasic): 'recordset_id': '9c85d9b0-1e9d-4e99-aede-a06664f1af2e', 'tenant_id': '2'}, target) + def test_update_recordset_worker_model(self): + self._test_update_recordset(worker_enabled=True) + + def test_update_recordset_pool_manager_model(self): + self._test_update_recordset(worker_enabled=False) + def test__update_recordset_in_storage(self): recordset = Mock() recordset.name = 'n' @@ -1356,7 +1399,12 @@ class CentralZoneTestCase(CentralBasic): CentralZoneTestCase.zone__id_2, CentralZoneTestCase.recordset__id) - def test_delete_recordset(self): + def _test_delete_recordset(self, worker_enabled=True): + if not worker_enabled: + self.config( + enabled="False", + group="service:worker" + ) mock_zone = RoObject( action='foo', id=CentralZoneTestCase.zone__id_2, @@ -1378,14 +1426,27 @@ class CentralZoneTestCase(CentralBasic): self.service._delete_recordset_in_storage = Mock( return_value=(mock_rs, mock_zone) ) - with fx_pool_manager: - self.service.delete_recordset(self.context, - CentralZoneTestCase.zone__id_2, - CentralZoneTestCase.recordset__id) - assert self.service.pool_manager_api.update_zone.called + if worker_enabled: + with fx_worker: + self.service.delete_recordset(self.context, + CentralZoneTestCase.zone__id_2, + CentralZoneTestCase.recordset__id) + assert self.service.zone_api.update_zone.called + else: + with fx_pool_manager: + self.service.delete_recordset(self.context, + CentralZoneTestCase.zone__id_2, + CentralZoneTestCase.recordset__id) + assert self.service.zone_api.update_zone.called assert self.service._delete_recordset_in_storage.called + def test_delete_recordset_worker(self): + self._test_delete_recordset(worker_enabled=True) + + def test_delete_recordset_pool_manager(self): + self._test_delete_recordset(worker_enabled=False) + def test__delete_recordset_in_storage(self): def mock_uds(c, zone, inc): return zone @@ -1453,7 +1514,9 @@ class CentralZoneTestCase(CentralBasic): RoObject(), ) - def test_create_record(self): + def _test_create_record(self, worker_enabled=True): + if not worker_enabled: + self.config(enabled="False", group="service:worker") self.service._create_record_in_storage = Mock( return_value=(None, None) ) @@ -1467,14 +1530,23 @@ class CentralZoneTestCase(CentralBasic): self.service.storage.get_recordset.return_value = RoObject( name='rs', ) - with fx_pool_manager: - self.service.create_record( - self.context, - CentralZoneTestCase.zone__id, - CentralZoneTestCase.recordset__id, - RoObject(), - ) - assert self.service.pool_manager_api.update_zone.called + + if worker_enabled: + with fx_worker: + self.service.create_record( + self.context, + CentralZoneTestCase.zone__id, + CentralZoneTestCase.recordset__id, + RoObject()) + assert self.service.zone_api.update_zone.called + else: + with fx_pool_manager: + self.service.create_record( + self.context, + CentralZoneTestCase.zone__id, + CentralZoneTestCase.recordset__id, + RoObject()) + assert self.service.zone_api.update_zone.called n, ctx, target = designate.central.service.policy.check.call_args[0] self.assertEqual('create_record', n) @@ -1486,6 +1558,12 @@ class CentralZoneTestCase(CentralBasic): 'recordset_name': 'rs', 'tenant_id': '2'}, target) + def test_create_record_worker(self): + self._test_create_record(worker_enabled=True) + + def test_create_record_pool_manager(self): + self._test_create_record(worker_enabled=False) + def test__create_record_in_storage(self): self.service._enforce_record_quota = Mock() self.service._create_record_in_storage( @@ -1623,7 +1701,9 @@ class CentralZoneTestCase(CentralBasic): with testtools.ExpectedException(exceptions.BadRequest): self.service.update_record(self.context, record) - def test_update_record(self): + def _test_update_record(self, worker_enabled=True): + if not worker_enabled: + self.config(enabled="False", group="service:worker") self.service.storage.get_zone.return_value = RoObject( action='a', name='n', @@ -1643,9 +1723,13 @@ class CentralZoneTestCase(CentralBasic): return_value=('x', 'y') ) - with fx_pool_manager: - self.service.update_record(self.context, record) - assert self.service._update_record_in_storage.called + if worker_enabled: + with fx_worker: + self.service.update_record(self.context, record) + else: + with fx_pool_manager: + self.service.update_record(self.context, record) + assert self.service._update_record_in_storage.called n, ctx, target = designate.central.service.policy.check.call_args[0] self.assertEqual('update_record', n) @@ -1658,6 +1742,12 @@ class CentralZoneTestCase(CentralBasic): 'recordset_name': 'rsn', 'tenant_id': 'tid'}, target) + def test_update_record_worker(self): + self._test_update_record(worker_enabled=True) + + def test_update_record_pool_manager(self): + self._test_update_record(worker_enabled=False) + def test__update_record_in_storage(self): self.service._update_zone_in_storage = Mock() self.service._update_record_in_storage( @@ -1712,7 +1802,9 @@ class CentralZoneTestCase(CentralBasic): CentralZoneTestCase.recordset__id, CentralZoneTestCase.record__id) - def test_delete_record(self): + def _test_delete_record(self, worker_enabled=True): + if not worker_enabled: + self.config(enabled="False", group="service:worker") self.service._delete_record_in_storage = Mock( return_value=(None, None) ) @@ -1734,11 +1826,18 @@ class CentralZoneTestCase(CentralBasic): managed=False, ) - with fx_pool_manager: - self.service.delete_record(self.context, - CentralZoneTestCase.zone__id_2, - CentralZoneTestCase.recordset__id_2, - CentralZoneTestCase.record__id) + if worker_enabled: + with fx_worker: + self.service.delete_record(self.context, + CentralZoneTestCase.zone__id_2, + CentralZoneTestCase.recordset__id_2, + CentralZoneTestCase.record__id) + else: + with fx_pool_manager: + self.service.delete_record(self.context, + CentralZoneTestCase.zone__id_2, + CentralZoneTestCase.recordset__id_2, + CentralZoneTestCase.record__id) t, ctx, target = designate.central.service.policy.check.call_args[0] self.assertEqual('delete_record', t) @@ -1751,6 +1850,12 @@ class CentralZoneTestCase(CentralBasic): 'recordset_name': 'rsn', 'tenant_id': 'tid'}, target) + def test_delete_record_worker(self): + self._test_delete_record(worker_enabled=True) + + def test_delete_record_pool_manager(self): + self._test_delete_record(worker_enabled=False) + def test_delete_record_fail_on_managed(self): self.service._delete_record_in_storage = Mock( return_value=(None, None) @@ -1968,7 +2073,7 @@ class CentralZoneExportTests(CentralBasic): ) ) - self.service.worker_api.start_zone_export = Mock() + self.service.zone_api.start_zone_export = Mock() out = self.service.create_zone_export( self.context, diff --git a/designate/worker/__init__.py b/designate/worker/__init__.py index 9d1b311a..4e6c9e23 100644 --- a/designate/worker/__init__.py +++ b/designate/worker/__init__.py @@ -22,12 +22,12 @@ worker_group = cfg.OptGroup( ) OPTS = [ - cfg.BoolOpt('enabled', default=False, + cfg.BoolOpt('enabled', default=True, help='Whether to send events to worker instead of ' 'Pool Manager', deprecated_for_removal=True, - deprecated_reason='In Rocky, this option will disappear ' - 'because worker will be enabled by default'), + deprecated_reason='In Train, this option will disappear' + 'because pool manager will be removed'), cfg.IntOpt('workers', help='Number of Worker worker processes to spawn'), cfg.IntOpt('threads', default=200, diff --git a/devstack/plugin.sh b/devstack/plugin.sh index e128f589..23e7e836 100755 --- a/devstack/plugin.sh +++ b/devstack/plugin.sh @@ -78,11 +78,12 @@ function configure_designate { iniset $DESIGNATE_CONF service:mdns listen ${DESIGNATE_SERVICE_HOST}:${DESIGNATE_SERVICE_PORT_MDNS} # Worker Configuration - if ! is_service_enabled designate-pool-manager; then - iniset $DESIGNATE_CONF service:worker enabled True + if is_service_enabled designate-worker; then iniset $DESIGNATE_CONF service:worker notify True iniset $DESIGNATE_CONF service:worker poll_max_retries $DESIGNATE_POLL_RETRIES iniset $DESIGNATE_CONF service:worker poll_retry_interval $DESIGNATE_POLL_INTERVAL + else + iniset $DESIGNATE_CONF service:worker enabled False fi # Set up Notifications/Ceilometer Integration diff --git a/releasenotes/notes/pool-manager-disabled-ff8582b5f86d2360.yaml b/releasenotes/notes/pool-manager-disabled-ff8582b5f86d2360.yaml new file mode 100644 index 00000000..ec990c1d --- /dev/null +++ b/releasenotes/notes/pool-manager-disabled-ff8582b5f86d2360.yaml @@ -0,0 +1,6 @@ +--- +upgrade: + - New installs will now have pool manager disabled by + default and will use the worker and producer services. + To continue to use pool manager set ``enabled=False`` + in the ``[service:worker]`` of your config. \ No newline at end of file -- cgit v1.2.1