Make blob upload errors more specific
This commit is contained in:
parent
d18a7935e1
commit
88f19ee0b9
2 changed files with 10 additions and 3 deletions
|
@ -24,6 +24,9 @@ BLOB_CONTENT_TYPE = 'application/octet-stream'
|
||||||
class BlobUploadException(Exception):
|
class BlobUploadException(Exception):
|
||||||
""" Base for all exceptions raised when uploading blobs. """
|
""" Base for all exceptions raised when uploading blobs. """
|
||||||
|
|
||||||
|
class BlobRangeMismatchException(BlobUploadException):
|
||||||
|
""" Exception raised if the range to be uploaded does not match. """
|
||||||
|
|
||||||
class BlobDigestMismatchException(BlobUploadException):
|
class BlobDigestMismatchException(BlobUploadException):
|
||||||
""" Exception raised if the digest requested does not match that of the contents uploaded. """
|
""" Exception raised if the digest requested does not match that of the contents uploaded. """
|
||||||
|
|
||||||
|
@ -134,7 +137,7 @@ class _BlobUploadManager(object):
|
||||||
|
|
||||||
if start_offset > 0 and start_offset > self.blob_upload.byte_count:
|
if start_offset > 0 and start_offset > self.blob_upload.byte_count:
|
||||||
logger.error('start_offset provided greater than blob_upload.byte_count')
|
logger.error('start_offset provided greater than blob_upload.byte_count')
|
||||||
raise BlobUploadException()
|
raise BlobRangeMismatchException()
|
||||||
|
|
||||||
# Ensure that we won't go over the allowed maximum size for blobs.
|
# Ensure that we won't go over the allowed maximum size for blobs.
|
||||||
max_blob_size = bitmath.parse_string_unsafe(self.settings.maximum_blob_size)
|
max_blob_size = bitmath.parse_string_unsafe(self.settings.maximum_blob_size)
|
||||||
|
|
|
@ -10,7 +10,8 @@ from data import database
|
||||||
from data.registry_model import registry_model
|
from data.registry_model import registry_model
|
||||||
from data.registry_model.blobuploader import (create_blob_upload, retrieve_blob_upload_manager,
|
from data.registry_model.blobuploader import (create_blob_upload, retrieve_blob_upload_manager,
|
||||||
complete_when_uploaded, BlobUploadSettings,
|
complete_when_uploaded, BlobUploadSettings,
|
||||||
BlobUploadException, BlobTooLargeException)
|
BlobUploadException, BlobTooLargeException,
|
||||||
|
BlobRangeMismatchException)
|
||||||
from digest import digest_tools
|
from digest import digest_tools
|
||||||
from endpoints.decorators import anon_protect, parse_repository_name
|
from endpoints.decorators import anon_protect, parse_repository_name
|
||||||
from endpoints.v2 import v2_bp, require_repo_read, require_repo_write, get_input_stream
|
from endpoints.v2 import v2_bp, require_repo_read, require_repo_write, get_input_stream
|
||||||
|
@ -428,7 +429,10 @@ def _upload_chunk(blob_uploader, commit_digest=None):
|
||||||
return blob_uploader.commit_to_blob(app.config, commit_digest)
|
return blob_uploader.commit_to_blob(app.config, commit_digest)
|
||||||
except BlobTooLargeException as ble:
|
except BlobTooLargeException as ble:
|
||||||
raise LayerTooLarge(uploaded=ble.uploaded, max_allowed=ble.max_allowed)
|
raise LayerTooLarge(uploaded=ble.uploaded, max_allowed=ble.max_allowed)
|
||||||
except BlobUploadException:
|
except BlobRangeMismatchException:
|
||||||
logger.exception('Exception when uploading blob to %s', blob_uploader.blob_upload_id)
|
logger.exception('Exception when uploading blob to %s', blob_uploader.blob_upload_id)
|
||||||
_abort_range_not_satisfiable(blob_uploader.blob_upload.byte_count,
|
_abort_range_not_satisfiable(blob_uploader.blob_upload.byte_count,
|
||||||
blob_uploader.blob_upload_id)
|
blob_uploader.blob_upload_id)
|
||||||
|
except BlobUploadException:
|
||||||
|
logger.exception('Exception when uploading blob to %s', blob_uploader.blob_upload_id)
|
||||||
|
raise BlobUploadInvalid()
|
||||||
|
|
Reference in a new issue