diff --git a/weed/command/mount.go b/weed/command/mount.go index 6a7856546..8d026feac 100644 --- a/weed/command/mount.go +++ b/weed/command/mount.go @@ -1,14 +1,15 @@ package command type MountOptions struct { - filer *string - filerGrpcPort *int - dir *string - collection *string - replication *string - ttlSec *int - chunkSizeLimitMB *int - dataCenter *string + filer *string + filerGrpcPort *int + filerMountRootPath *string + dir *string + collection *string + replication *string + ttlSec *int + chunkSizeLimitMB *int + dataCenter *string } var ( @@ -19,6 +20,7 @@ func init() { cmdMount.Run = runMount // break init cycle mountOptions.filer = cmdMount.Flag.String("filer", "localhost:8888", "weed filer location") mountOptions.filerGrpcPort = cmdMount.Flag.Int("filer.grpc.port", 0, "filer grpc server listen port, default to http port + 10000") + mountOptions.filerMountRootPath = cmdMount.Flag.String("filer.path", "/", "mount this remote path from filer server") mountOptions.dir = cmdMount.Flag.String("dir", ".", "mount weed filer to this directory") mountOptions.collection = cmdMount.Flag.String("collection", "", "collection to create the files") mountOptions.replication = cmdMount.Flag.String("replication", "000", "replication to create to files") diff --git a/weed/command/mount_std.go b/weed/command/mount_std.go index 05ed2a02a..4905df986 100644 --- a/weed/command/mount_std.go +++ b/weed/command/mount_std.go @@ -73,7 +73,7 @@ func runMount(cmd *Command, args []string) bool { filerAddress := fmt.Sprintf("%s:%d", hostnameAndPort[0], filerGrpcPort) err = fs.Serve(c, filesys.NewSeaweedFileSystem( - filerAddress, *mountOptions.collection, *mountOptions.replication, int32(*mountOptions.ttlSec), + filerAddress, *mountOptions.filerMountRootPath, *mountOptions.collection, *mountOptions.replication, int32(*mountOptions.ttlSec), *mountOptions.chunkSizeLimitMB, *mountOptions.dataCenter)) if err != nil { fuse.Unmount(*mountOptions.dir) diff --git a/weed/filesys/wfs.go b/weed/filesys/wfs.go index 56b69a8ac..2f885d0af 100644 --- a/weed/filesys/wfs.go +++ b/weed/filesys/wfs.go @@ -9,10 +9,12 @@ import ( "bazil.org/fuse" "github.com/chrislusf/seaweedfs/weed/glog" "github.com/chrislusf/seaweedfs/weed/util" + "strings" ) type WFS struct { filerGrpcAddress string + filerMountRootPath string listDirectoryEntriesCache *ccache.Cache collection string replication string @@ -26,9 +28,13 @@ type WFS struct { pathToHandleLock sync.Mutex } -func NewSeaweedFileSystem(filerGrpcAddress string, collection string, replication string, ttlSec int32, chunkSizeLimitMB int, dataCenter string) *WFS { +func NewSeaweedFileSystem(filerGrpcAddress string, filerMountRootPath string, collection string, replication string, ttlSec int32, chunkSizeLimitMB int, dataCenter string) *WFS { + if filerMountRootPath != "/" && strings.HasSuffix(filerMountRootPath, "/") { + filerMountRootPath = filerMountRootPath[0:len(filerMountRootPath)-1] + } return &WFS{ filerGrpcAddress: filerGrpcAddress, + filerMountRootPath: filerMountRootPath, listDirectoryEntriesCache: ccache.New(ccache.Configure().MaxSize(6000).ItemsToPrune(100)), collection: collection, replication: replication, @@ -40,7 +46,7 @@ func NewSeaweedFileSystem(filerGrpcAddress string, collection string, replicatio } func (wfs *WFS) Root() (fs.Node, error) { - return &Dir{Path: "/", wfs: wfs}, nil + return &Dir{Path: wfs.filerMountRootPath, wfs: wfs}, nil } func (wfs *WFS) withFilerClient(fn func(filer_pb.SeaweedFilerClient) error) error {