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/pb/filer_pb"
"github.com/chrislusf/seaweedfs/weed/security" "github.com/chrislusf/seaweedfs/weed/security"
"github.com/chrislusf/seaweedfs/weed/storage/types" "github.com/chrislusf/seaweedfs/weed/storage/types"
"github.com/hanwen/go-fuse/v2/fs"
"github.com/hanwen/go-fuse/v2/fuse" "github.com/hanwen/go-fuse/v2/fuse"
"net/http" "net/http"
"os" "os"
@ -141,40 +140,26 @@ func RunMount2(option *Mount2Options, umask os.FileMode) bool {
} }
// mount fuse // 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 // find mount point
mountRoot := filerMountRootPath mountRoot := filerMountRootPath
@ -207,7 +192,7 @@ func RunMount2(option *Mount2Options, umask os.FileMode) bool {
UidGidMapper: uidGidMapper, UidGidMapper: uidGidMapper,
}) })
server, err := fs.Mount(dir, seaweedFileSystem.Root(), opts)
server, err := fuse.NewServer(seaweedFileSystem, dir, fuseMountOptions)
if err != nil { if err != nil {
glog.Fatalf("Mount fail: %v", err) 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) fmt.Printf("This is SeaweedFS version %s %s %s\n", util.Version(), runtime.GOOS, runtime.GOARCH)
server.Wait()
server.Serve()
return true return true
} }

4
weed/mount/weedfs.go

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

13
weed/mount/weedfs_stats.go

@ -5,26 +5,19 @@ import (
"fmt" "fmt"
"github.com/chrislusf/seaweedfs/weed/glog" "github.com/chrislusf/seaweedfs/weed/glog"
"github.com/chrislusf/seaweedfs/weed/pb/filer_pb" "github.com/chrislusf/seaweedfs/weed/pb/filer_pb"
"github.com/hanwen/go-fuse/v2/fs"
"github.com/hanwen/go-fuse/v2/fuse" "github.com/hanwen/go-fuse/v2/fuse"
"math" "math"
"os"
"syscall"
"time" "time"
) )
const blockSize = 512 const blockSize = 512
var _ = fs.NodeStatfser(&Directory{})
type statsCache struct { type statsCache struct {
filer_pb.StatisticsResponse filer_pb.StatisticsResponse
lastChecked int64 // unix time in seconds 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") 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 { if err != nil {
glog.V(0).Infof("filer Statistics: %v", err) 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.NameLen = 1024
out.Frsize = uint32(blockSize) out.Frsize = uint32(blockSize)
return fs.OK
return fuse.OK
} }
Loading…
Cancel
Save