Check arg type for SegmentTypeDriver functions
Change 68ac442f11a6698bc43210fae877ba3809b1c02d introduce refactor and start passing context instead of session. For those who still use old TypeDriver usage methods * allocate_fully_specified_segment * allocate_partially_specified_segment can end up with error. Current change adds check for type of the argument that has been passed. Change-Id: I8c6e60408dcc0a83ac401585c7cf962a84af92bd
This commit is contained in:
parent
601309d937
commit
59727be401
|
@ -22,6 +22,7 @@ from oslo_log import log
|
||||||
|
|
||||||
from neutron._i18n import _LE
|
from neutron._i18n import _LE
|
||||||
from neutron.common import exceptions as exc
|
from neutron.common import exceptions as exc
|
||||||
|
from neutron import context as neutron_ctx
|
||||||
from neutron.plugins.common import utils as p_utils
|
from neutron.plugins.common import utils as p_utils
|
||||||
from neutron.plugins.ml2 import driver_api as api
|
from neutron.plugins.ml2 import driver_api as api
|
||||||
|
|
||||||
|
@ -60,6 +61,12 @@ class SegmentTypeDriver(BaseTypeDriver):
|
||||||
self.primary_keys = set(dict(model.__table__.columns))
|
self.primary_keys = set(dict(model.__table__.columns))
|
||||||
self.primary_keys.remove("allocated")
|
self.primary_keys.remove("allocated")
|
||||||
|
|
||||||
|
# TODO(ataraday): get rid of this method when old TypeDriver won't be used
|
||||||
|
def _get_session(self, arg):
|
||||||
|
if isinstance(arg, neutron_ctx.Context):
|
||||||
|
return arg.session
|
||||||
|
return arg
|
||||||
|
|
||||||
def allocate_fully_specified_segment(self, context, **raw_segment):
|
def allocate_fully_specified_segment(self, context, **raw_segment):
|
||||||
"""Allocate segment fully specified by raw_segment.
|
"""Allocate segment fully specified by raw_segment.
|
||||||
|
|
||||||
|
@ -69,10 +76,11 @@ class SegmentTypeDriver(BaseTypeDriver):
|
||||||
"""
|
"""
|
||||||
|
|
||||||
network_type = self.get_type()
|
network_type = self.get_type()
|
||||||
|
session = self._get_session(context)
|
||||||
try:
|
try:
|
||||||
with context.session.begin(subtransactions=True):
|
with session.begin(subtransactions=True):
|
||||||
alloc = (
|
alloc = (
|
||||||
context.session.query(self.model).filter_by(**raw_segment).
|
session.query(self.model).filter_by(**raw_segment).
|
||||||
first())
|
first())
|
||||||
if alloc:
|
if alloc:
|
||||||
if alloc.allocated:
|
if alloc.allocated:
|
||||||
|
@ -84,7 +92,7 @@ class SegmentTypeDriver(BaseTypeDriver):
|
||||||
"started ",
|
"started ",
|
||||||
{"type": network_type,
|
{"type": network_type,
|
||||||
"segment": raw_segment})
|
"segment": raw_segment})
|
||||||
count = (context.session.query(self.model).
|
count = (session.query(self.model).
|
||||||
filter_by(allocated=False, **raw_segment).
|
filter_by(allocated=False, **raw_segment).
|
||||||
update({"allocated": True}))
|
update({"allocated": True}))
|
||||||
if count:
|
if count:
|
||||||
|
@ -105,7 +113,7 @@ class SegmentTypeDriver(BaseTypeDriver):
|
||||||
LOG.debug("%(type)s segment %(segment)s create started",
|
LOG.debug("%(type)s segment %(segment)s create started",
|
||||||
{"type": network_type, "segment": raw_segment})
|
{"type": network_type, "segment": raw_segment})
|
||||||
alloc = self.model(allocated=True, **raw_segment)
|
alloc = self.model(allocated=True, **raw_segment)
|
||||||
alloc.save(context.session)
|
alloc.save(session)
|
||||||
LOG.debug("%(type)s segment %(segment)s create done",
|
LOG.debug("%(type)s segment %(segment)s create done",
|
||||||
{"type": network_type, "segment": raw_segment})
|
{"type": network_type, "segment": raw_segment})
|
||||||
|
|
||||||
|
@ -124,8 +132,9 @@ class SegmentTypeDriver(BaseTypeDriver):
|
||||||
"""
|
"""
|
||||||
|
|
||||||
network_type = self.get_type()
|
network_type = self.get_type()
|
||||||
with context.session.begin(subtransactions=True):
|
session = self._get_session(context)
|
||||||
select = (context.session.query(self.model).
|
with session.begin(subtransactions=True):
|
||||||
|
select = (session.query(self.model).
|
||||||
filter_by(allocated=False, **filters))
|
filter_by(allocated=False, **filters))
|
||||||
|
|
||||||
# Selected segment can be allocated before update by someone else,
|
# Selected segment can be allocated before update by someone else,
|
||||||
|
@ -141,7 +150,7 @@ class SegmentTypeDriver(BaseTypeDriver):
|
||||||
"started with %(segment)s ",
|
"started with %(segment)s ",
|
||||||
{"type": network_type,
|
{"type": network_type,
|
||||||
"segment": raw_segment})
|
"segment": raw_segment})
|
||||||
count = (context.session.query(self.model).
|
count = (session.query(self.model).
|
||||||
filter_by(allocated=False, **raw_segment).
|
filter_by(allocated=False, **raw_segment).
|
||||||
update({"allocated": True}))
|
update({"allocated": True}))
|
||||||
if count:
|
if count:
|
||||||
|
|
Loading…
Reference in New Issue