b28d5c4581
Fixes bug 1085861 Live-migration with Ryu plugin doesn't work because the unique constraint of PortBinding table is violated as follows. Now Ryu can handle those informations itself, so remove the table itself and simplify Ryu plugin. > ERROR [quantum.api.v2.resource] update failed > Traceback (most recent call last): > File "/quantum/api/v2/resource.py", line 95, in resource > result = method(request=request, **args) > File "/quantum/api/v2/base.py", line 397, in update > obj = obj_updater(request.context, id, **kwargs) > File "/quantum/plugins/ryu/ryu_quantum_plugin.py", line 226, in update_port > port_binding.dpid, port_binding.port_no)) > InvalidInput: Invalid input for operation: invalid (datapath_id, port_no) requested (00002eab88ec5140, 4), but (0000c2f19014c74a, 1). Change-Id: I7d993fd01125a27f6bf8e1b3fcac79ddcb8cb361
55 lines
2.0 KiB
Python
55 lines
2.0 KiB
Python
# vim: tabstop=4 shiftwidth=4 softtabstop=4
|
|
# Copyright 2012 Isaku Yamahata <yamahata at private email ne jp>
|
|
# All Rights Reserved.
|
|
#
|
|
# 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.
|
|
|
|
import sqlalchemy as sa
|
|
|
|
from quantum.db import model_base
|
|
|
|
|
|
class OFPServer(model_base.BASEV2):
|
|
"""Openflow Server/API address."""
|
|
__tablename__ = 'ofp_server'
|
|
|
|
id = sa.Column(sa.Integer, primary_key=True, autoincrement=True)
|
|
address = sa.Column(sa.String(64)) # netloc <host ip address>:<port>
|
|
host_type = sa.Column(sa.String(255)) # server type
|
|
# Controller, REST_API
|
|
|
|
def __repr__(self):
|
|
return "<OFPServer(%s,%s,%s)>" % (self.id, self.address,
|
|
self.host_type)
|
|
|
|
|
|
class TunnelKeyLast(model_base.BASEV2):
|
|
"""Lastly allocated Tunnel key. The next key allocation will be started
|
|
from this value + 1
|
|
"""
|
|
last_key = sa.Column(sa.Integer, primary_key=True)
|
|
|
|
def __repr__(self):
|
|
return "<TunnelKeyLast(%x)>" % self.last_key
|
|
|
|
|
|
class TunnelKey(model_base.BASEV2):
|
|
"""Netowrk ID <-> tunnel key mapping."""
|
|
network_id = sa.Column(sa.String(36), sa.ForeignKey("networks.id"),
|
|
nullable=False)
|
|
tunnel_key = sa.Column(sa.Integer, primary_key=True,
|
|
nullable=False, autoincrement=False)
|
|
|
|
def __repr__(self):
|
|
return "<TunnelKey(%s,%x)>" % (self.network_id, self.tunnel_key)
|