Add cluster job distribution
This patch adds a new mechanism to distribute jobs to c-vol nodes with the addition of the "cluster" configuration option. DocImpact: New cluster configuration option Specs: https://review.openstack.org/327283 Implements: blueprint cinder-volume-active-active-support Change-Id: Id0a2e4c6a7b5f17e4ee3484ae1b53c03d472b586
This commit is contained in:
@@ -191,49 +191,51 @@ class RPCAPI(object):
|
||||
def __init__(self):
|
||||
target = messaging.Target(topic=self.TOPIC,
|
||||
version=self.RPC_API_VERSION)
|
||||
obj_version_cap = self._determine_obj_version_cap()
|
||||
obj_version_cap = self.determine_obj_version_cap()
|
||||
serializer = base.CinderObjectSerializer(obj_version_cap)
|
||||
|
||||
rpc_version_cap = self._determine_rpc_version_cap()
|
||||
rpc_version_cap = self.determine_rpc_version_cap()
|
||||
self.client = get_client(target, version_cap=rpc_version_cap,
|
||||
serializer=serializer)
|
||||
|
||||
def _determine_rpc_version_cap(self):
|
||||
@classmethod
|
||||
def determine_rpc_version_cap(cls):
|
||||
global LAST_RPC_VERSIONS
|
||||
if self.BINARY in LAST_RPC_VERSIONS:
|
||||
return LAST_RPC_VERSIONS[self.BINARY]
|
||||
if cls.BINARY in LAST_RPC_VERSIONS:
|
||||
return LAST_RPC_VERSIONS[cls.BINARY]
|
||||
|
||||
version_cap = objects.Service.get_minimum_rpc_version(
|
||||
cinder.context.get_admin_context(), self.BINARY)
|
||||
cinder.context.get_admin_context(), cls.BINARY)
|
||||
if version_cap == 'liberty':
|
||||
# NOTE(dulek): This means that one of the services is Liberty,
|
||||
# we should cap to it's RPC version.
|
||||
version_cap = LIBERTY_RPC_VERSIONS[self.BINARY]
|
||||
version_cap = LIBERTY_RPC_VERSIONS[cls.BINARY]
|
||||
elif not version_cap:
|
||||
# If there is no service we assume they will come up later and will
|
||||
# have the same version as we do.
|
||||
version_cap = self.RPC_API_VERSION
|
||||
version_cap = cls.RPC_API_VERSION
|
||||
LOG.info(_LI('Automatically selected %(binary)s RPC version '
|
||||
'%(version)s as minimum service version.'),
|
||||
{'binary': self.BINARY, 'version': version_cap})
|
||||
LAST_RPC_VERSIONS[self.BINARY] = version_cap
|
||||
{'binary': cls.BINARY, 'version': version_cap})
|
||||
LAST_RPC_VERSIONS[cls.BINARY] = version_cap
|
||||
return version_cap
|
||||
|
||||
def _determine_obj_version_cap(self):
|
||||
@classmethod
|
||||
def determine_obj_version_cap(cls):
|
||||
global LAST_OBJ_VERSIONS
|
||||
if self.BINARY in LAST_OBJ_VERSIONS:
|
||||
return LAST_OBJ_VERSIONS[self.BINARY]
|
||||
if cls.BINARY in LAST_OBJ_VERSIONS:
|
||||
return LAST_OBJ_VERSIONS[cls.BINARY]
|
||||
|
||||
version_cap = objects.Service.get_minimum_obj_version(
|
||||
cinder.context.get_admin_context(), self.BINARY)
|
||||
cinder.context.get_admin_context(), cls.BINARY)
|
||||
# If there is no service we assume they will come up later and will
|
||||
# have the same version as we do.
|
||||
if not version_cap:
|
||||
version_cap = base.OBJ_VERSIONS.get_current()
|
||||
LOG.info(_LI('Automatically selected %(binary)s objects version '
|
||||
'%(version)s as minimum service version.'),
|
||||
{'binary': self.BINARY, 'version': version_cap})
|
||||
LAST_OBJ_VERSIONS[self.BINARY] = version_cap
|
||||
{'binary': cls.BINARY, 'version': version_cap})
|
||||
LAST_OBJ_VERSIONS[cls.BINARY] = version_cap
|
||||
return version_cap
|
||||
|
||||
|
||||
|
Reference in New Issue
Block a user