OpenStack数据库对象远程操作
在OpenStack的各个服务之间有些数据库对象是可以远程操作的,远程对象所实现的效果是:Compute服务中的数据库方法,可以经过indirection_api重定向到Conductor服务,这样Compute调用的数据库方法实际由Conductor服务执行
以instance的save()方法为例,有一个@base.remotable装饰器
/nova/objects/instance.py
@base.remotable
def save(self, expected_vm_state=None,
expected_task_state=None, admin_state_reset=False):
有了这个装饰器,通过在nova-compute服务中为indirection_api赋值到conductor_rpcapi.ConductorAPI后, save()方法就经过重定向到达nova-conductor服务中,如果没有定义indirection_api则在本服务运行save()。
indirection_api在nova-compute服务中有赋值,而在其他服务中没有:
nova/cmd/compute.py
CONF = nova.conf.CONF
def