Change validate method to work for all storages

This commit is contained in:
Joseph Schorr 2016-08-01 17:07:33 -04:00
parent c30b8dd1ad
commit 770ac0016e
4 changed files with 11 additions and 16 deletions

View file

@ -42,9 +42,12 @@ class BaseStorage(StoragePaths):
pass pass
def validate(self, client): def validate(self, client):
""" Called to perform any custom storage system validation. The client is an HTTP """ Called to perform storage system validation. The client is an HTTP
client to use for any external calls. """ client to use for any external calls. """
pass # Put a temporary file to make sure the normal storage paths work.
self.put_content('_verify', 'testing 123')
if not self.exists('_verify'):
raise Exception('Could not find verification file')
def get_direct_download_url(self, path, expires_in=60, requires_cors=False, head=False): def get_direct_download_url(self, path, expires_in=60, requires_cors=False, head=False):
return None return None

View file

@ -115,6 +115,8 @@ class LocalStorage(BaseStorageV2):
os.remove(content_path) os.remove(content_path)
def validate(self, client): def validate(self, client):
super(LocalStorage, self).validate()
# Load the set of disk mounts. # Load the set of disk mounts.
try: try:
mounts = psutil.disk_partitions(all=True) mounts = psutil.disk_partitions(all=True)

View file

@ -157,23 +157,17 @@ class SwiftStorage(BaseStorage):
return surl.format(scheme=scheme, host=hostname, full_path=full_path, sig=sig, expires=expires) return surl.format(scheme=scheme, host=hostname, full_path=full_path, sig=sig, expires=expires)
def validate(self, client): def validate(self, client):
if self._temp_url_key: super(SwiftStorage, self).validate()
# Add a file to test direct download.
self.put_content('dd_path', 'testing 3456')
if self._temp_url_key:
# Generate a direct download URL. # Generate a direct download URL.
dd_url = self.get_direct_download_url('dd_path') dd_url = self.get_direct_download_url('_verify')
if not dd_url: if not dd_url:
self.remove('dd_path')
raise Exception('Could not validate direct download URL; the token may be invalid.') raise Exception('Could not validate direct download URL; the token may be invalid.')
# Try to retrieve the direct download URL. # Try to retrieve the direct download URL.
response = client.get(dd_url, timeout=2) response = client.get(dd_url, timeout=2)
# Remove the test file.
self.remove('dd_path')
if response.status_code != 200: if response.status_code != 200:
logger.debug('Direct download failure: %s => %s with body %s', dd_url, logger.debug('Direct download failure: %s => %s with body %s', dd_url,
response.status_code, response.text) response.status_code, response.text)

View file

@ -107,13 +107,9 @@ def _validate_registry_storage(config, _):
if replication_enabled and storage_type == 'LocalStorage': if replication_enabled and storage_type == 'LocalStorage':
raise Exception('Locally mounted directory not supported with storage replication') raise Exception('Locally mounted directory not supported with storage replication')
# Run custom validation on the driver. # Run validation on the driver.
driver.validate(app.config['HTTPCLIENT']) driver.validate(app.config['HTTPCLIENT'])
# Put and remove a temporary file to make sure the normal storage paths work.
driver.put_content('_verify', 'testing 123')
driver.remove('_verify')
# Run setup on the driver if the read/write succeeded. # Run setup on the driver if the read/write succeeded.
driver.setup() driver.setup()
except Exception as ex: except Exception as ex: