Remove cyclic import between rpcapi and objects.base

There was a cyclic import between conductor.rpcapi and objects.base,
this was initally fixed by doing an import at runtime. This patch fixes
the import cycle for good.

Change-Id: I8ee8c47652de75430312f77ddee08adc7a237d2b
Closes-Bug: #1623074
This commit is contained in:
Sam Betts 2016-09-13 15:55:44 +01:00
parent 991d3a9f2b
commit 57d4e0ce3d
3 changed files with 46 additions and 31 deletions

View File

@ -23,6 +23,7 @@ from oslo_config import cfg
from ironic.common import service as ironic_service
from ironic.objects import base
from ironic.objects import indirection
CONF = cfg.CONF
@ -32,7 +33,8 @@ def main():
ironic_service.prepare_service(sys.argv)
# Enable object backporting via the conductor
base.IronicObject.indirection_api = base.IronicObjectIndirectionAPI()
base.IronicObject.indirection_api = (
indirection.IronicObjectIndirectionAPI())
# Build and start the WSGI app
launcher = ironic_service.process_launcher()

View File

@ -90,36 +90,6 @@ class IronicObject(object_base.VersionedObject):
return obj
class IronicObjectIndirectionAPI(object_base.VersionedObjectIndirectionAPI):
def __init__(self):
super(IronicObjectIndirectionAPI, self).__init__()
# FIXME(xek): importing here due to a cyclical import error
from ironic.conductor import rpcapi as conductor_api
self._conductor = conductor_api.ConductorAPI()
def object_action(self, context, objinst, objmethod, args, kwargs):
return self._conductor.object_action(context, objinst, objmethod,
args, kwargs)
def object_class_action(self, context, objname, objmethod, objver,
args, kwargs):
# NOTE(xek): This method is implemented for compatibility with
# oslo.versionedobjects 0.10.0 and older. It will be replaced by
# object_class_action_versions.
versions = object_base.obj_tree_get_versions(objname)
return self.object_class_action_versions(
context, objname, objmethod, versions, args, kwargs)
def object_class_action_versions(self, context, objname, objmethod,
object_versions, args, kwargs):
return self._conductor.object_class_action_versions(
context, objname, objmethod, object_versions, args, kwargs)
def object_backport_versions(self, context, objinst, object_versions):
return self._conductor.object_backport_versions(context, objinst,
object_versions)
class IronicObjectSerializer(object_base.VersionedObjectSerializer):
# Base class to use for object hydration
OBJ_BASE_CLASS = IronicObject

View File

@ -0,0 +1,43 @@
# 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 oslo_versionedobjects import base as object_base
from ironic.conductor import rpcapi as conductor_api
class IronicObjectIndirectionAPI(object_base.VersionedObjectIndirectionAPI):
def __init__(self):
super(IronicObjectIndirectionAPI, self).__init__()
self._conductor = conductor_api.ConductorAPI()
def object_action(self, context, objinst, objmethod, args, kwargs):
return self._conductor.object_action(context, objinst, objmethod,
args, kwargs)
def object_class_action(self, context, objname, objmethod, objver,
args, kwargs):
# NOTE(xek): This method is implemented for compatibility with
# oslo.versionedobjects 0.10.0 and older. It will be replaced by
# object_class_action_versions.
versions = object_base.obj_tree_get_versions(objname)
return self.object_class_action_versions(
context, objname, objmethod, versions, args, kwargs)
def object_class_action_versions(self, context, objname, objmethod,
object_versions, args, kwargs):
return self._conductor.object_class_action_versions(
context, objname, objmethod, object_versions, args, kwargs)
def object_backport_versions(self, context, objinst, object_versions):
return self._conductor.object_backport_versions(context, objinst,
object_versions)