Reference: https://bugs.launchpad.net/swift/+bug/1863680
Just as swift-dispersion-report needed an update under python3 to function properly, so does swift-dispersion-populate. The following patch to the Ussuri release (mirroring the style of patch that resolved the prior bug report) will correct this issue:
root@sw-proxy01:~# swift-dispersion-populate
Using storage policy: Policy-0
Traceback (most recent call last):
File "/usr/lib/python3/dist-packages/keystoneclient/v3/client.py", line 343, in get_raw_token_from_identity_service
return plugin.get_auth_ref(self.session)
File "/usr/lib/python3/dist-packages/keystoneclient/auth/identity/v3/base.py", line 189, in get_auth_ref
authenticated=False, log=False, **rkwargs)
File "/usr/lib/python3/dist-packages/keystoneclient/session.py", line 543, in post
return self.request(url, 'POST', **kwargs)
File "/usr/lib/python3/dist-packages/keystoneclient/session.py", line 428, in request
resp = send(**kwargs)
File "/usr/lib/python3/dist-packages/keystoneclient/session.py", line 462, in _send_request
resp = self.session.request(method, url, **kwargs)
File "/usr/lib/python3/dist-packages/keystoneclient/httpclient.py", line 96, in request
return requests.request(*args, **kwargs)
File "/usr/lib/python3/dist-packages/requests/api.py", line 58, in request
return session.request(method=method, url=url, **kwargs)
File "/usr/lib/python3/dist-packages/requests/sessions.py", line 520, in request
resp = self.send(prep, **send_kwargs)
File "/usr/lib/python3/dist-packages/requests/sessions.py", line 630, in send
r = adapter.send(request, **kwargs)
File "/usr/lib/python3/dist-packages/requests/adapters.py", line 440, in send
timeout=timeout
File "/usr/lib/python3/dist-packages/urllib3/connectionpool.py", line 601, in urlopen
chunked=chunked)
File "/usr/lib/python3/dist-packages/urllib3/connectionpool.py", line 346, in _make_request
self._validate_conn(conn)
File "/usr/lib/python3/dist-packages/urllib3/connectionpool.py", line 852, in _validate_conn
conn.connect()
File "/usr/lib/python3/dist-packages/urllib3/connection.py", line 314, in connect
cert_reqs=resolve_cert_reqs(self.cert_reqs),
File "/usr/lib/python3/dist-packages/urllib3/util/ssl_.py", line 269, in create_urllib3_context
context.options |= options
File "/usr/lib/python3.6/ssl.py", line 465, in options
super(SSLContext, SSLContext).options.__set__(self, value)
File "/usr/lib/python3.6/ssl.py", line 465, in options
super(SSLContext, SSLContext).options.__set__(self, value)
File "/usr/lib/python3.6/ssl.py", line 465, in options
super(SSLContext, SSLContext).options.__set__(self, value)
[Previous line repeated 317 more times]
RecursionError: maximum recursion depth exceeded while calling a Python object
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/usr/lib/python3/dist-packages/swiftclient/client.py", line 636, in get_auth_keystone
auth_url=auth_url, insecure=insecure, timeout=timeout)
File "/usr/lib/python3/dist-packages/keystoneclient/v3/client.py", line 267, in __init__
self.authenticate()
File "/usr/lib/python3/dist-packages/keystoneclient/httpclient.py", line 583, in authenticate
resp = self.get_raw_token_from_identity_service(**kwargs)
File "/usr/lib/python3/dist-packages/keystoneclient/v3/client.py", line 353, in get_raw_token_from_identity_service
_('Authorization failed: %s') % e)
keystoneauth1.exceptions.auth.AuthorizationFailure: Authorization failed: maximum recursion depth exceeded while calling a Python object
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/usr/bin/swift-dispersion-populate", line 170, in <module>
insecure=insecure)
File "/usr/lib/python3/dist-packages/swiftclient/client.py", line 734, in get_auth
auth_version=auth_version)
File "/usr/lib/python3/dist-packages/swiftclient/client.py", line 644, in get_auth_keystone
raise ClientException('Authorization Failure. %s' % err)
swiftclient.exceptions.ClientException: Authorization Failure. Authorization failed: maximum recursion depth exceeded while calling a Python object
root@sw-proxy01:~#
root@sw-proxy01:~# diff -U0 /usr/bin/swift-dispersion-populate /root/swift-dispersion-populate
--- /usr/bin/swift-dispersion-populate 2020-05-19 16:36:37.000000000 +0000
+++ /root/swift-dispersion-populate 2020-09-11 18:40:21.869464770 +0000
@@ -30,4 +29,0 @@
-try:
- from swiftclient import get_auth
-except ImportError:
- from swift.common.internal_client import get_auth
@@ -164,0 +161,6 @@
+
+ try:
+ # Delay importing so urllib3 will import monkey-patched modules
+ from swiftclient import get_auth
+ except ImportError:
+ from swift.common.internal_client import get_auth
root@sw-proxy01:~# /root/swift-dispersion-populate
Using storage policy: Policy-0
Created 327 containers for dispersion reporting, 13s, 0 retries
Created 327 objects for dispersion reporting, 13s, 0 retries
root@sw-proxy01:~#
Tim's patch: https:/ /review. opendev. org/#/c/ 751384/