remove _check_container_exists from Swift backup driver
The HTTP PUT on a Swift container is idempotent, we don't need to check if it exists before uploading a backup. This fixes a side issue where swiftclient was printing a TRACE of the failed HTTP HEAD, previously in use to check if the container existed. Change-Id: I7bc267c948b56e30658997a9743f0d46ebb362ab
This commit is contained in:
parent
283af11a06
commit
f48ff3c851
@ -31,7 +31,6 @@
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
import hashlib
|
import hashlib
|
||||||
import httplib
|
|
||||||
import json
|
import json
|
||||||
import os
|
import os
|
||||||
import socket
|
import socket
|
||||||
@ -135,20 +134,6 @@ class SwiftBackupDriver(BackupDriver):
|
|||||||
preauthtoken=self.context.auth_token,
|
preauthtoken=self.context.auth_token,
|
||||||
starting_backoff=self.swift_backoff)
|
starting_backoff=self.swift_backoff)
|
||||||
|
|
||||||
def _check_container_exists(self, container):
|
|
||||||
LOG.debug(_('_check_container_exists: container: %s') % container)
|
|
||||||
try:
|
|
||||||
self.conn.head_container(container)
|
|
||||||
except swift.ClientException as error:
|
|
||||||
if error.http_status == httplib.NOT_FOUND:
|
|
||||||
LOG.debug(_('container %s does not exist') % container)
|
|
||||||
return False
|
|
||||||
else:
|
|
||||||
raise
|
|
||||||
else:
|
|
||||||
LOG.debug(_('container %s exists') % container)
|
|
||||||
return True
|
|
||||||
|
|
||||||
def _create_container(self, context, backup):
|
def _create_container(self, context, backup):
|
||||||
backup_id = backup['id']
|
backup_id = backup['id']
|
||||||
container = backup['container']
|
container = backup['container']
|
||||||
@ -158,8 +143,11 @@ class SwiftBackupDriver(BackupDriver):
|
|||||||
if container is None:
|
if container is None:
|
||||||
container = CONF.backup_swift_container
|
container = CONF.backup_swift_container
|
||||||
self.db.backup_update(context, backup_id, {'container': container})
|
self.db.backup_update(context, backup_id, {'container': container})
|
||||||
if not self._check_container_exists(container):
|
# NOTE(gfidente): accordingly to the Object Storage API reference, we
|
||||||
self.conn.put_container(container)
|
# do not need to check if a container already exists, container PUT
|
||||||
|
# requests are idempotent and a code of 202 (Accepted) is returned when
|
||||||
|
# the container already existed.
|
||||||
|
self.conn.put_container(container)
|
||||||
return container
|
return container
|
||||||
|
|
||||||
def _generate_swift_object_name_prefix(self, backup):
|
def _generate_swift_object_name_prefix(self, backup):
|
||||||
|
@ -121,16 +121,6 @@ class BackupSwiftTestCase(test.TestCase):
|
|||||||
backup = db.backup_get(self.ctxt, 123)
|
backup = db.backup_get(self.ctxt, 123)
|
||||||
self.assertEqual(backup['container'], container_name)
|
self.assertEqual(backup['container'], container_name)
|
||||||
|
|
||||||
def test_create_backup_container_check_wraps_socket_error(self):
|
|
||||||
container_name = 'socket_error_on_head'
|
|
||||||
self._create_backup_db_entry(container=container_name)
|
|
||||||
service = SwiftBackupDriver(self.ctxt)
|
|
||||||
self.volume_file.seek(0)
|
|
||||||
backup = db.backup_get(self.ctxt, 123)
|
|
||||||
self.assertRaises(exception.SwiftConnectionFailed,
|
|
||||||
service.backup,
|
|
||||||
backup, self.volume_file)
|
|
||||||
|
|
||||||
def test_create_backup_put_object_wraps_socket_error(self):
|
def test_create_backup_put_object_wraps_socket_error(self):
|
||||||
container_name = 'socket_error_on_put'
|
container_name = 'socket_error_on_put'
|
||||||
self._create_backup_db_entry(container=container_name)
|
self._create_backup_db_entry(container=container_name)
|
||||||
@ -195,13 +185,3 @@ class BackupSwiftTestCase(test.TestCase):
|
|||||||
compressor = service._get_compressor('bz2')
|
compressor = service._get_compressor('bz2')
|
||||||
self.assertEqual(compressor, bz2)
|
self.assertEqual(compressor, bz2)
|
||||||
self.assertRaises(ValueError, service._get_compressor, 'fake')
|
self.assertRaises(ValueError, service._get_compressor, 'fake')
|
||||||
|
|
||||||
def test_check_container_exists(self):
|
|
||||||
service = SwiftBackupDriver(self.ctxt)
|
|
||||||
exists = service._check_container_exists('fake_container')
|
|
||||||
self.assertEqual(exists, True)
|
|
||||||
exists = service._check_container_exists('missing_container')
|
|
||||||
self.assertEqual(exists, False)
|
|
||||||
self.assertRaises(swift.ClientException,
|
|
||||||
service._check_container_exists,
|
|
||||||
'unauthorized_container')
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user