Browse Source

change to use fuse file system

pull/2668/head
chrislu 3 years ago
parent
commit
180445f5a8
  1. 59
      weed/command/mount2_std.go
  2. 4
      weed/mount/weedfs.go
  3. 13
      weed/mount/weedfs_stats.go

59
weed/command/mount2_std.go

@ -11,7 +11,6 @@ import (
"github.com/chrislusf/seaweedfs/weed/pb/filer_pb"
"github.com/chrislusf/seaweedfs/weed/security"
"github.com/chrislusf/seaweedfs/weed/storage/types"
"github.com/hanwen/go-fuse/v2/fs"
"github.com/hanwen/go-fuse/v2/fuse"
"net/http"
"os"
@ -141,40 +140,26 @@ func RunMount2(option *Mount2Options, umask os.FileMode) bool {
}
// mount fuse
sec := time.Second
opts := &fs.Options{
MountOptions: fuse.MountOptions{
AllowOther: *option.allowOthers,
Options: nil,
MaxBackground: 128,
MaxWrite: 1024 * 1024 * 2,
MaxReadAhead: 1024 * 1024 * 2,
IgnoreSecurityLabels: false,
RememberInodes: false,
FsName: *option.filer + ":" + filerMountRootPath,
Name: "seaweedfs",
SingleThreaded: false,
DisableXAttrs: false,
Debug: false,
EnableLocks: false,
ExplicitDataCacheControl: false,
// SyncRead: false, // set to false to enable the FUSE_CAP_ASYNC_READ capability
DirectMount: true,
DirectMountFlags: 0,
// EnableAcl: false,
},
EntryTimeout: &sec,
AttrTimeout: &sec,
NegativeTimeout: nil,
FirstAutomaticIno: 0,
OnAdd: nil,
NullPermissions: false,
UID: 0,
GID: 0,
ServerCallbacks: nil,
Logger: nil,
}
opts.Debug = true
fuseMountOptions := &fuse.MountOptions{
AllowOther: *option.allowOthers,
Options: nil,
MaxBackground: 128,
MaxWrite: 1024 * 1024 * 2,
MaxReadAhead: 1024 * 1024 * 2,
IgnoreSecurityLabels: false,
RememberInodes: false,
FsName: *option.filer + ":" + filerMountRootPath,
Name: "seaweedfs",
SingleThreaded: false,
DisableXAttrs: false,
Debug: true,
EnableLocks: false,
ExplicitDataCacheControl: false,
// SyncRead: false, // set to false to enable the FUSE_CAP_ASYNC_READ capability
DirectMount: true,
DirectMountFlags: 0,
// EnableAcl: false,
}
// find mount point
mountRoot := filerMountRootPath
@ -207,7 +192,7 @@ func RunMount2(option *Mount2Options, umask os.FileMode) bool {
UidGidMapper: uidGidMapper,
})
server, err := fs.Mount(dir, seaweedFileSystem.Root(), opts)
server, err := fuse.NewServer(seaweedFileSystem, dir, fuseMountOptions)
if err != nil {
glog.Fatalf("Mount fail: %v", err)
}
@ -217,7 +202,7 @@ func RunMount2(option *Mount2Options, umask os.FileMode) bool {
fmt.Printf("This is SeaweedFS version %s %s %s\n", util.Version(), runtime.GOOS, runtime.GOARCH)
server.Wait()
server.Serve()
return true
}

4
weed/mount/weedfs.go

@ -87,6 +87,10 @@ func (wfs *WFS) Root() *Directory {
return &wfs.root
}
func (wfs *WFS) String() string {
return "seaweedfs"
}
func (option *Option) setupUniqueCacheDirectory() {
cacheUniqueId := util.Md5String([]byte(option.MountDirectory + string(option.FilerAddresses[0]) + option.FilerMountRootPath + util.Version()))[0:8]
option.uniqueCacheDir = path.Join(option.CacheDir, cacheUniqueId)

13
weed/mount/weedfs_stats.go

@ -5,26 +5,19 @@ import (
"fmt"
"github.com/chrislusf/seaweedfs/weed/glog"
"github.com/chrislusf/seaweedfs/weed/pb/filer_pb"
"github.com/hanwen/go-fuse/v2/fs"
"github.com/hanwen/go-fuse/v2/fuse"
"math"
"os"
"syscall"
"time"
)
const blockSize = 512
var _ = fs.NodeStatfser(&Directory{})
type statsCache struct {
filer_pb.StatisticsResponse
lastChecked int64 // unix time in seconds
}
func (dir *Directory) Statfs(ctx context.Context, out *fuse.StatfsOut) syscall.Errno {
wfs := dir.wfs
func (wfs *WFS) StatFs(cancel <-chan struct{}, in *fuse.InHeader, out *fuse.StatfsOut) (code fuse.Status) {
glog.V(4).Infof("reading fs stats")
@ -56,7 +49,7 @@ func (dir *Directory) Statfs(ctx context.Context, out *fuse.StatfsOut) syscall.E
})
if err != nil {
glog.V(0).Infof("filer Statistics: %v", err)
return fs.ToErrno(os.ErrInvalid)
return fuse.OK
}
}
@ -83,5 +76,5 @@ func (dir *Directory) Statfs(ctx context.Context, out *fuse.StatfsOut) syscall.E
out.NameLen = 1024
out.Frsize = uint32(blockSize)
return fs.OK
return fuse.OK
}
Loading…
Cancel
Save