support write once read many

fix https://github.com/seaweedfs/seaweedfs/issues/5954
This commit is contained in:
chrislu
2024-09-04 02:25:07 -07:00
parent 18afdb15b6
commit eb02946c97
5 changed files with 15 additions and 2 deletions

View File

@@ -3,12 +3,20 @@ package mount
import (
"github.com/hanwen/go-fuse/v2/fuse"
"github.com/seaweedfs/seaweedfs/weed/pb/filer_pb"
"time"
)
func (wfs *WFS) AcquireHandle(inode uint64, uid, gid uint32) (fileHandle *FileHandle, status fuse.Status) {
func (wfs *WFS) AcquireHandle(inode uint64, flags, uid, gid uint32) (fileHandle *FileHandle, status fuse.Status) {
var entry *filer_pb.Entry
_, _, entry, status = wfs.maybeReadEntry(inode)
if status == fuse.OK {
if entry != nil && wfs.option.WriteOnceReadMany {
if entry.Attributes.Mtime+10 < time.Now().Unix() {
if flags&fuse.O_ANYWRITE != 0 {
return nil, fuse.EPERM
}
}
}
// need to AcquireFileHandle again to ensure correct handle counter
fileHandle = wfs.fhmap.AcquireFileHandle(wfs, inode, entry)
}