aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorchrislu <chris.lu@gmail.com>2022-02-11 21:35:09 -0800
committerchrislu <chris.lu@gmail.com>2022-02-11 21:35:09 -0800
commit180445f5a889c25c15074e105405b2e96c1eadb2 (patch)
tree8eb8d1db11db61f307d709e52fcddc23d1147c9b
parent45a0fda9bda7457db31f6134424d251ffac530f8 (diff)
downloadseaweedfs-180445f5a889c25c15074e105405b2e96c1eadb2.tar.xz
seaweedfs-180445f5a889c25c15074e105405b2e96c1eadb2.zip
change to use fuse file system
-rw-r--r--weed/command/mount2_std.go59
-rw-r--r--weed/mount/weedfs.go4
-rw-r--r--weed/mount/weedfs_stats.go13
3 files changed, 29 insertions, 47 deletions
diff --git a/weed/command/mount2_std.go b/weed/command/mount2_std.go
index 0cb288c3b..cb2b46556 100644
--- a/weed/command/mount2_std.go
+++ b/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
}
diff --git a/weed/mount/weedfs.go b/weed/mount/weedfs.go
index 5f35d8112..8aa9c95a7 100644
--- a/weed/mount/weedfs.go
+++ b/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)
diff --git a/weed/mount/weedfs_stats.go b/weed/mount/weedfs_stats.go
index f3ef268df..3de561082 100644
--- a/weed/mount/weedfs_stats.go
+++ b/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
}