nfsmount: fix stale handle problem after converting options to new style

This problem was caused by the defaults not being set for the options
after the conversion to the new config system in

28ba4b832d serve nfs: convert options to new style

This makes the nfs serve options globally available so nfsmount can
use them directly.

Fixes #8029
This commit is contained in:
Nick Craig-Wood 2024-08-27 16:49:42 +01:00
parent 3bb6d0a42b
commit a365503750
3 changed files with 12 additions and 11 deletions

View File

@ -21,8 +21,7 @@ import (
) )
var ( var (
sudo = false sudo = false
nfsServerOpt nfs.Options
) )
func init() { func init() {
@ -33,11 +32,11 @@ func init() {
mountlib.AddRc(name, mount) mountlib.AddRc(name, mount)
cmdFlags := cmd.Flags() cmdFlags := cmd.Flags()
flags.BoolVarP(cmdFlags, &sudo, "sudo", "", sudo, "Use sudo to run the mount/umount commands as root.", "") flags.BoolVarP(cmdFlags, &sudo, "sudo", "", sudo, "Use sudo to run the mount/umount commands as root.", "")
nfs.AddFlags(cmdFlags, &nfsServerOpt) nfs.AddFlags(cmdFlags)
} }
func mount(VFS *vfs.VFS, mountpoint string, opt *mountlib.Options) (asyncerrors <-chan error, unmount func() error, err error) { func mount(VFS *vfs.VFS, mountpoint string, opt *mountlib.Options) (asyncerrors <-chan error, unmount func() error, err error) {
s, err := nfs.NewServer(context.Background(), VFS, &nfsServerOpt) s, err := nfs.NewServer(context.Background(), VFS, &nfs.Opt)
if err != nil { if err != nil {
return return
} }

View File

@ -7,6 +7,7 @@ import (
"runtime" "runtime"
"testing" "testing"
"github.com/rclone/rclone/cmd/serve/nfs"
"github.com/rclone/rclone/vfs/vfscommon" "github.com/rclone/rclone/vfs/vfscommon"
"github.com/rclone/rclone/vfs/vfstest" "github.com/rclone/rclone/vfs/vfstest"
"github.com/stretchr/testify/require" "github.com/stretchr/testify/require"
@ -29,7 +30,7 @@ func TestMount(t *testing.T) {
} }
sudo = true sudo = true
} }
nfsServerOpt.HandleCacheDir = t.TempDir() nfs.Opt.HandleCacheDir = t.TempDir()
require.NoError(t, nfsServerOpt.HandleCache.Set("disk")) require.NoError(t, nfs.Opt.HandleCache.Set("disk"))
vfstest.RunTests(t, false, vfscommon.CacheModeWrites, false, mount) vfstest.RunTests(t, false, vfscommon.CacheModeWrites, false, mount)
} }

View File

@ -43,7 +43,7 @@ var OptionsInfo = fs.Options{{
}} }}
func init() { func init() {
fs.RegisterGlobalOptions(fs.OptionsInfo{Name: "nfs", Opt: &opt, Options: OptionsInfo}) fs.RegisterGlobalOptions(fs.OptionsInfo{Name: "nfs", Opt: &Opt, Options: OptionsInfo})
} }
type handleCache = fs.Enum[handleCacheChoices] type handleCache = fs.Enum[handleCacheChoices]
@ -72,16 +72,17 @@ type Options struct {
HandleCacheDir string `config:"nfs_cache_dir"` // where the handle cache should be stored HandleCacheDir string `config:"nfs_cache_dir"` // where the handle cache should be stored
} }
var opt Options // Opt is the default set of serve nfs options
var Opt Options
// AddFlags adds flags for serve nfs (and nfsmount) // AddFlags adds flags for serve nfs (and nfsmount)
func AddFlags(flagSet *pflag.FlagSet, Opt *Options) { func AddFlags(flagSet *pflag.FlagSet) {
flags.AddFlagsFromOptions(flagSet, "", OptionsInfo) flags.AddFlagsFromOptions(flagSet, "", OptionsInfo)
} }
func init() { func init() {
vfsflags.AddFlags(Command.Flags()) vfsflags.AddFlags(Command.Flags())
AddFlags(Command.Flags(), &opt) AddFlags(Command.Flags())
} }
// Run the command // Run the command
@ -90,7 +91,7 @@ func Run(command *cobra.Command, args []string) {
cmd.CheckArgs(1, 1, command, args) cmd.CheckArgs(1, 1, command, args)
f = cmd.NewFsSrc(args) f = cmd.NewFsSrc(args)
cmd.Run(false, true, command, func() error { cmd.Run(false, true, command, func() error {
s, err := NewServer(context.Background(), vfs.New(f, &vfscommon.Opt), &opt) s, err := NewServer(context.Background(), vfs.New(f, &vfscommon.Opt), &Opt)
if err != nil { if err != nil {
return err return err
} }