Merge pull request #56 from stevvooe/blob-upload-unknown
Correctly handle missing layer uploadmaster
						commit
						e9e26bd362
					
				| 
						 | 
				
			
			@ -53,13 +53,20 @@ func layerUploadDispatcher(ctx *Context, r *http.Request) http.Handler {
 | 
			
		|||
 | 
			
		||||
		layers := ctx.services.Layers()
 | 
			
		||||
		upload, err := layers.Resume(luh.Name, luh.UUID)
 | 
			
		||||
		if err != nil && err != storage.ErrLayerUploadUnknown {
 | 
			
		||||
			return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			ctx.log.Errorf("error resolving upload: %v", err)
 | 
			
		||||
				w.WriteHeader(http.StatusBadRequest)
 | 
			
		||||
			if err == storage.ErrLayerUploadUnknown {
 | 
			
		||||
				return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
 | 
			
		||||
					w.WriteHeader(http.StatusNotFound)
 | 
			
		||||
					luh.Errors.Push(v2.ErrorCodeBlobUploadUnknown, err)
 | 
			
		||||
				})
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
 | 
			
		||||
				w.WriteHeader(http.StatusInternalServerError)
 | 
			
		||||
				luh.Errors.Push(v2.ErrorCodeUnknown, err)
 | 
			
		||||
			})
 | 
			
		||||
		}
 | 
			
		||||
		luh.Upload = upload
 | 
			
		||||
 | 
			
		||||
		if state.Offset > 0 {
 | 
			
		||||
| 
						 | 
				
			
			@ -68,6 +75,7 @@ func layerUploadDispatcher(ctx *Context, r *http.Request) http.Handler {
 | 
			
		|||
			// problems. We basically cancel the upload and tell the client to
 | 
			
		||||
			// start over.
 | 
			
		||||
			if nn, err := upload.Seek(luh.State.Offset, os.SEEK_SET); err != nil {
 | 
			
		||||
				defer upload.Close()
 | 
			
		||||
				ctx.log.Infof("error seeking layer upload: %v", err)
 | 
			
		||||
				return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
 | 
			
		||||
					w.WriteHeader(http.StatusBadRequest)
 | 
			
		||||
| 
						 | 
				
			
			@ -75,6 +83,7 @@ func layerUploadDispatcher(ctx *Context, r *http.Request) http.Handler {
 | 
			
		|||
					upload.Cancel()
 | 
			
		||||
				})
 | 
			
		||||
			} else if nn != luh.State.Offset {
 | 
			
		||||
				defer upload.Close()
 | 
			
		||||
				ctx.log.Infof("seek to wrong offest: %d != %d", nn, luh.State.Offset)
 | 
			
		||||
				return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
 | 
			
		||||
					w.WriteHeader(http.StatusBadRequest)
 | 
			
		||||
| 
						 | 
				
			
			@ -129,6 +138,7 @@ func (luh *layerUploadHandler) GetUploadStatus(w http.ResponseWriter, r *http.Re
 | 
			
		|||
	if luh.Upload == nil {
 | 
			
		||||
		w.WriteHeader(http.StatusNotFound)
 | 
			
		||||
		luh.Errors.Push(v2.ErrorCodeBlobUploadUnknown)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if err := luh.layerUploadResponse(w, r); err != nil {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue