nova instance启动中的同步与异步
发布日期:2021-08-15 20:51:55 浏览次数:6 分类:技术文章

本文共 2335 字,大约阅读时间需要 7 分钟。

instance create:

nova/api/servers.create -- self.compute_api.create -- self.compute_task_api.build_instances
-- self.conductor_compute_rpcapi.build_instances(conductorp/api.py) --  cctxt.cast(context, 'build_instances', **kw)
从nova api到conductor的调用为异步
conductor manager 里面:
1. hosts = self._schedule_instances:
-- self.scheduler_client.select_destinations -- self.scheduler_rpcapi.select_destinations -- cctxt.call(ctxt, 'select_destinations'
从conductor调用select_destinations到scheduler采用同步

所以,当FilterScheduler有异常:

            reason = _('There are not enough hosts available.')

            raise exception.NoValidHost(reason=reason)

scheduler manager 中利用@messaging.expected_exceptions(exception.NoValidHost)

把该异常传回给conductor,conductor在这里捕获该异常并把状态设置为ERROR:

except Exception as exc:            updates = {
'vm_state': vm_states.ERROR, 'task_state': None} for instance in instances: self._set_vm_state_and_notify( context, instance.uuid, 'build_instances', updates, exc, request_spec) return

出错为:

nova.scheduler.utils [^[[01;36mreq-7ceeb23a-1d2e-401b-bbb7-2d8058715e82 ^[[00;36madmin admin^[[01;33m] ^[[01;35m^[[01;33mFailed to compute_task_build_instances: No valid host was found. There are not enough hosts available.Traceback (most recent call last):  File "/usr/local/lib/python2.7/dist-packages/oslo_messaging/rpc/server.py", line 150, in inner    return func(*args, **kwargs)  File "/opt/stack/nova/nova/scheduler/manager.py", line 71, in select_destinations    filter_properties)  File "/opt/stack/nova/nova/scheduler/filter_scheduler.py", line 81, in select_destinations    raise exception.NoValidHost(reason=reason)NoValidHost: No valid host was found. There are not enough hosts available.^[[00m2016-01-07 02:26:32.496 ^[[01;33mWARNING nova.scheduler.utils [^[[01;36mreq-7ceeb23a-1d2e-401b-bbb7-2d8058715e82 ^[[00;36madmin admin^[[01;33m] ^[[01;35m[instance: 47b93a3e-b7d1-428f-9b7c-edd80c0735db] ^[[01;33mSetting instance to ERROR state.^[[00m

2. self.compute_rpcapi.build_and_run_instance:

cctxt.cast(ctxt, 'build_and_run_instance -- utils.spawn_n -- eventlet.spawn_n
从conductor调用到compute为异步调用

 

其他:

conductor/rpcapi/ComputeTaskAPI中,对conductor的远程调用

migrate_server为同步

其他build_instances/unshelve_instance/rebuild_instance均为异步

 

转载于:https://www.cnblogs.com/allcloud/p/5108718.html

转载地址:https://blog.csdn.net/weixin_30779691/article/details/98086666 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:Node.js用ES6原生Promise对异步函数进行封装
下一篇:垂直对齐:vertical-align属性——使用中注意事项

发表评论

最新留言

能坚持,总会有不一样的收获!
[***.219.124.196]2024年04月16日 07时08分12秒