Relocate Metering DB models

This patch will separate metering db models from mixins
for OVO implementation work.

Change-Id: If1bdb64c36e1993d62269d390d3d18144b6c492d
Partial-Bug: #1597913
This commit is contained in:
Manjeet Singh Bhatia 2016-07-29 07:05:06 +00:00
parent 571999037f
commit 820270fcac
3 changed files with 85 additions and 51 deletions

View File

@ -13,44 +13,20 @@
# under the License.
import netaddr
from neutron_lib.db import model_base
from oslo_utils import uuidutils
import sqlalchemy as sa
from sqlalchemy import orm
from sqlalchemy import sql
from neutron.api.rpc.agentnotifiers import metering_rpc_agent_api
from neutron.api.v2 import attributes as attr
from neutron.common import _deprecate
from neutron.common import constants
from neutron.db import common_db_mixin as base_db
from neutron.db.models import l3 as l3_models
from neutron.db.models import metering as metering_models
from neutron.extensions import metering
class MeteringLabelRule(model_base.BASEV2, model_base.HasId):
direction = sa.Column(sa.Enum('ingress', 'egress',
name='meteringlabels_direction'))
remote_ip_prefix = sa.Column(sa.String(64))
metering_label_id = sa.Column(sa.String(36),
sa.ForeignKey("meteringlabels.id",
ondelete="CASCADE"),
nullable=False)
excluded = sa.Column(sa.Boolean, default=False, server_default=sql.false())
class MeteringLabel(model_base.BASEV2,
model_base.HasId,
model_base.HasProject):
name = sa.Column(sa.String(attr.NAME_MAX_LEN))
description = sa.Column(sa.String(attr.LONG_DESCRIPTION_MAX_LEN))
rules = orm.relationship(MeteringLabelRule, backref="label",
cascade="delete", lazy="joined")
routers = orm.relationship(
l3_models.Router,
primaryjoin="MeteringLabel.tenant_id==Router.tenant_id",
foreign_keys='MeteringLabel.tenant_id',
uselist=True)
shared = sa.Column(sa.Boolean, default=False, server_default=sql.false())
_deprecate._moved_global('MeteringLabelRule', new_module=metering_models)
_deprecate._moved_global('MeteringLabel', new_module=metering_models)
class MeteringDbMixin(metering.MeteringPluginBase,
@ -71,11 +47,12 @@ class MeteringDbMixin(metering.MeteringPluginBase,
m = metering_label['metering_label']
with context.session.begin(subtransactions=True):
metering_db = MeteringLabel(id=uuidutils.generate_uuid(),
description=m['description'],
tenant_id=m['tenant_id'],
name=m['name'],
shared=m['shared'])
metering_db = metering_models.MeteringLabel(
id=uuidutils.generate_uuid(),
description=m['description'],
tenant_id=m['tenant_id'],
name=m['name'],
shared=m['shared'])
context.session.add(metering_db)
return self._make_metering_label_dict(metering_db)
@ -83,7 +60,9 @@ class MeteringDbMixin(metering.MeteringPluginBase,
def delete_metering_label(self, context, label_id):
with context.session.begin(subtransactions=True):
try:
label = self._get_by_id(context, MeteringLabel, label_id)
label = self._get_by_id(context,
metering_models.MeteringLabel,
label_id)
except orm.exc.NoResultFound:
raise metering.MeteringLabelNotFound(label_id=label_id)
@ -91,7 +70,9 @@ class MeteringDbMixin(metering.MeteringPluginBase,
def get_metering_label(self, context, label_id, fields=None):
try:
metering_label = self._get_by_id(context, MeteringLabel, label_id)
metering_label = self._get_by_id(context,
metering_models.MeteringLabel,
label_id)
except orm.exc.NoResultFound:
raise metering.MeteringLabelNotFound(label_id=label_id)
@ -102,7 +83,7 @@ class MeteringDbMixin(metering.MeteringPluginBase,
page_reverse=False):
marker_obj = self._get_marker_obj(context, 'metering_labels', limit,
marker)
return self._get_collection(context, MeteringLabel,
return self._get_collection(context, metering_models.MeteringLabel,
self._make_metering_label_dict,
filters=filters, fields=fields,
sorts=sorts,
@ -124,7 +105,7 @@ class MeteringDbMixin(metering.MeteringPluginBase,
marker_obj = self._get_marker_obj(context, 'metering_label_rules',
limit, marker)
return self._get_collection(context, MeteringLabelRule,
return self._get_collection(context, metering_models.MeteringLabelRule,
self._make_metering_label_rule_dict,
filters=filters, fields=fields,
sorts=sorts,
@ -134,8 +115,8 @@ class MeteringDbMixin(metering.MeteringPluginBase,
def get_metering_label_rule(self, context, rule_id, fields=None):
try:
metering_label_rule = self._get_by_id(context,
MeteringLabelRule, rule_id)
metering_label_rule = self._get_by_id(
context, metering_models.MeteringLabelRule, rule_id)
except orm.exc.NoResultFound:
raise metering.MeteringLabelRuleNotFound(rule_id=rule_id)
@ -168,11 +149,12 @@ class MeteringDbMixin(metering.MeteringPluginBase,
self._validate_cidr(context, label_id, ip_prefix, direction,
excluded)
metering_db = MeteringLabelRule(id=uuidutils.generate_uuid(),
metering_label_id=label_id,
direction=direction,
excluded=m['excluded'],
remote_ip_prefix=ip_prefix)
metering_db = metering_models.MeteringLabelRule(
id=uuidutils.generate_uuid(),
metering_label_id=label_id,
direction=direction,
excluded=m['excluded'],
remote_ip_prefix=ip_prefix)
context.session.add(metering_db)
return self._make_metering_label_rule_dict(metering_db)
@ -180,7 +162,9 @@ class MeteringDbMixin(metering.MeteringPluginBase,
def delete_metering_label_rule(self, context, rule_id):
with context.session.begin(subtransactions=True):
try:
rule = self._get_by_id(context, MeteringLabelRule, rule_id)
rule = self._get_by_id(context,
metering_models.MeteringLabelRule,
rule_id)
except orm.exc.NoResultFound:
raise metering.MeteringLabelRuleNotFound(rule_id=rule_id)
context.session.delete(rule)
@ -234,8 +218,9 @@ class MeteringDbMixin(metering.MeteringPluginBase,
return list(routers_dict.values())
def get_sync_data_for_rule(self, context, rule):
label = context.session.query(MeteringLabel).get(
rule['metering_label_id'])
label = context.session.query(
metering_models.MeteringLabel).get(
rule['metering_label_id'])
if label.shared:
routers = self._get_collection_query(context, l3_models.Router)
@ -253,12 +238,16 @@ class MeteringDbMixin(metering.MeteringPluginBase,
return list(routers_dict.values())
def get_sync_data_metering(self, context, label_id=None, router_ids=None):
labels = context.session.query(MeteringLabel)
labels = context.session.query(metering_models.MeteringLabel)
if label_id:
labels = labels.filter(MeteringLabel.id == label_id)
labels = labels.filter(
metering_models.MeteringLabel.id == label_id)
elif router_ids:
labels = (labels.join(MeteringLabel.routers).
labels = (labels.join(metering_models.MeteringLabel.routers).
filter(l3_models.Router.id.in_(router_ids)))
return self._process_sync_metering_data(context, labels)
_deprecate._MovedGlobals()

View File

@ -39,7 +39,6 @@ from neutron.db import l3_attrs_db # noqa
from neutron.db import l3_dvrscheduler_db # noqa
from neutron.db import l3_gwmode_db # noqa
from neutron.db import l3_hamode_db # noqa
from neutron.db.metering import metering_db # noqa
from neutron.db import models
from neutron.db import models_v2 # noqa
from neutron.db.port_security import models as ps_models # noqa

View File

@ -0,0 +1,46 @@
# Licensed under the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License. You may obtain
# a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
from neutron_lib.db import model_base
import sqlalchemy as sa
from sqlalchemy import orm
from sqlalchemy import sql
from neutron.api.v2 import attributes as attr
from neutron.db.models import l3 as l3_models
class MeteringLabelRule(model_base.BASEV2, model_base.HasId):
direction = sa.Column(sa.Enum('ingress', 'egress',
name='meteringlabels_direction'))
remote_ip_prefix = sa.Column(sa.String(64))
metering_label_id = sa.Column(sa.String(36),
sa.ForeignKey("meteringlabels.id",
ondelete="CASCADE"),
nullable=False)
excluded = sa.Column(sa.Boolean, default=False, server_default=sql.false())
class MeteringLabel(model_base.BASEV2,
model_base.HasId,
model_base.HasProject):
name = sa.Column(sa.String(attr.NAME_MAX_LEN))
description = sa.Column(sa.String(attr.LONG_DESCRIPTION_MAX_LEN))
rules = orm.relationship(MeteringLabelRule, backref="label",
cascade="delete", lazy="joined")
routers = orm.relationship(
l3_models.Router,
primaryjoin="MeteringLabel.tenant_id==Router.tenant_id",
foreign_keys='MeteringLabel.tenant_id',
uselist=True)
shared = sa.Column(sa.Boolean, default=False, server_default=sql.false())