nova event

 nova处理neutron发送过来的event事件。暂时追踪nova event部分代码

tail -f /var/log/nova/nova-api.log  下面就是一个事件  Creating event network-vif-plugged:

 

对代码不熟的话直接代码中的关键字 

 

 

调用create方法

def create(self, req, body):

 1 if accepted_events:
 2             '''
 3                self.compute_api.external_instance_event 方法在这里===>  /usr/lib/python2.7/site-packages/nova/compute/api.py 
 4                
 5                里面就是这个方法
 6                def external_instance_event(self, context, instances, events):    
 7             '''
 8             LOG.info(_LI(type(self.compute_api)))
 9             self.compute_api.external_instance_event(
10                 context, accepted_instances, accepted_events)
11         else:
12             msg = _('No instances found for any event')
13             raise webob.exc.HTTPNotFound(explanation=msg)
14 
15         # FIXME(cyeoh): This needs some infrastructure support so that
16         # we have a general way to do this
17         robj = wsgi.ResponseObject({'events': response_events})
18         robj._code = result
19         #LOG.info(_LI("=======>def create:"))
20         ''' robj.obj对象中的内容,内容大概可以看出是跟某个vm有关的并且status字段是completed.
21         {'events': [{u'status': 'completed', u'tag': u'8e781f3d-1b9b-4e37-a699-ae7a122c89f0', u'name': u'network-vif-plugged', u'server_uuid': u'1013d789-735b-4047-878b-beda1809f6be', 'code': 200}, 
22                    {u'status': 'completed', u'tag': u'd4e29058-4d6c-4a8a-9741-e59c8f986df2', u'name': u'network-vif-plugged', u'server_uuid': u'9cf6584f-2fa5-4aea-ac37-cc2bc152012a', 'code': 200}]}
23         '''
24         #LOG.info(_LI(":::::::>%s"%repr(robj.obj)))
25         return robj

改完后重启nova-api服务器,查看日志就能看出

 

继续上面代码self.compute_api.external_instance_event 去发送rpc调用

/usr/lib/python2.7/site-packages/nova/compute/api.py

for host in instances_by_host:
            # TODO(salv-orlando): Handle exceptions raised by the rpc api layer
            # in order to ensure that a failure in processing events on a host
            # will not prevent processing events on other hosts
              
            #这里循环的host就是计算节点名字 
            LOG.info("host:%s"%repr(host))

            '''
            [InstanceExternalEvent(data=<?>,instance_uuid=327acc17-4495-4d30-94b4-7a3d5d2e0504,name='network-vif-plugged',status='completed',tag='7b03e150-be1e-4f19-89a9-534846abf955'), 

InstanceExternalEvent(data=<?>,instance_uuid=86cd3487-9664-4f5a-a3d7-30e2dfe7c3da,name='network-vif-plugged',status='completed',tag='9e1a2e3a-090e-405c-beca-de4baa18a02d'), 

InstanceExternalEvent(data=<?>,instance_uuid=5bf2966a-5323-4882-895e-da9bb0b61a03,name='network-vif-plugged',status='completed',tag='816ea553-e6bb-4975-bf44-1350f7737e34')]         
            状态完成
            status='completed'
            tag='816ea553-e6bb-4975-bf44-1350f7737e34' 计算节点上创建的虚拟机网卡名称如:tap816ea553-e6 
            '''
            #打印内容是上面的注释,
            LOG.info("events_by_host[host]:%s"%repr(events_by_host[host]))

            # compute_rpcapi ====> /usr/lib/python2.7/site-packages/nova/compute/rpcapi.py 下面有个external_instance_event方法
            self.compute_rpcapi.external_instance_event(
                context, instances_by_host[host], events_by_host[host],
                host=host)

 

追踪self.compute_rpcapi.external_instance_event

 1 def external_instance_event(self, ctxt, instances, events, host=None):
 2         LOG.info(_LI("external_instance_event::::::>rpcapi"))
 3         #LOG.info(_LI("ctxt::%s"%repr(ctxt)))
 4         #LOG.info("instances::%s"%repr(instances[0]))
 5         #LOG.info(_LI("events::%s"%repr(events)))
 6         #LOG.info(_LI("host::%s"%repr(host)))      
 7 
 8 
 9         instance = instances[0]
10         cctxt = self.router.by_instance(ctxt, instance).prepare(
11             server=_compute_host(host, instance),
12             version='4.0')
13         
14         #ccxt.cast 异步方式,api调用的方法和传递的值
15         #self.compute_rpcapi.external_instance_event(
16         #        context, instances_by_host[host], events_by_host[host],
17         #        host=host)
18        
19         cctxt.cast(ctxt, 'external_instance_event', instances=instances,
20                    events=events)

追踪到这里出现了一个问题这个方法  无法追踪下去了  external_instance_event  如果有大神看到指点小弟一下哈哈!!!

 /usr/lib/python2.7/site-packages/nova/compute/manager.py  正常应该是这个文件下的  

posted @ 2017-06-26 16:58  MKY-门可意  阅读(338)  评论(0编辑  收藏  举报