Fix broken backup_swift_service_auth=True

Fix the missing session argument so that swift backup driver to
resolve the TypeError raised in swift object access. The error makes
the swift back driver consistently fail during backup/restore
operation.

Closes-Bug: #2058596
Change-Id: I80f2cd614ba7277a28fa8a4a429fef983113f0fb
This commit is contained in:
Takashi Kajinami 2024-04-16 19:09:00 +09:00
parent b0f0b9015b
commit 9ff29a649e
4 changed files with 20 additions and 2 deletions

View File

@ -192,7 +192,8 @@ class SwiftBackupDriver(chunkeddriver.ChunkedBackupDriver):
sa_plugin = service_auth.get_service_auth_plugin()
if sa_plugin is not None:
result['X-Service-Token'] = sa_plugin.get_token()
sa_session = service_auth.get_service_session()
result['X-Service-Token'] = sa_plugin.get_token(session=sa_session)
return result

View File

@ -19,6 +19,7 @@ from cinder import exception
CONF = cfg.CONF
_SERVICE_AUTH = None
_SERVICE_SESSION = None
SERVICE_USER_GROUP = 'service_user'
@ -66,6 +67,16 @@ def get_service_auth_plugin():
return None
def get_service_session():
if CONF.service_user.send_service_user_token:
global _SERVICE_SESSION
if not _SERVICE_SESSION:
_SERVICE_SESSION = ks_loading.load_session_from_conf_options(
CONF, SERVICE_USER_GROUP, auth=get_service_auth_plugin())
return _SERVICE_SESSION
return None
def get_auth_plugin(context, auth=None):
if auth:
user_auth = auth

View File

@ -317,7 +317,7 @@ class BackupSwiftTestCase(test.TestCase):
@mock.patch.object(service_auth, 'get_service_auth_plugin')
def test_backup_swift_service_auth_headers_enabled(self, mock_plugin):
class FakeServiceAuthPlugin:
def get_token(self):
def get_token(self, session):
return "fake"
self.override_config('send_service_user_token', True,
group='service_user')

View File

@ -0,0 +1,6 @@
---
fixes:
- |
`Bug #2058596 <https://bugs.launchpad.net/cinder/+bug/2058596>`_: Fixed
broken ``backup_swift_service_auth=True`` which made swift backup driver
consistently fail during object data access.