diff options
| author | tam-i13 <46927823+tam-i13@users.noreply.github.com> | 2025-11-26 06:35:19 +0300 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-11-25 19:35:19 -0800 |
| commit | b669607fcdb959c9a5c8ba7accd5b65e54cafbc6 (patch) | |
| tree | 49ebe348b10e2f3ff2edcb5ecf17b04fbcf225e7 /weed/mount/weedfs_dir_read.go | |
| parent | 76f1a23fec89fa59b61767d507bd82325ae4833f (diff) | |
| download | seaweedfs-b669607fcdb959c9a5c8ba7accd5b65e54cafbc6.tar.xz seaweedfs-b669607fcdb959c9a5c8ba7accd5b65e54cafbc6.zip | |
Add error list each entry func (#7485)
* added error return in type ListEachEntryFunc
* return error if errClose
* fix fmt.Errorf
* fix return errClose
* use %w fmt.Errorf
* added entry in messege error
* add callbackErr in ListDirectoryEntries
* fix error
* add log
* clear err when the scanner stops on io.EOF, so returning err doesn’t surface EOF as a failure.
* more info in error
* add ctx to logs, error handling
* fix return eachEntryFunc
* fix
* fix log
* fix return
* fix foundationdb test s
* fix eachEntryFunc
* fix return resEachEntryFuncErr
* Update weed/filer/filer.go
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
* Update weed/filer/elastic/v7/elastic_store.go
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
* Update weed/filer/hbase/hbase_store.go
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
* Update weed/filer/foundationdb/foundationdb_store.go
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
* Update weed/filer/ydb/ydb_store.go
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
* fix
* add scanErr
---------
Co-authored-by: Roman Tamarov <r.tamarov@kryptonite.ru>
Co-authored-by: Chris Lu <chrislusf@users.noreply.github.com>
Co-authored-by: chrislu <chris.lu@gmail.com>
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
Diffstat (limited to 'weed/mount/weedfs_dir_read.go')
| -rw-r--r-- | weed/mount/weedfs_dir_read.go | 17 |
1 files changed, 9 insertions, 8 deletions
diff --git a/weed/mount/weedfs_dir_read.go b/weed/mount/weedfs_dir_read.go index 6e18b50e8..ebf0d9191 100644 --- a/weed/mount/weedfs_dir_read.go +++ b/weed/mount/weedfs_dir_read.go @@ -2,13 +2,14 @@ package mount import ( "context" + "math" + "sync" + "github.com/hanwen/go-fuse/v2/fuse" "github.com/seaweedfs/seaweedfs/weed/filer" "github.com/seaweedfs/seaweedfs/weed/glog" "github.com/seaweedfs/seaweedfs/weed/mount/meta_cache" "github.com/seaweedfs/seaweedfs/weed/util" - "math" - "sync" ) type DirectoryHandleId uint64 @@ -153,7 +154,7 @@ func (wfs *WFS) doReadDirectory(input *fuse.ReadIn, out *fuse.DirEntryList, isPl } var dirEntry fuse.DirEntry - processEachEntryFn := func(entry *filer.Entry) bool { + processEachEntryFn := func(entry *filer.Entry) (bool, error) { dirEntry.Name = entry.Name() dirEntry.Mode = toSyscallMode(entry.Mode) inode := wfs.inodeToPath.Lookup(dirPath.Child(dirEntry.Name), entry.Crtime.Unix(), entry.IsDirectory(), len(entry.HardLinkId) > 0, entry.Inode, isPlusMode) @@ -161,13 +162,13 @@ func (wfs *WFS) doReadDirectory(input *fuse.ReadIn, out *fuse.DirEntryList, isPl if !isPlusMode { if !out.AddDirEntry(dirEntry) { isEarlyTerminated = true - return false + return false, nil } } else { entryOut := out.AddDirLookupEntry(dirEntry) if entryOut == nil { isEarlyTerminated = true - return false + return false, nil } if fh, found := wfs.fhMap.FindFileHandle(inode); found { glog.V(4).Infof("readdir opened file %s", dirPath.Child(dirEntry.Name)) @@ -175,7 +176,7 @@ func (wfs *WFS) doReadDirectory(input *fuse.ReadIn, out *fuse.DirEntryList, isPl } wfs.outputFilerEntry(entryOut, inode, entry) } - return true + return true, nil } if input.Offset < directoryStreamBaseOffset { @@ -206,7 +207,7 @@ func (wfs *WFS) doReadDirectory(input *fuse.ReadIn, out *fuse.DirEntryList, isPl entryCurrentIndex := input.Offset - dh.entryStreamOffset for uint64(len(dh.entryStream)) > entryCurrentIndex { entry := dh.entryStream[entryCurrentIndex] - if processEachEntryFn(entry) { + if process, _ := processEachEntryFn(entry); process { lastEntryName = entry.Name() entryCurrentIndex++ } else { @@ -221,7 +222,7 @@ func (wfs *WFS) doReadDirectory(input *fuse.ReadIn, out *fuse.DirEntryList, isPl glog.Errorf("dir ReadDirAll %s: %v", dirPath, err) return fuse.EIO } - listErr := wfs.metaCache.ListDirectoryEntries(context.Background(), dirPath, lastEntryName, false, int64(math.MaxInt32), func(entry *filer.Entry) bool { + listErr := wfs.metaCache.ListDirectoryEntries(context.Background(), dirPath, lastEntryName, false, int64(math.MaxInt32), func(entry *filer.Entry) (bool, error) { dh.entryStream = append(dh.entryStream, entry) return processEachEntryFn(entry) }) |
