Merge "Deprecate TypeAffinityFilter"

This commit is contained in:
Jenkins
2017-05-29 19:20:38 +00:00
committed by Gerrit Code Review
4 changed files with 44 additions and 2 deletions

View File

@@ -164,6 +164,15 @@ There are many standard filter classes which may be used
* |TypeAffinityFilter| - Only passes hosts that are not already running an
instance of the requested type.
.. warning:: TypeAffinityFilter is deprecated for removal in the
17.0.0 Queens release. There is no replacement planned for this
filter. It is fundamentally flawed in that it relies on the
``flavors.id`` primary key and if a flavor "changed", i.e. deleted
and re-created with new values, it will result in this filter
thinking it is a different flavor, thus breaking the usefulness of
this filter.
* |AggregateTypeAffinityFilter| - limits instance_type by aggregate.
This filter passes hosts if no instance_type key is set or
the instance_type aggregate metadata value contains the name of the

View File

@@ -14,17 +14,33 @@
# License for the specific language governing permissions and limitations
# under the License.
from oslo_log import log as logging
from nova.scheduler import filters
from nova.scheduler.filters import utils
LOG = logging.getLogger(__name__)
class TypeAffinityFilter(filters.BaseHostFilter):
"""TypeAffinityFilter doesn't allow more than one VM type per host.
"""DEPRECATED: TypeAffinityFilter doesn't allow more than one VM type
per host.
Note: this works best with ram_weight_multiplier
(spread) set to 1 (default).
"""
def __init__(self):
super(TypeAffinityFilter, self).__init__()
LOG.warning('TypeAffinityFilter is deprecated for removal in the '
'17.0.0 Queens release. There is no replacement planned '
'for this filter. It is fundamentally flawed in that it '
'relies on the flavors.id primary key and if a flavor '
'\"changed\" (deleted and re-created with new values) '
'it will result in this filter thinking it is a '
'different flavor, thus breaking the usefulness of this '
'filter.')
def host_passes(self, host_state, spec_obj):
"""Dynamically limits hosts to one instance type

View File

@@ -12,6 +12,8 @@
import mock
import six
from nova import objects
from nova.scheduler.filters import type_filter
from nova import test
@@ -22,7 +24,12 @@ from nova.tests import uuidsentinel as uuids
class TestTypeFilter(test.NoDBTestCase):
def test_type_filter(self):
self.filt_cls = type_filter.TypeAffinityFilter()
with mock.patch.object(type_filter.LOG, 'warning') as mock_warning:
self.filt_cls = type_filter.TypeAffinityFilter()
# make sure we logged a deprecation warning
self.assertEqual(1, mock_warning.call_count)
self.assertIn('TypeAffinityFilter is deprecated for removal',
six.text_type(mock_warning.call_args_list[0][0]))
host = fakes.FakeHostState('fake_host', 'fake_node', {})
host.instances = {}
target_id = 1

View File

@@ -0,0 +1,10 @@
---
deprecations:
- |
TypeAffinityFilter is deprecated for removal in the
17.0.0 Queens release. There is no replacement planned for this
filter. It is fundamentally flawed in that it relies on the
``flavors.id`` primary key and if a flavor "changed", i.e. deleted
and re-created with new values, it will result in this filter
thinking it is a different flavor, thus breaking the usefulness of
this filter.