Report layer upload as unavialable when data missing
Signed-off-by: Stephen J Day <stephen.day@docker.com>master
							parent
							
								
									c080c40030
								
							
						
					
					
						commit
						f926a93778
					
				| 
						 | 
				
			
			@ -94,3 +94,14 @@ type ErrLayerInvalidSize struct {
 | 
			
		|||
func (err ErrLayerInvalidSize) Error() string {
 | 
			
		||||
	return fmt.Sprintf("invalid layer size: %d", err.Size)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// ErrLayerUploadUnavailable signals missing upload data, either when no data
 | 
			
		||||
// has been received or when the backend reports the data as missing. This is
 | 
			
		||||
// different from ErrLayerUploadUnknown.
 | 
			
		||||
type ErrLayerUploadUnavailable struct {
 | 
			
		||||
	Err error
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (err ErrLayerUploadUnavailable) Error() string {
 | 
			
		||||
	return fmt.Sprintf("layer upload unavialable: %v", err)
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -102,7 +102,22 @@ func (luc *layerUploadController) validateLayer(dgst digest.Digest) (digest.Dige
 | 
			
		|||
	// Read the file from the backend driver and validate it.
 | 
			
		||||
	fr, err := newFileReader(luc.fileWriter.driver, luc.path)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return "", err
 | 
			
		||||
		switch err := err.(type) {
 | 
			
		||||
		case storagedriver.PathNotFoundError:
 | 
			
		||||
			// NOTE(stevvooe): Path not found can mean several things by we
 | 
			
		||||
			// should report the upload is not available. This can happen if
 | 
			
		||||
			// the following happens:
 | 
			
		||||
			//
 | 
			
		||||
			// 	1. If not data was received for the upload instance.
 | 
			
		||||
			// 	2. Backend storage driver has not convereged after receiving latest data.
 | 
			
		||||
			//
 | 
			
		||||
			// This *does not* mean that the upload does not exist, since we
 | 
			
		||||
			// can't even get a LayerUpload object without having the
 | 
			
		||||
			// directory exist.
 | 
			
		||||
			return "", ErrLayerUploadUnavailable{Err: err}
 | 
			
		||||
		default:
 | 
			
		||||
			return "", err
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	tr := io.TeeReader(fr, digestVerifier)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue