bbe1347e4e
To work around the ZMQ issues (publisher binds to a port, thus only one publisher can work on a given IP), we had a lot of junk code in our repo. Removed all redundant mechanisms (use_multiproc, is_neutron_server) and modified to have 2 types of configurable ZMQ drivers: 1. zmq_remote_pubsub_driver - Has TCP publisher and IPC subscriber, This should be used in the publisher service. 2. zmq_pubsub_driver - Has IPC publisher and TCP subscriberi, This should be used in all other uses. The way to set the one to use is via configuration, thus it is up to the deployment to make sure this is configured correctly. Change-Id: Ibf7894e608187e87bdeb7774749bfa0cc15eae56
166 lines
5.4 KiB
Python
166 lines
5.4 KiB
Python
# 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 abc
|
|
|
|
import six
|
|
|
|
|
|
@six.add_metaclass(abc.ABCMeta)
|
|
class DbApi(object):
|
|
|
|
@abc.abstractmethod
|
|
def initialize(self, db_ip, db_port, **args):
|
|
"""Initialize the DB client
|
|
|
|
:param db_ip: DB server IP address
|
|
:type db_ip: string
|
|
:param db_port: DB server port number
|
|
:type db_port: int
|
|
:param args: Additional args that were read from configuration
|
|
file
|
|
:type args: dictionary of <string, object>
|
|
:returns: None
|
|
"""
|
|
|
|
@abc.abstractmethod
|
|
def create_table(self, table):
|
|
"""Create a table
|
|
|
|
:param table: table name
|
|
:type table: string
|
|
:returns: None
|
|
"""
|
|
|
|
@abc.abstractmethod
|
|
def delete_table(self, table):
|
|
"""Delete a table. Delete all items in the table.
|
|
Reading any key from the table without re-creating it should
|
|
raise an exception.
|
|
|
|
:param table: table name
|
|
:type table: string
|
|
:returns: None
|
|
"""
|
|
|
|
@abc.abstractmethod
|
|
def get_key(self, table, key, topic=None):
|
|
"""Get the value of a specific key in a table. If the key does not
|
|
exist, raise a DBKeyNotFound error.
|
|
|
|
topic is an optional value which may be used to optimise the search
|
|
for the key.
|
|
|
|
:param table: table name
|
|
:type table: string
|
|
:param key: key name
|
|
:type key: string
|
|
:param topic: optional topic to aid in key lookup
|
|
:type topic: string
|
|
:returns: string - the key value
|
|
:raises DragonflowException.DBKeyNotFound: if key not found
|
|
"""
|
|
|
|
@abc.abstractmethod
|
|
def set_key(self, table, key, value, topic=None):
|
|
"""Set a specific key in a table with value. If the key does not
|
|
exist, the implementation may either:
|
|
1. Raise a DBLeyNotFound error
|
|
2. Create the key as if create_key was called.
|
|
Exactly one of these two option must be implemented
|
|
|
|
:param table: table name
|
|
:type table: string
|
|
:param key: key name
|
|
:type key: string
|
|
:param value: value to set for the key
|
|
:type value: string
|
|
:param topic: optional topic to aid in key lookup
|
|
:type topic: string
|
|
:returns: None
|
|
:raises DragonflowException.DBKeyNotFound: if key not found, and was
|
|
not created
|
|
"""
|
|
|
|
@abc.abstractmethod
|
|
def create_key(self, table, key, value, topic=None):
|
|
"""Create a specific key in a table with value
|
|
|
|
:param table: table name
|
|
:type table: string
|
|
:param key: key name
|
|
:type key: string
|
|
:param value: value to set for the created key
|
|
:type value: string
|
|
:param topic: optional topic to aid in key lookup
|
|
:type topic: string
|
|
:returns: None
|
|
"""
|
|
|
|
@abc.abstractmethod
|
|
def delete_key(self, table, key, topic=None):
|
|
"""Delete a specific key from a table. If the key does not exist,
|
|
raise a DBKeyNotFound error.
|
|
|
|
:param table: table name
|
|
:type table: string
|
|
:param key: key name
|
|
:type key: string
|
|
:param topic: optional topic to aid in key lookup
|
|
:type topic: string
|
|
:returns: None
|
|
:raises DragonflowException.DBKeyNotFound: if key not found
|
|
"""
|
|
|
|
@abc.abstractmethod
|
|
def get_all_entries(self, table, topic=None):
|
|
"""Returns a list of all table entries values. If the table does
|
|
not exist, or is empty, return an empty list.
|
|
|
|
:param table: table name
|
|
:type table: string
|
|
:param topic: get only entries matching this topic
|
|
:type topic: string
|
|
:returns: list of values
|
|
"""
|
|
|
|
@abc.abstractmethod
|
|
def get_all_keys(self, table, topic=None):
|
|
"""Returns a list of all table entries keys. If the table does not
|
|
exist, or is empty, return an empty list.
|
|
|
|
:param table: table name
|
|
:type table: string
|
|
:param topic: get all keys matching this topic
|
|
:type topic: string
|
|
:returns: list of keys
|
|
"""
|
|
|
|
@abc.abstractmethod
|
|
def allocate_unique_key(self, table):
|
|
"""Allocate a unique id in the controller
|
|
|
|
The allocation information should be managed in the 'unique_key'
|
|
table and stored by table name, s.t. the state can be extracted and
|
|
restored by get_key/set_key calls.
|
|
|
|
:table: The name of resource table
|
|
:returns: Unique id
|
|
"""
|
|
|
|
@abc.abstractmethod
|
|
def process_ha(self):
|
|
"""Process HA functions
|
|
|
|
:returns: None
|
|
"""
|