Esempio n. 1
0
 def min_sd(self, context, **kwargs):
     compute_nodes = kwargs.get('nodes')
     instances = []
     for node in compute_nodes:
         node_instances = db.get_instances_stat(context,
                                                node['hypervisor_hostname'])
         instances.extend(node_instances)
     host_loads = lb_utils.fill_compute_stats(instances, compute_nodes)
     LOG.debug(_(host_loads))
     vm_host_map = []
     for instance in instances:
         for node in compute_nodes:
             h_hostname = node['hypervisor_hostname']
             # Source host shouldn't be use.
             if instance.instance['host'] != h_hostname:
                 sd = self._simulate_migration(instance, node, host_loads,
                                               compute_nodes)
                 vm_host_map.append({
                     'host': h_hostname,
                     'vm': instance['instance_uuid'],
                     'sd': sd
                 })
     vm_host_map = sorted(vm_host_map, key=lambda x: x['sd']['total_sd'])
     LOG.debug(_(vm_host_map))
     for vm_host in vm_host_map:
         instance = filter(lambda x: x['instance_uuid'] == vm_host['vm'],
                           instances)[0]
         instance_resources = lb_utils.get_instance_resources(instance)
         if instance_resources:
             filter_instance = {
                 'uuid': instance['instance_uuid'],
                 'resources': instance_resources
             }
             filtered = self.filter_hosts(context,
                                          filter_instance,
                                          compute_nodes,
                                          host=vm_host['host'])
             if not filtered[0]:
                 continue
             self.migrate(context, instance['instance_uuid'],
                          vm_host['host'])
             return
Esempio n. 2
0
 def _choose_instance_to_migrate(self, instances, extra_info=None):
     instances_params = []
     for i in instances:
         instance_resources = lb_utils.get_instance_resources(i)
         if instance_resources:
             instances_params.append(instance_resources)
     LOG.debug(_(instances_params))
     normalized_instances = lb_utils.normalize_params(instances_params)
     LOG.info(_(normalized_instances))
     if extra_info.get('cpu_overload'):
         normalized_instances = filter(lambda x: x['memory'] == 0,
                                       normalized_instances)
         extra_info['k_cpu'] = -1
     weighted_instances = self._weight_instances(normalized_instances,
                                                 extra_info)
     LOG.info(_(weighted_instances))
     for chosen_instance in weighted_instances:
         chosen_instance['resources'] = filter(
             lambda x: x['uuid'] == chosen_instance['uuid'],
             instances_params)[0]
         yield chosen_instance
Esempio n. 3
0
 def _choose_instance_to_migrate(self, instances, extra_info=None):
     instances_params = []
     for i in instances:
         instance_resources = lb_utils.get_instance_resources(i)
         if instance_resources:
             instances_params.append(instance_resources)
     LOG.debug(_(instances_params))
     normalized_instances = lb_utils.normalize_params(instances_params)
     LOG.info(_(normalized_instances))
     if extra_info.get('cpu_overload'):
         normalized_instances = filter(lambda x: x['memory'] == 0,
                                       normalized_instances)
         extra_info['k_cpu'] = -1
     weighted_instances = self._weight_instances(normalized_instances,
                                                 extra_info)
     LOG.info(_(weighted_instances))
     for chosen_instance in weighted_instances:
         chosen_instance['resources'] = filter(
             lambda x: x['uuid'] == chosen_instance['uuid'],
             instances_params)[0]
         yield chosen_instance
Esempio n. 4
0
 def min_sd(self, context, **kwargs):
     compute_nodes = kwargs.get('nodes')
     instances = []
     for node in compute_nodes:
         node_instances = db.get_instances_stat(
             context,
             node['hypervisor_hostname'])
         instances.extend(node_instances)
     host_loads = lb_utils.fill_compute_stats(instances, compute_nodes)
     LOG.debug(_(host_loads))
     vm_host_map = []
     for instance in instances:
         for node in compute_nodes:
             h_hostname = node['hypervisor_hostname']
             # Source host shouldn't be use.
             if instance.instance['host'] != h_hostname:
                 sd = self._simulate_migration(instance, node, host_loads,
                                               compute_nodes)
                 vm_host_map.append({'host': h_hostname,
                                     'vm': instance['instance_uuid'],
                                     'sd': sd})
     vm_host_map = sorted(vm_host_map, key=lambda x: x['sd']['total_sd'])
     LOG.debug(_(vm_host_map))
     for vm_host in vm_host_map:
         instance = filter(lambda x: x['instance_uuid'] == vm_host['vm'],
                           instances)[0]
         instance_resources = lb_utils.get_instance_resources(instance)
         if instance_resources:
             filter_instance = {'uuid': instance['instance_uuid'],
                                'resources': instance_resources}
             filtered = self.filter_hosts(context, filter_instance,
                                          compute_nodes,
                                          host=vm_host['host'])
             if not filtered[0]:
                 continue
             self.migrate(context, instance['instance_uuid'],
                          vm_host['host'])
             return