From fcd1882e3acbaa529a1773f177a3a7e7b1524f0b Mon Sep 17 00:00:00 2001 From: Daira Hopwood Date: Thu, 21 Feb 2013 22:17:06 +0000 Subject: [PATCH] OpenStack: if we get a 401 Unauthorized response, reauthenticate immediately. Signed-off-by: David-Sarah Hopwood --- .../backends/cloud/openstack/openstack_container.py | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/src/allmydata/storage/backends/cloud/openstack/openstack_container.py b/src/allmydata/storage/backends/cloud/openstack/openstack_container.py index 4e52dc07..7aedf175 100644 --- a/src/allmydata/storage/backends/cloud/openstack/openstack_container.py +++ b/src/allmydata/storage/backends/cloud/openstack/openstack_container.py @@ -9,6 +9,7 @@ from allmydata.util.deferredutil import eventually_callback, eventually_errback from twisted.internet.protocol import Protocol from twisted.web.client import Agent, FileBodyProducer, ResponseDone from twisted.web.http_headers import Headers +from twisted.web.http import UNAUTHORIZED from zope.interface import implements, Interface @@ -230,6 +231,10 @@ class AuthenticationClient(object): d.addCallback(lambda ign: self._auth_info) return d + def invalidate(self): + self._auth_info = None + self._reauthenticate() + def _authenticate(self): (method, url, request_headers, body, need_response_body) = self._authenticator.make_auth_request() @@ -311,6 +316,14 @@ class OpenStackContainer(ContainerRetryMixin): return "%s/%s/%s" % (auth_info.public_storage_url, urllib.quote(self._container_name, safe=''), urllib.quote(object_name)) + def _react_to_error(self, response_code): + if response_code == UNAUTHORIZED: + # Invalidate auth_info and retry. + self._auth_client.invalidate() + return True + else: + return ContainerRetryMixin._react_to_error(self, response_code) + def _create(self): """ Create this container. -- 2.45.2