Add the missing arg of RetryRequest exception in _lock_subnetpool
RetryRequest exception defined in oslo.db need be called with a arg which describes the inner exception. _lock_subnetpool method missed this arg, and this patch adds it. Change-Id: I44869c97ecd7d59d40d8793c71515067a237150b Closes-Bug: #1506818
This commit is contained in:
parent
00f5fedab0
commit
2cef12aeb2
@ -161,6 +161,16 @@ class SubnetInUse(InUse):
|
||||
super(SubnetInUse, self).__init__(**kwargs)
|
||||
|
||||
|
||||
class SubnetPoolInUse(InUse):
|
||||
message = _("Unable to complete operation on subnet pool "
|
||||
"%(subnet_pool_id)s. %(reason)s.")
|
||||
|
||||
def __init__(self, **kwargs):
|
||||
if 'reason' not in kwargs:
|
||||
kwargs['reason'] = _("Two or more concurrent subnets allocated.")
|
||||
super(SubnetPoolInUse, self).__init__(**kwargs)
|
||||
|
||||
|
||||
class PortInUse(InUse):
|
||||
message = _("Unable to complete operation on port %(port_id)s "
|
||||
"for network %(net_id)s. Port already has an attached "
|
||||
|
@ -63,7 +63,8 @@ class SubnetAllocator(driver.Pool):
|
||||
id=self._subnetpool['id'], hash=current_hash)
|
||||
count = query.update({'hash': new_hash})
|
||||
if not count:
|
||||
raise db_exc.RetryRequest()
|
||||
raise db_exc.RetryRequest(n_exc.SubnetPoolInUse(
|
||||
subnet_pool_id=self._subnetpool['id']))
|
||||
|
||||
def _get_allocated_cidrs(self):
|
||||
query = self._context.session.query(models_v2.Subnet)
|
||||
|
@ -13,8 +13,10 @@
|
||||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
|
||||
import mock
|
||||
import netaddr
|
||||
from oslo_config import cfg
|
||||
from oslo_db import exception as db_exc
|
||||
from oslo_utils import uuidutils
|
||||
|
||||
from neutron.api.v2 import attributes
|
||||
@ -183,3 +185,15 @@ class TestSubnetAllocation(testlib_api.SqlTestCase):
|
||||
self.assertRaises(n_exc.SubnetPoolQuotaExceeded,
|
||||
sa.allocate_subnet,
|
||||
req)
|
||||
|
||||
def test_subnetpool_concurrent_allocation_exception(self):
|
||||
sp = self._create_subnet_pool(self.plugin, self.ctx, 'test-sp',
|
||||
['fe80::/48'],
|
||||
48, 6, default_quota=1)
|
||||
sp = self.plugin._get_subnetpool(self.ctx, sp['id'])
|
||||
sa = subnet_alloc.SubnetAllocator(sp, self.ctx)
|
||||
req = ipam_req.SpecificSubnetRequest(self._tenant_id,
|
||||
uuidutils.generate_uuid(),
|
||||
'fe80::/63')
|
||||
with mock.patch("sqlalchemy.orm.query.Query.update", return_value=0):
|
||||
self.assertRaises(db_exc.RetryRequest, sa.allocate_subnet, req)
|
||||
|
Loading…
Reference in New Issue
Block a user