From 2b3fdc871c50f6471f4ec4ee65e90f78bcb442bc Mon Sep 17 00:00:00 2001 From: Boden R Date: Thu, 5 Apr 2018 10:24:54 -0600 Subject: [PATCH] remove unused common exceptions This patch removes a handful of unused exceptions from neutron.common.exceptions as follows: The following exceptions already live in neutron-lib and are thus duplicates in neutron: PlacementEndpointNotFound PlacementResourceProviderNotFound PlacementInventoryNotFound PlacementAggregateNotFound PlacementInventoryUpdateConflict NetworkVlanRangeError PhysicalNetworkNameError MacAddressGenerationFailure The following exception is not used anywhere today: TenantNetworksDisabled NeutronLibImpact Change-Id: Ie8227954681292ead1da0dedc950c54028ce84f1 --- neutron/common/exceptions.py | 47 ------------------- neutron/plugins/common/utils.py | 9 ++-- neutron/services/segments/placement_client.py | 20 ++++---- neutron/services/segments/plugin.py | 10 ++-- neutron/tests/unit/common/test_utils.py | 25 +++++----- neutron/tests/unit/extensions/test_segment.py | 22 ++++----- 6 files changed, 42 insertions(+), 91 deletions(-) diff --git a/neutron/common/exceptions.py b/neutron/common/exceptions.py index 0b5b495bd15..50b8fd8b4c1 100644 --- a/neutron/common/exceptions.py +++ b/neutron/common/exceptions.py @@ -65,24 +65,6 @@ class NetworkQosBindingError(e.NeutronException): "could not be created: %(db_error)s.") -class PlacementEndpointNotFound(e.NotFound): - message = _("Placement API endpoint not found") - - -class PlacementResourceProviderNotFound(e.NotFound): - message = _("Placement resource provider not found %(resource_provider)s.") - - -class PlacementInventoryNotFound(e.NotFound): - message = _("Placement inventory not found for resource provider " - "%(resource_provider)s, resource class %(resource_class)s.") - - -class PlacementAggregateNotFound(e.NotFound): - message = _("Aggregate not found for resource provider " - "%(resource_provider)s.") - - class PolicyRemoveAuthorizationError(e.NotAuthorized): message = _("Failed to remove provided policy %(policy_id)s " "because you are not authorized.") @@ -118,12 +100,6 @@ class FlatNetworkInUse(e.InUse): "Physical network %(physical_network)s is in use.") -class TenantNetworksDisabled(e.ServiceUnavailable): - # NOTE(vvargaszte): May be removed in the future as it is not used in - # Neutron, only in the Neutron plugin of OpenContrail. - message = _("Tenant network creation is not enabled.") - - class NoNetworkFoundInMaximumAllowedAttempts(e.ServiceUnavailable): message = _("Unable to create the network. " "No available network found in maximum allowed attempts.") @@ -151,20 +127,11 @@ class OverlappingAllocationPools(e.Conflict): "%(pool_1)s %(pool_2)s for subnet %(subnet_cidr)s.") -class PlacementInventoryUpdateConflict(e.Conflict): - message = _("Placement inventory update conflict for resource provider " - "%(resource_provider)s, resource class %(resource_class)s.") - - class OutOfBoundsAllocationPool(e.BadRequest): message = _("The allocation pool %(pool)s spans " "beyond the subnet cidr %(subnet_cidr)s.") -class MacAddressGenerationFailure(e.ServiceUnavailable): - message = _("Unable to generate unique mac on network %(net_id)s.") - - class BridgeDoesNotExist(e.NeutronException): message = _("Bridge %(bridge)s does not exist.") @@ -214,20 +181,6 @@ class GatewayIpInUse(e.InUse): "by port %(port_id)s. Unable to update.") -class NetworkVlanRangeError(e.NeutronException): - message = _("Invalid network VLAN range: '%(vlan_range)s' - '%(error)s'.") - - def __init__(self, **kwargs): - # Convert vlan_range tuple to 'start:end' format for display - if isinstance(kwargs['vlan_range'], tuple): - kwargs['vlan_range'] = "%d:%d" % kwargs['vlan_range'] - super(NetworkVlanRangeError, self).__init__(**kwargs) - - -class PhysicalNetworkNameError(e.NeutronException): - message = _("Empty physical network name.") - - class NetworkVxlanPortRangeError(e.NeutronException): message = _("Invalid network VXLAN port range: '%(vxlan_range)s'.") diff --git a/neutron/plugins/common/utils.py b/neutron/plugins/common/utils.py index 7a65cca4434..becf5dab20e 100644 --- a/neutron/plugins/common/utils.py +++ b/neutron/plugins/common/utils.py @@ -33,7 +33,6 @@ from oslo_utils import excutils import webob.exc from neutron._i18n import _ -from neutron.common import exceptions as n_exc INTERFACE_HASH_LEN = 6 @@ -88,7 +87,7 @@ def verify_tunnel_range(tunnel_range, tunnel_type): def raise_invalid_tag(vlan_str, vlan_range): """Raise an exception for invalid tag.""" - raise n_exc.NetworkVlanRangeError( + raise exceptions.NetworkVlanRangeError( vlan_range=vlan_range, error=_("%s is not a valid VLAN tag") % vlan_str) @@ -99,7 +98,7 @@ def verify_vlan_range(vlan_range): if not is_valid_vlan_tag(vlan_tag): raise_invalid_tag(str(vlan_tag), vlan_range) if vlan_range[1] < vlan_range[0]: - raise n_exc.NetworkVlanRangeError( + raise exceptions.NetworkVlanRangeError( vlan_range=vlan_range, error=_("End of VLAN range is less than start of VLAN range")) @@ -109,12 +108,12 @@ def parse_network_vlan_range(network_vlan_range): entry = network_vlan_range.strip() if ':' in entry: if entry.count(':') != 2: - raise n_exc.NetworkVlanRangeError( + raise exceptions.NetworkVlanRangeError( vlan_range=entry, error=_("Need exactly two values for VLAN range")) network, vlan_min, vlan_max = entry.split(':') if not network: - raise n_exc.PhysicalNetworkNameError() + raise exceptions.PhysicalNetworkNameError() try: vlan_min = int(vlan_min) diff --git a/neutron/services/segments/placement_client.py b/neutron/services/segments/placement_client.py index c4175fcd871..de27442d5ce 100644 --- a/neutron/services/segments/placement_client.py +++ b/neutron/services/segments/placement_client.py @@ -17,10 +17,10 @@ import functools from keystoneauth1 import exceptions as ks_exc from keystoneauth1 import loading as ks_loading +from neutron_lib.exceptions import placement as placement_exc from oslo_config import cfg from neutron._i18n import _ -from neutron.common import exceptions as n_exc PLACEMENT_API_WITH_AGGREGATES = 'placement 1.1' @@ -31,7 +31,7 @@ def check_placement_api_available(f): try: return f(self, *a, **k) except ks_exc.EndpointNotFound: - raise n_exc.PlacementEndpointNotFound() + raise placement_exc.PlacementEndpointNotFound() return wrapper @@ -107,8 +107,8 @@ class PlacementAPIClient(object): :param resource_class: Resource class name of the inventory to be returned :type resource_class: str - :raises n_exc.PlacementInventoryNotFound: For failure to find inventory - for a resource provider + :raises placement_exc.PlacementInventoryNotFound: For failure to + find inventory for a resource provider """ url = '/resource_providers/%s/inventories/%s' % ( resource_provider_uuid, resource_class) @@ -116,10 +116,10 @@ class PlacementAPIClient(object): return self._get(url).json() except ks_exc.NotFound as e: if "No resource provider with uuid" in e.details: - raise n_exc.PlacementResourceProviderNotFound( + raise placement_exc.PlacementResourceProviderNotFound( resource_provider=resource_provider_uuid) elif _("No inventory of class") in e.details: - raise n_exc.PlacementInventoryNotFound( + raise placement_exc.PlacementInventoryNotFound( resource_provider=resource_provider_uuid, resource_class=resource_class) else: @@ -136,15 +136,15 @@ class PlacementAPIClient(object): :type inventory: dict :param resource_class: The resource class of the inventory to update :type resource_class: str - :raises n_exc.PlacementInventoryUpdateConflict: For failure to updste - inventory due to outdated resource_provider_generation + :raises placement_exc.PlacementInventoryUpdateConflict: For failure to + update inventory due to outdated resource_provider_generation """ url = '/resource_providers/%s/inventories/%s' % ( resource_provider_uuid, resource_class) try: self._put(url, inventory) except ks_exc.Conflict: - raise n_exc.PlacementInventoryUpdateConflict( + raise placement_exc.PlacementInventoryUpdateConflict( resource_provider=resource_provider_uuid, resource_class=resource_class) @@ -175,5 +175,5 @@ class PlacementAPIClient(object): url, headers={'openstack-api-version': PLACEMENT_API_WITH_AGGREGATES}).json() except ks_exc.NotFound: - raise n_exc.PlacementAggregateNotFound( + raise placement_exc.PlacementAggregateNotFound( resource_provider=resource_provider_uuid) diff --git a/neutron/services/segments/plugin.py b/neutron/services/segments/plugin.py index 16db0803665..35e494e096f 100644 --- a/neutron/services/segments/plugin.py +++ b/neutron/services/segments/plugin.py @@ -25,6 +25,7 @@ from neutron_lib.callbacks import events from neutron_lib.callbacks import registry from neutron_lib.callbacks import resources from neutron_lib import constants +from neutron_lib.exceptions import placement as placement_exc from neutron_lib.plugins import directory from novaclient import client as nova_client from novaclient import exceptions as nova_exc @@ -33,7 +34,6 @@ from oslo_log import log from oslo_utils import excutils from neutron._i18n import _ -from neutron.common import exceptions as n_exc from neutron.db import _resource_extend as resource_extend from neutron.db import api as db_api from neutron.db.models import segment as segment_model @@ -166,7 +166,7 @@ class NovaSegmentNotifier(object): for event in batched_events: try: event.method(event) - except n_exc.PlacementEndpointNotFound: + except placement_exc.PlacementEndpointNotFound: LOG.debug('Placement API was not found when trying to ' 'update routed networks IPv4 inventories') return @@ -190,7 +190,7 @@ class NovaSegmentNotifier(object): def _create_or_update_nova_inventory(self, event): try: self._update_nova_inventory(event) - except n_exc.PlacementResourceProviderNotFound: + except placement_exc.PlacementResourceProviderNotFound: self._create_nova_inventory(event.segment_id, event.total, event.reserved, event.segment_host_mappings) @@ -208,7 +208,7 @@ class NovaSegmentNotifier(object): ipv4_inventory, IPV4_RESOURCE_CLASS) return - except n_exc.PlacementInventoryUpdateConflict: + except placement_exc.PlacementInventoryUpdateConflict: LOG.debug('Re-trying to update Nova IPv4 inventory for ' 'routed network segment: %s', event.segment_id) LOG.error('Failed to update Nova IPv4 inventory for routed ' @@ -340,7 +340,7 @@ class NovaSegmentNotifier(object): for segment_id in event.segment_ids: try: aggregate_id = self._get_aggregate_id(segment_id) - except n_exc.PlacementAggregateNotFound: + except placement_exc.PlacementAggregateNotFound: LOG.info('When adding host %(host)s, aggregate not found ' 'for routed network segment %(segment_id)s', {'host': event.host, 'segment_id': segment_id}) diff --git a/neutron/tests/unit/common/test_utils.py b/neutron/tests/unit/common/test_utils.py index b4c7fcc341b..97e7786f26c 100644 --- a/neutron/tests/unit/common/test_utils.py +++ b/neutron/tests/unit/common/test_utils.py @@ -29,7 +29,6 @@ import testscenarios import testtools from neutron.common import constants as common_constants -from neutron.common import exceptions as n_exc from neutron.common import utils from neutron.plugins.common import utils as plugin_utils from neutron.tests import base @@ -190,13 +189,13 @@ class TestVlanNetworkNameValid(base.BaseTestCase): return plugin_utils.parse_network_vlan_ranges(vlan_range) def test_validate_provider_phynet_name_mixed(self): - self.assertRaises(n_exc.PhysicalNetworkNameError, + self.assertRaises(exc.PhysicalNetworkNameError, self.parse_vlan_ranges, ['', ':23:30', 'physnet1', 'tenant_net:100:200']) def test_validate_provider_phynet_name_bad(self): - self.assertRaises(n_exc.PhysicalNetworkNameError, + self.assertRaises(exc.PhysicalNetworkNameError, self.parse_vlan_ranges, [':1:34']) @@ -215,7 +214,7 @@ class TestVlanRangeVerifyValid(UtilTestParseVlanRanges): def check_one_vlan_invalid(self, bad_range, which): expected_msg = self._vrange_invalid_vlan(bad_range, which) - err = self.assertRaises(n_exc.NetworkVlanRangeError, + err = self.assertRaises(exc.NetworkVlanRangeError, self.verify_range, bad_range) self.assertEqual(str(err), expected_msg) @@ -258,7 +257,7 @@ class TestVlanRangeVerifyValid(UtilTestParseVlanRanges): def test_range_reversed(self): bad_range = (95, 10) expected_msg = self._vrange_invalid(bad_range) - err = self.assertRaises(n_exc.NetworkVlanRangeError, + err = self.assertRaises(exc.NetworkVlanRangeError, self.verify_range, bad_range) self.assertEqual(str(err), expected_msg) @@ -280,28 +279,28 @@ class TestParseOneVlanRange(UtilTestParseVlanRanges): def test_parse_one_net_incomplete_range(self): config_str = "net1:100" expected_msg = self._range_err_bad_count(config_str) - err = self.assertRaises(n_exc.NetworkVlanRangeError, + err = self.assertRaises(exc.NetworkVlanRangeError, self.parse_one, config_str) self.assertEqual(expected_msg, str(err)) def test_parse_one_net_range_too_many(self): config_str = "net1:100:150:200" expected_msg = self._range_err_bad_count(config_str) - err = self.assertRaises(n_exc.NetworkVlanRangeError, + err = self.assertRaises(exc.NetworkVlanRangeError, self.parse_one, config_str) self.assertEqual(expected_msg, str(err)) def test_parse_one_net_vlan1_not_int(self): config_str = "net1:foo:199" expected_msg = self._range_invalid_vlan(config_str, 1) - err = self.assertRaises(n_exc.NetworkVlanRangeError, + err = self.assertRaises(exc.NetworkVlanRangeError, self.parse_one, config_str) self.assertEqual(expected_msg, str(err)) def test_parse_one_net_vlan2_not_int(self): config_str = "net1:100:bar" expected_msg = self._range_invalid_vlan(config_str, 2) - err = self.assertRaises(n_exc.NetworkVlanRangeError, + err = self.assertRaises(exc.NetworkVlanRangeError, self.parse_one, config_str) self.assertEqual(expected_msg, str(err)) @@ -313,14 +312,14 @@ class TestParseOneVlanRange(UtilTestParseVlanRanges): def test_parse_one_net_range_bad_vlan1(self): config_str = "net1:9000:150" expected_msg = self._nrange_invalid_vlan(config_str, 1) - err = self.assertRaises(n_exc.NetworkVlanRangeError, + err = self.assertRaises(exc.NetworkVlanRangeError, self.parse_one, config_str) self.assertEqual(expected_msg, str(err)) def test_parse_one_net_range_bad_vlan2(self): config_str = "net1:4000:4999" expected_msg = self._nrange_invalid_vlan(config_str, 2) - err = self.assertRaises(n_exc.NetworkVlanRangeError, + err = self.assertRaises(exc.NetworkVlanRangeError, self.parse_one, config_str) self.assertEqual(expected_msg, str(err)) @@ -364,7 +363,7 @@ class TestParseVlanRangeList(UtilTestParseVlanRanges): config_list = ["net1:100", "net2:200:299"] expected_msg = self._range_err_bad_count(config_list[0]) - err = self.assertRaises(n_exc.NetworkVlanRangeError, + err = self.assertRaises(exc.NetworkVlanRangeError, self.parse_list, config_list) self.assertEqual(expected_msg, str(err)) @@ -372,7 +371,7 @@ class TestParseVlanRangeList(UtilTestParseVlanRanges): config_list = ["net1:100:199", "net2:200:0x200"] expected_msg = self._range_invalid_vlan(config_list[1], 2) - err = self.assertRaises(n_exc.NetworkVlanRangeError, + err = self.assertRaises(exc.NetworkVlanRangeError, self.parse_list, config_list) self.assertEqual(expected_msg, str(err)) diff --git a/neutron/tests/unit/extensions/test_segment.py b/neutron/tests/unit/extensions/test_segment.py index bfec22f594c..f4a180558fa 100644 --- a/neutron/tests/unit/extensions/test_segment.py +++ b/neutron/tests/unit/extensions/test_segment.py @@ -27,13 +27,13 @@ from neutron_lib.callbacks import resources from neutron_lib import constants from neutron_lib import context from neutron_lib import exceptions as n_exc +from neutron_lib.exceptions import placement as placement_exc from neutron_lib.plugins import directory from novaclient import exceptions as nova_exc from oslo_config import cfg from oslo_utils import uuidutils import webob.exc -from neutron.common import exceptions as neutron_exc from neutron.conf.plugins.ml2 import config as ml2_config from neutron.conf.plugins.ml2.drivers import driver_type from neutron.db import agents_db @@ -1555,7 +1555,7 @@ class TestNovaSegmentNotifier(SegmentAwareIpamTestCase): segment_id = segment['segment']['id'] self._setup_host_mappings([(segment_id, 'fakehost')]) self.mock_p_client.get_inventory.side_effect = ( - neutron_exc.PlacementResourceProviderNotFound( + placement_exc.PlacementResourceProviderNotFound( resource_provider=segment_id, resource_class=seg_plugin.IPV4_RESOURCE_CLASS)) aggregate = mock.MagicMock() @@ -1755,7 +1755,7 @@ class TestNovaSegmentNotifier(SegmentAwareIpamTestCase): self.batch_notifier._notify() self._assert_inventory_delete(segment_id, aggregate) self.mock_p_client.get_inventory.side_effect = ( - neutron_exc.PlacementResourceProviderNotFound( + placement_exc.PlacementResourceProviderNotFound( resource_provider=segment_id, resource_class=seg_plugin.IPV4_RESOURCE_CLASS)) aggregate.hosts = [] @@ -1798,7 +1798,7 @@ class TestNovaSegmentNotifier(SegmentAwareIpamTestCase): aggregate.id = 1 aggregate.hosts = ['fakehost1'] self.mock_p_client.list_aggregates.side_effect = ( - neutron_exc.PlacementAggregateNotFound( + placement_exc.PlacementAggregateNotFound( resource_provider=segment_id)) self.mock_n_client.aggregates.list.return_value = [aggregate] host = 'otherfakehost' @@ -2015,7 +2015,7 @@ class TestNovaSegmentNotifier(SegmentAwareIpamTestCase): inventory, original_inventory = self._get_inventory(100, 2) self.mock_p_client.get_inventory.return_value = inventory self.mock_p_client.update_inventory.side_effect = ( - neutron_exc.PlacementInventoryUpdateConflict( + placement_exc.PlacementInventoryUpdateConflict( resource_provider=mock.ANY, resource_class=seg_plugin.IPV4_RESOURCE_CLASS)) self.segments_plugin.nova_updater._update_nova_inventory(event) @@ -2035,7 +2035,7 @@ class TestNovaSegmentNotifier(SegmentAwareIpamTestCase): self.segments_plugin.nova_updater._update_nova_inventory, mock.ANY, total=1, reserved=0) self.mock_p_client.get_inventory.side_effect = ( - neutron_exc.PlacementEndpointNotFound()) + placement_exc.PlacementEndpointNotFound()) self.segments_plugin.nova_updater._send_notifications([event]) self.assertTrue(log.called) @@ -2205,11 +2205,11 @@ class PlacementAPIClientTestCase(base.DietTestCase): def test_get_inventory_not_found_no_resource_provider(self): self._test_get_inventory_not_found( "No resource provider with uuid", - neutron_exc.PlacementResourceProviderNotFound) + placement_exc.PlacementResourceProviderNotFound) def test_get_inventory_not_found_no_inventory(self): self._test_get_inventory_not_found( - "No inventory of class", neutron_exc.PlacementInventoryNotFound) + "No inventory of class", placement_exc.PlacementInventoryNotFound) def test_get_inventory_not_found_unknown_cause(self): self._test_get_inventory_not_found("Unknown cause", ks_exc.NotFound) @@ -2232,7 +2232,7 @@ class PlacementAPIClientTestCase(base.DietTestCase): expected_payload = 'fake_inventory' resource_class = 'fake_resource_class' self.mock_request.side_effect = ks_exc.Conflict - self.assertRaises(neutron_exc.PlacementInventoryUpdateConflict, + self.assertRaises(placement_exc.PlacementInventoryUpdateConflict, self.client.update_inventory, rp_uuid, expected_payload, resource_class) @@ -2261,11 +2261,11 @@ class PlacementAPIClientTestCase(base.DietTestCase): def test_list_aggregates_not_found(self): rp_uuid = uuidutils.generate_uuid() self.mock_request.side_effect = ks_exc.NotFound - self.assertRaises(neutron_exc.PlacementAggregateNotFound, + self.assertRaises(placement_exc.PlacementAggregateNotFound, self.client.list_aggregates, rp_uuid) def test_placement_api_not_found(self): rp_uuid = uuidutils.generate_uuid() self.mock_request.side_effect = ks_exc.EndpointNotFound - self.assertRaises(neutron_exc.PlacementEndpointNotFound, + self.assertRaises(placement_exc.PlacementEndpointNotFound, self.client.list_aggregates, rp_uuid)