Exemple #1
0
 def _claim(self, limits=None, overhead=None, **kwargs):
     instance_type = self._fake_instance_type(**kwargs)
     if overhead is None:
         overhead = {'memory_mb': 0}
     return claims.ResizeClaim(self.instance, instance_type, self.tracker,
                               self.resources, overhead=overhead,
                               limits=limits)
    def resize_claim(self,
                     context,
                     instance,
                     instance_type,
                     image_meta=None,
                     limits=None):
        """Indicate that resources are needed for a resize operation to this
        compute host.
        :param context: security context
        :param instance: instance object to reserve resources for
        :param instance_type: new instance_type being resized to
        :param limits: Dict of oversubscription limits for memory, disk,
        and CPUs
        :returns: A Claim ticket representing the reserved resources.  This
        should be turned into finalize  a resource claim or free
        resources after the compute operation is finished.
        """
        image_meta = image_meta or {}

        if self.disabled:
            # compute_driver doesn't support resource tracking, just
            # generate the migration record and continue the resize:
            migration = self._create_migration(context, instance,
                                               instance_type)
            return claims.NopClaim(migration=migration)

        # get memory overhead required to build this instance:
        overhead = self.driver.estimate_instance_overhead(instance_type)
        LOG.debug(
            "Memory overhead for %(flavor)d MB instance; %(overhead)d "
            "MB", {
                'flavor': instance_type['memory_mb'],
                'overhead': overhead['memory_mb']
            })

        instance_ref = obj_base.obj_to_primitive(instance)
        claim = claims.ResizeClaim(context,
                                   instance_ref,
                                   instance_type,
                                   image_meta,
                                   self,
                                   self.compute_node,
                                   overhead=overhead,
                                   limits=limits)

        migration = self._create_migration(context, instance_ref,
                                           instance_type)
        claim.migration = migration

        # Mark the resources in-use for the resize landing on this
        # compute host:
        self._update_usage_from_migration(context, instance_ref, image_meta,
                                          self.compute_node, migration)
        elevated = context.elevated()
        self._update(elevated, self.compute_node)

        return claim
Exemple #3
0
 def _claim(self, limits=None, overhead=None, **kwargs):
     instance_type = self._fake_instance_type(**kwargs)
     numa_constraint = kwargs.pop('numa_topology', None)
     if overhead is None:
         overhead = {'memory_mb': 0}
     with mock.patch.object(
             hardware.VirtNUMAInstanceTopology, 'get_constraints',
             return_value=numa_constraint):
         return claims.ResizeClaim('context', self.instance, instance_type,
                                   {}, self.tracker, self.resources,
                                   overhead=overhead, limits=limits)
    def resize_claim(self, context, instance_ref, instance_type, limits=None):
        """Indicate that resources are needed for a resize operation to this
        compute host.
        :param context: security context
        :param instance_ref: instance to reserve resources for
        :param instance_type: new instance_type being resized to
        :param limits: Dict of oversubscription limits for memory, disk,
                       and CPUs.
        :returns: A Claim ticket representing the reserved resources.  This
                  should be turned into finalize  a resource claim or free
                  resources after the compute operation is finished.
        """
        if self.disabled:
            # compute_driver doesn't support resource tracking, just
            # generate the migration record and continue the resize:
            migration_ref = self._create_migration(context, instance_ref,
                                                   instance_type)
            return claims.NopClaim(migration=migration_ref)

        claim = claims.ResizeClaim(instance_ref, instance_type, self)

        if claim.test(self.compute_node, limits):

            migration_ref = self._create_migration(context, instance_ref,
                                                   instance_type)
            claim.migration = migration_ref

            # Mark the resources in-use for the resize landing on this
            # compute host:
            self._update_usage_from_migration(context, instance_ref,
                                              self.compute_node, migration_ref)
            elevated = context.elevated()
            self._update(elevated, self.compute_node)

            return claim

        else:
            raise exception.ComputeResourcesUnavailable()
Exemple #5
0
 def _claim(self, **kwargs):
     instance_type = self._fake_instance_type(**kwargs)
     return claims.ResizeClaim(self.instance, instance_type, self.tracker)