Merge "Deprecate TypeAffinityFilter"
This commit is contained in:
@@ -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
|
||||
|
@@ -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
|
||||
|
||||
|
@@ -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
|
||||
|
@@ -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.
|
Reference in New Issue
Block a user