Beispiel #1
0
    def call(self, context, version, method, *args, **kwargs):
        """
        Call a glance client method.  If we get a connection error,
        retry the request according to FLAGS.glance_num_retries.
        """
        retry_excs = (glanceclient.exc.ServiceUnavailable,
                      glanceclient.exc.InvalidEndpoint,
                      glanceclient.exc.CommunicationError)
        num_attempts = 1 + FLAGS.glance_num_retries

        for attempt in xrange(1, num_attempts + 1):
            client = self.client or self._create_onetime_client(
                context, version)
            try:
                return getattr(client.images, method)(*args, **kwargs)
            except retry_excs as e:
                host = self.host
                port = self.port
                extra = "retrying"
                error_msg = _(
                    "Error contacting glance server "
                    "'%(host)s:%(port)s' for '%(method)s', %(extra)s.")
                if attempt == num_attempts:
                    extra = 'done trying'
                    LOG.exception(error_msg, locals())
                    raise exception.GlanceConnectionFailed(host=host,
                                                           port=port,
                                                           reason=str(e))
                LOG.exception(error_msg, locals())
                time.sleep(1)
Beispiel #2
0
    def call(self, context, method, *args, **kwargs):
        """Call a glance client method.

        If we get a connection error,
        retry the request according to CONF.glance_num_retries.
        """

        retry_excs = (glanceclient.exc.ServiceUnavailable,
                      glanceclient.exc.InvalidEndpoint,
                      glanceclient.exc.CommunicationError)
        num_attempts = 1 + CONF.glance_num_retries
        glance_controller = kwargs.pop('controller', 'images')
        store_id = kwargs.pop('store_id', None)
        base_image_ref = kwargs.pop('base_image_ref', None)

        for attempt in range(1, num_attempts + 1):
            client = self.client or self._create_onetime_client(context)

            keys = (
                'x-image-meta-store',
                'x-openstack-base-image-ref',
            )
            values = (
                store_id,
                base_image_ref,
            )

            headers = {k: v for (k, v) in zip(keys, values) if v is not None}
            if headers:
                client.http_client.additional_headers = headers

            try:
                controller = getattr(client, glance_controller)
                return getattr(controller, method)(*args, **kwargs)
            except retry_excs as e:
                netloc = self.netloc
                extra = "retrying"
                error_msg = _("Error contacting glance server "
                              "'%(netloc)s' for '%(method)s', "
                              "%(extra)s.")
                if attempt == num_attempts:
                    extra = 'done trying'
                    LOG.exception(error_msg, {
                        'netloc': netloc,
                        'method': method,
                        'extra': extra
                    })
                    raise exception.GlanceConnectionFailed(reason=e)

                LOG.exception(error_msg, {
                    'netloc': netloc,
                    'method': method,
                    'extra': extra
                })
                time.sleep(1)
            except glanceclient.exc.HTTPOverLimit as e:
                raise exception.ImageLimitExceeded(e)
Beispiel #3
0
    def call(self, context, method, *args, **kwargs):
        """Call a glance client method.

        If we get a connection error,
        retry the request according to CONF.glance_num_retries.
        """
        version = self.version
        if version in kwargs:
            version = kwargs['version']

        retry_excs = (glanceclient.exc.ServiceUnavailable,
                      glanceclient.exc.InvalidEndpoint,
                      glanceclient.exc.CommunicationError)
        num_attempts = 1 + CONF.glance_num_retries

        for attempt in xrange(1, num_attempts + 1):
            client = self.client or self._create_onetime_client(context,
                                                                version)
            try:
                return getattr(client.images, method)(*args, **kwargs)
            except retry_excs as e:
                netloc = self.netloc
                extra = "retrying"
                error_msg = _("Error contacting glance server "
                              "'%(netloc)s' for '%(method)s', "
                              "%(extra)s.") % {
                                  'netloc': netloc,
                                  'method': method,
                                  'extra': extra,
                              }
                if attempt == num_attempts:
                    extra = 'done trying'
                    error_msg = _("Error contacting glance server "
                                  "'%(netloc)s' for '%(method)s', "
                                  "%(extra)s.") % {
                                      'netloc': netloc,
                                      'method': method,
                                      'extra': extra,
                                  }
                    LOG.exception(error_msg)
                    raise exception.GlanceConnectionFailed(netloc=netloc,
                                                           reason=str(e))
                LOG.exception(error_msg)
                time.sleep(1)
Beispiel #4
0
    def call(self, context, method, *args, **kwargs):
        """Call a glance client method.

        If we get a connection error,
        retry the request according to CONF.glance_num_retries.
        """
        version = kwargs.pop('version', self.version)

        retry_excs = (glanceclient.exc.ServiceUnavailable,
                      glanceclient.exc.InvalidEndpoint,
                      glanceclient.exc.CommunicationError)
        num_attempts = 1 + CONF.glance_num_retries

        for attempt in range(1, num_attempts + 1):
            client = self.client or self._create_onetime_client(
                context, version)
            try:
                controller = getattr(client,
                                     kwargs.pop('controller', 'images'))
                return getattr(controller, method)(*args, **kwargs)
            except retry_excs as e:
                netloc = self.netloc
                extra = "retrying"
                error_msg = _("Error contacting glance server "
                              "'%(netloc)s' for '%(method)s', "
                              "%(extra)s.")
                if attempt == num_attempts:
                    extra = 'done trying'
                    LOG.exception(error_msg, {
                        'netloc': netloc,
                        'method': method,
                        'extra': extra
                    })
                    raise exception.GlanceConnectionFailed(reason=e)

                LOG.exception(error_msg, {
                    'netloc': netloc,
                    'method': method,
                    'extra': extra
                })
                time.sleep(1)
            except glanceclient.exc.HTTPOverLimit as e:
                raise exception.ImageLimitExceeded(e)