diff options
| author | Chris Lu <chrislusf@users.noreply.github.com> | 2025-08-06 10:09:26 -0700 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-08-06 10:09:26 -0700 |
| commit | 4af182f88001033440f5d397f26b1c6f5e7635e1 (patch) | |
| tree | 65e0de8aa22c2daa273fb514e772edeae0d7141e /weed/server/webdav_server.go | |
| parent | e446234e9c2512b01040fffcefc429a8d974808e (diff) | |
| download | seaweedfs-4af182f88001033440f5d397f26b1c6f5e7635e1.tar.xz seaweedfs-4af182f88001033440f5d397f26b1c6f5e7635e1.zip | |
Context cancellation during reading range reading large files (#7093)
* context cancellation during reading range reading large files
* address comments
* cancellation for fuse read
* fix cancellation
* pass in context for each function to avoid racing condition
* Update reader_at_test.go
* remove dead code
* Update weed/filer/reader_at.go
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
* Update weed/filer/filechunk_group.go
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
* Update weed/filer/filechunk_group.go
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
* address comments
* Update weed/mount/weedfs_file_read.go
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
* Update weed/mount/weedfs_file_lseek.go
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
* Update weed/mount/weedfs_file_read.go
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
* Update weed/filer/reader_at.go
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
* Update weed/mount/weedfs_file_lseek.go
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
* test cancellation
---------
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Diffstat (limited to 'weed/server/webdav_server.go')
| -rw-r--r-- | weed/server/webdav_server.go | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/weed/server/webdav_server.go b/weed/server/webdav_server.go index aa501b408..aa43189f5 100644 --- a/weed/server/webdav_server.go +++ b/weed/server/webdav_server.go @@ -3,13 +3,14 @@ package weed_server import ( "context" "fmt" - "github.com/seaweedfs/seaweedfs/weed/util/version" "io" "os" "path" "strings" "time" + "github.com/seaweedfs/seaweedfs/weed/util/version" + "github.com/seaweedfs/seaweedfs/weed/util/buffered_writer" "golang.org/x/net/webdav" "google.golang.org/grpc" @@ -126,6 +127,7 @@ type WebDavFile struct { visibleIntervals *filer.IntervalList[*filer.VisibleInterval] reader io.ReaderAt bufWriter *buffered_writer.BufferedWriteCloser + ctx context.Context } func NewWebDavFileSystem(option *WebDavOption) (webdav.FileSystem, error) { @@ -269,6 +271,7 @@ func (fs *WebDavFileSystem) OpenFile(ctx context.Context, fullFilePath string, f name: fullFilePath, isDirectory: false, bufWriter: buffered_writer.NewBufferedWriteCloser(fs.option.MaxMB * 1024 * 1024), + ctx: ctx, }, nil } @@ -277,7 +280,7 @@ func (fs *WebDavFileSystem) OpenFile(ctx context.Context, fullFilePath string, f if err == os.ErrNotExist { return nil, err } - return &WebDavFile{fs: fs}, nil + return &WebDavFile{fs: fs, ctx: ctx}, nil } if !strings.HasSuffix(fullFilePath, "/") && fi.IsDir() { fullFilePath += "/" @@ -288,6 +291,7 @@ func (fs *WebDavFileSystem) OpenFile(ctx context.Context, fullFilePath string, f name: fullFilePath, isDirectory: false, bufWriter: buffered_writer.NewBufferedWriteCloser(fs.option.MaxMB * 1024 * 1024), + ctx: ctx, }, nil } @@ -557,12 +561,12 @@ func (f *WebDavFile) Read(p []byte) (readSize int, err error) { return 0, io.EOF } if f.visibleIntervals == nil { - f.visibleIntervals, _ = filer.NonOverlappingVisibleIntervals(context.Background(), filer.LookupFn(f.fs), f.entry.GetChunks(), 0, fileSize) + f.visibleIntervals, _ = filer.NonOverlappingVisibleIntervals(f.ctx, filer.LookupFn(f.fs), f.entry.GetChunks(), 0, fileSize) f.reader = nil } if f.reader == nil { chunkViews := filer.ViewFromVisibleIntervals(f.visibleIntervals, 0, fileSize) - f.reader = filer.NewChunkReaderAtFromClient(f.fs.readerCache, chunkViews, fileSize) + f.reader = filer.NewChunkReaderAtFromClient(f.ctx, f.fs.readerCache, chunkViews, fileSize) } readSize, err = f.reader.ReadAt(p, f.off) |
