diff --git a/weed/operation/upload_content.go b/weed/operation/upload_content.go index f469b2273..90f90c87d 100644 --- a/weed/operation/upload_content.go +++ b/weed/operation/upload_content.go @@ -371,7 +371,7 @@ func (uploader *Uploader) upload_content(ctx context.Context, fillBufferFunction } else { reqReader = bytes.NewReader(option.BytesBuffer.Bytes()) } - req, postErr := http.NewRequest(http.MethodPost, option.UploadUrl, reqReader) + req, postErr := http.NewRequestWithContext(ctx, http.MethodPost, option.UploadUrl, reqReader) if postErr != nil { glog.V(1).InfofCtx(ctx, "create upload request %s: %v", option.UploadUrl, postErr) return nil, fmt.Errorf("create upload request %s: %v", option.UploadUrl, postErr) diff --git a/weed/server/filer_server_handlers_write.go b/weed/server/filer_server_handlers_write.go index 4f1ca05be..a7bd73c35 100644 --- a/weed/server/filer_server_handlers_write.go +++ b/weed/server/filer_server_handlers_write.go @@ -45,7 +45,10 @@ func (fs *FilerServer) assignNewFileInfo(ctx context.Context, so *operation.Stor ar, altRequest := so.ToAssignRequests(1) - assignResult, ae := operation.Assign(ctx, fs.filer.GetMaster, fs.grpcDialOption, ar, altRequest) + // Use a context that ignores cancellation from the request context + assignCtx := context.WithoutCancel(ctx) + + assignResult, ae := operation.Assign(assignCtx, fs.filer.GetMaster, fs.grpcDialOption, ar, altRequest) if ae != nil { glog.ErrorfCtx(ctx, "failing to assign a file id: %v", ae) err = ae diff --git a/weed/server/filer_server_handlers_write_autochunk.go b/weed/server/filer_server_handlers_write_autochunk.go index 0f568123a..5e3a5f0e4 100644 --- a/weed/server/filer_server_handlers_write_autochunk.go +++ b/weed/server/filer_server_handlers_write_autochunk.go @@ -339,7 +339,7 @@ func (fs *FilerServer) saveMetaData(ctx context.Context, r *http.Request, fileNa } } - dbErr := fs.filer.CreateEntry(ctx, entry, false, false, nil, skipCheckParentDirEntry(r), so.MaxFileNameLength) + dbErr := fs.filer.CreateEntry(context.WithoutCancel(ctx), entry, false, false, nil, skipCheckParentDirEntry(r), so.MaxFileNameLength) if dbErr != nil { replyerr = dbErr filerResult.Error = dbErr.Error() @@ -380,7 +380,8 @@ func (fs *FilerServer) saveAsChunk(ctx context.Context, so *operation.StorageOpt } var uploadErr error - uploadResult, uploadErr, _ = uploader.Upload(ctx, reader, uploadOption) + uploadCtx := context.WithoutCancel(ctx) + uploadResult, uploadErr, _ = uploader.Upload(uploadCtx, reader, uploadOption) if uploadErr != nil { return uploadErr } @@ -436,7 +437,7 @@ func (fs *FilerServer) mkdir(ctx context.Context, w http.ResponseWriter, r *http Name: util.FullPath(path).Name(), } - if dbErr := fs.filer.CreateEntry(ctx, entry, false, false, nil, false, so.MaxFileNameLength); dbErr != nil { + if dbErr := fs.filer.CreateEntry(context.WithoutCancel(ctx), entry, false, false, nil, false, so.MaxFileNameLength); dbErr != nil { replyerr = dbErr filerResult.Error = dbErr.Error() glog.V(0).InfofCtx(ctx, "failing to create dir %s on filer server : %v", path, dbErr) diff --git a/weed/server/filer_server_handlers_write_upload.go b/weed/server/filer_server_handlers_write_upload.go index 4279575e8..dd1a1e557 100644 --- a/weed/server/filer_server_handlers_write_upload.go +++ b/weed/server/filer_server_handlers_write_upload.go @@ -185,7 +185,10 @@ func (fs *FilerServer) doUpload(ctx context.Context, urlLocation string, limited return nil, err, []byte{} } - uploadResult, err, data := uploader.Upload(ctx, limitedReader, uploadOption) + // Use a context that ignores cancellation from the request context + uploadCtx := context.WithoutCancel(ctx) + + uploadResult, err, data := uploader.Upload(uploadCtx, limitedReader, uploadOption) if uploadResult != nil && uploadResult.RetryCount > 0 { stats.FilerHandlerCounter.WithLabelValues(stats.ChunkUploadRetry).Add(float64(uploadResult.RetryCount)) } @@ -244,7 +247,6 @@ func (fs *FilerServer) dataToChunkWithSSE(ctx context.Context, r *http.Request, var sseType filer_pb.SSEType = filer_pb.SSEType_NONE var sseMetadata []byte - // Create chunk with SSE metadata if available var chunk *filer_pb.FileChunk if sseType != filer_pb.SSEType_NONE {