这篇文章,我们来详细的分析一下Nova Compute服务的update_available_resource定时任务。
update_available_resource定时任务的主要功能是定时更新Nova Compute服务所管理的计算节点的资源信息,它对应的周期方法就是ComputeManager类的update_available_resource方法。来看一下update_available_resource方法。
class ComputeManager(manager.SchedulerDepedentManager):
@manager.periodic_task
def update_available_resource(self, context):
new_resource_tracker_dict = {}
#获取Nova Compute服务所有可用的节点
nodenames = set(self.driver.get_available_nodes())
for nodename in nodenames:
#获取计算节点的ResourceTracker对象
rt = self._get_resource_tracker(nodename)
#更新计算节点的资源信息
rt.update_available_resource(context)
#保存计算节点的资源信息
new_resource_tracker_dict[nodename] = rt
#获取数据库中所有的计算节点
compute_nodes_in_db = self._get_compute_nodes_in_db(context)
for cn in compute_nodes_in_db:
#从数据库中删除不可用的计算节点
if cn.get('hypervisor_hostname') not in nodenames:
LOG.audit(_("Deleting orphan compute node %s") % cn['id'])
self.conductor_api.compute_node_delete(context, cn)
self._resource_tracker_dict = new_resource_tracker_dict
可以看到update_available_resource方法主要实现了更新_reso