summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorZuul <zuul@review.opendev.org>2022-06-04 04:02:09 +0000
committerGerrit Code Review <review@openstack.org>2022-06-04 04:02:09 +0000
commit5cd2b9810c9365a0468c5a8e2577fbefe6808986 (patch)
tree94ac3271a9b167d3a43508f153c953397e528dba
parent59620c81a3be6428cecd17232bce942227fe7d4d (diff)
parent1dd3b9de02a58cd678b69b91e5317942845c9582 (diff)
downloaddesignate-5cd2b9810c9365a0468c5a8e2577fbefe6808986.tar.gz
Merge "Cleanup scheduler" into stable/wallaby
-rw-r--r--designate/scheduler/base.py52
-rw-r--r--designate/scheduler/filters/attribute_filter.py20
-rw-r--r--designate/scheduler/filters/fallback_filter.py9
-rw-r--r--designate/scheduler/filters/random_filter.py14
-rw-r--r--designate/tests/unit/scheduler/test_basic.py10
-rw-r--r--designate/tests/unit/scheduler/test_filters.py4
6 files changed, 54 insertions, 55 deletions
diff --git a/designate/scheduler/base.py b/designate/scheduler/base.py
index b288548d..934f646a 100644
--- a/designate/scheduler/base.py
+++ b/designate/scheduler/base.py
@@ -27,28 +27,29 @@ class Scheduler(object):
:raises: NoFiltersConfigured
"""
-
filters = []
"""The list of filters enabled on this scheduler"""
def __init__(self, storage):
-
enabled_filters = cfg.CONF['service:central'].scheduler_filters
- # Get a storage connection
+ self.filters = list()
self.storage = storage
- if len(enabled_filters) > 0:
- filters = named.NamedExtensionManager(
- namespace='designate.scheduler.filters',
- names=enabled_filters,
- name_order=True)
- self.filters = [x.plugin(storage=self.storage) for x in filters]
- for filter in self.filters:
- LOG.info("Loaded Scheduler Filter: %s", filter.name)
+ if not enabled_filters:
+ raise exceptions.NoFiltersConfigured(
+ 'There are no scheduling filters configured'
+ )
- else:
- raise exceptions.NoFiltersConfigured('There are no scheduling '
- 'filters configured')
+ extensions = named.NamedExtensionManager(
+ namespace='designate.scheduler.filters',
+ names=enabled_filters,
+ name_order=True,
+ )
+
+ for extension in extensions:
+ plugin = extension.plugin(storage=self.storage)
+ LOG.info('Loaded Scheduler Filter: %s', plugin.name)
+ self.filters.append(plugin)
def schedule_zone(self, context, zone):
"""Get a pool to create the new zone in.
@@ -61,21 +62,24 @@ class Scheduler(object):
"""
pools = self.storage.find_pools(context)
- if len(self.filters) == 0:
+ if not self.filters:
raise exceptions.NoFiltersConfigured('There are no scheduling '
'filters configured')
- for f in self.filters:
- LOG.debug("Running %s filter with %d pools", f.name, len(pools))
- pools = f.filter(context, pools, zone)
+ for plugin in self.filters:
+ LOG.debug(
+ 'Running %s filter with %d pools', plugin.name, len(pools)
+ )
+ pools = plugin.filter(context, pools, zone)
LOG.debug(
- "%d candidate pools remaining after %s filter",
- len(pools),
- f.name)
+ '%d candidate pools remaining after %s filter',
+ len(pools), plugin.name
+ )
if len(pools) > 1:
raise exceptions.MultiplePoolsFound()
- if len(pools) == 0:
- raise exceptions.NoValidPoolFound('There are no pools that '
- 'matched your request')
+ if not pools:
+ raise exceptions.NoValidPoolFound(
+ 'There are no pools that matched your request'
+ )
return pools[0].id
diff --git a/designate/scheduler/filters/attribute_filter.py b/designate/scheduler/filters/attribute_filter.py
index 8751fc24..a53333e6 100644
--- a/designate/scheduler/filters/attribute_filter.py
+++ b/designate/scheduler/filters/attribute_filter.py
@@ -74,7 +74,7 @@ class AttributeFilter(base.Filter):
# fine, we should just continue.
pool_attributes.pop('pool_id', None)
- if pool_attributes == {}:
+ if not pool_attributes:
# If we did not send any attribute to filter on, we should
# not filter the pools based on an empty set, as this will
# return no pools.
@@ -83,12 +83,10 @@ class AttributeFilter(base.Filter):
# Check if the keys requested exist in this pool
if not {key for key in six.iterkeys(pool_attributes)}.issuperset(
zone_attributes):
- msg = "%(pool)s did not match list of requested attribute "\
- "keys - removing from list. Requested: %(r_key)s. Pool:"\
- "%(p_key)s"
-
LOG.debug(
- msg,
+ '%(pool)s did not match list of requested attribute '
+ 'keys - removing from list. Requested: %(r_key)s. Pool:'
+ '%(p_key)s',
{
'pool': pool,
'r_key': zone_attributes,
@@ -98,8 +96,8 @@ class AttributeFilter(base.Filter):
# Missing required keys - remove from the list
return False
- for key in six.iterkeys(zone_attributes):
- LOG.debug("Checking value of %s for %s", key, pool)
+ for key in zone_attributes.keys():
+ LOG.debug('Checking value of %s for %s', key, pool)
pool_attr = bool_from_string(pool_attributes[key],
default=pool_attributes[key])
@@ -108,8 +106,8 @@ class AttributeFilter(base.Filter):
if not pool_attr == zone_attr:
LOG.debug(
- "%(pool)s did not match requested value of %(key)s. "
- "Requested: %(r_val)s. Pool: %(p_val)s",
+ '%(pool)s did not match requested value of %(key)s. '
+ 'Requested: %(r_val)s. Pool: %(p_val)s',
{
'pool': pool,
'key': key,
@@ -123,7 +121,5 @@ class AttributeFilter(base.Filter):
return True
pool_list = [pool for pool in pools if evaluate_pool(pool)]
-
pools = PoolList(objects=pool_list)
-
return pools
diff --git a/designate/scheduler/filters/fallback_filter.py b/designate/scheduler/filters/fallback_filter.py
index cbb31ac3..bacb0d33 100644
--- a/designate/scheduler/filters/fallback_filter.py
+++ b/designate/scheduler/filters/fallback_filter.py
@@ -40,10 +40,9 @@ class FallbackFilter(base.Filter):
"""
def filter(self, context, pools, zone):
- if len(pools) == 0:
+ if not pools:
pools = objects.PoolList()
pools.append(
- objects.Pool(id=cfg.CONF['service:central'].default_pool_id))
- return pools
- else:
- return pools
+ objects.Pool(id=cfg.CONF['service:central'].default_pool_id)
+ )
+ return pools
diff --git a/designate/scheduler/filters/random_filter.py b/designate/scheduler/filters/random_filter.py
index 578695db..494a1fad 100644
--- a/designate/scheduler/filters/random_filter.py
+++ b/designate/scheduler/filters/random_filter.py
@@ -22,7 +22,8 @@ LOG = logging.getLogger(__name__)
class RandomFilter(base.Filter):
- """Randomly chooses one of the input pools if there is multiple supplied.
+ """Randomly chooses one of the input pools if there are multiple
+ ones supplied.
.. note::
@@ -35,9 +36,8 @@ class RandomFilter(base.Filter):
"""
def filter(self, context, pools, zone):
- new_list = PoolList()
- if len(pools):
- new_list.append(random.choice(pools))
- return new_list
- else:
- return pools
+ if pools:
+ new_pool_list = PoolList()
+ new_pool_list.append(random.choice(pools))
+ return new_pool_list
+ return pools
diff --git a/designate/tests/unit/scheduler/test_basic.py b/designate/tests/unit/scheduler/test_basic.py
index 49531e81..156a29ad 100644
--- a/designate/tests/unit/scheduler/test_basic.py
+++ b/designate/tests/unit/scheduler/test_basic.py
@@ -11,7 +11,7 @@
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
-from unittest.mock import Mock
+from unittest import mock
from designate import exceptions
from designate import objects
@@ -35,7 +35,7 @@ class SchedulerTest(tests.TestCase):
'find_pools.return_value': objects.PoolList.from_list(
[{"id": "794ccc2c-d751-44fe-b57f-8894c9f5c842"}])
}
- mock_storage = Mock(**attrs)
+ mock_storage = mock.Mock(**attrs)
test_scheduler = scheduler.get_scheduler(storage=mock_storage)
@@ -55,7 +55,7 @@ class SchedulerTest(tests.TestCase):
)
}
- mock_storage = Mock(**attrs)
+ mock_storage = mock.Mock(**attrs)
test_scheduler = scheduler.get_scheduler(storage=mock_storage)
@@ -74,7 +74,7 @@ class SchedulerTest(tests.TestCase):
attrs = {
'find_pools.return_value': objects.PoolList()
}
- mock_storage = Mock(**attrs)
+ mock_storage = mock.Mock(**attrs)
self.CONF.set_override(
'scheduler_filters', ['random'], 'service:central'
@@ -96,7 +96,7 @@ class SchedulerTest(tests.TestCase):
attrs = {
'find_pools.return_value': objects.PoolList()
}
- mock_storage = Mock(**attrs)
+ mock_storage = mock.Mock(**attrs)
self.assertRaisesRegex(
exceptions.NoFiltersConfigured,
diff --git a/designate/tests/unit/scheduler/test_filters.py b/designate/tests/unit/scheduler/test_filters.py
index da718914..78570e80 100644
--- a/designate/tests/unit/scheduler/test_filters.py
+++ b/designate/tests/unit/scheduler/test_filters.py
@@ -11,7 +11,7 @@
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
-from unittest.mock import Mock
+from unittest import mock
import fixtures
@@ -41,7 +41,7 @@ class SchedulerFilterTest(tests.TestCase):
id="6c346011-e581-429b-a7a2-6cdf0aba91c3")
}
- mock_storage = Mock(**attrs)
+ mock_storage = mock.Mock(**attrs)
self.test_filter = self.FILTER(storage=mock_storage)