From 6c7fa567d4b94790f213d0546b365a4e989a0e3d Mon Sep 17 00:00:00 2001 From: chrislu Date: Wed, 16 Aug 2023 23:39:21 -0700 Subject: [PATCH] add separate cache directory for write buffers --- weed/command/fuse.go | 2 ++ weed/command/mount.go | 2 ++ weed/command/mount_std.go | 1 + weed/mount/weedfs.go | 5 ++++- 4 files changed, 9 insertions(+), 1 deletion(-) diff --git a/weed/command/fuse.go b/weed/command/fuse.go index 5beeb3b1f..23055c84d 100644 --- a/weed/command/fuse.go +++ b/weed/command/fuse.go @@ -153,6 +153,8 @@ func runFuse(cmd *Command, args []string) bool { } else { panic(fmt.Errorf("cacheCapacityMB: %s", err)) } + case "cacheDirWrite": + mountOptions.cacheDirWrite = ¶meter.value case "dataCenter": mountOptions.dataCenter = ¶meter.value case "allowOthers": diff --git a/weed/command/mount.go b/weed/command/mount.go index 64c8c754d..bb4325b1a 100644 --- a/weed/command/mount.go +++ b/weed/command/mount.go @@ -18,6 +18,7 @@ type MountOptions struct { chunkSizeLimitMB *int concurrentWriters *int cacheDir *string + cacheDirWrite *string cacheSizeMB *int64 dataCenter *string allowOthers *bool @@ -56,6 +57,7 @@ func init() { mountOptions.concurrentWriters = cmdMount.Flag.Int("concurrentWriters", 32, "limit concurrent goroutine writers") mountOptions.cacheDir = cmdMount.Flag.String("cacheDir", os.TempDir(), "local cache directory for file chunks and meta data") mountOptions.cacheSizeMB = cmdMount.Flag.Int64("cacheCapacityMB", 0, "file chunk read cache capacity in MB") + mountOptions.cacheDirWrite = cmdMount.Flag.String("cacheDirWrite", os.TempDir(), "buffer writes mostly for large files") mountOptions.dataCenter = cmdMount.Flag.String("dataCenter", "", "prefer to write to the data center") mountOptions.allowOthers = cmdMount.Flag.Bool("allowOthers", true, "allows other users to access the file system") mountOptions.umaskString = cmdMount.Flag.String("umask", "022", "octal umask, e.g., 022, 0111") diff --git a/weed/command/mount_std.go b/weed/command/mount_std.go index dff53f25e..86c3e521e 100644 --- a/weed/command/mount_std.go +++ b/weed/command/mount_std.go @@ -227,6 +227,7 @@ func RunMount(option *MountOptions, umask os.FileMode) bool { ConcurrentWriters: *option.concurrentWriters, CacheDir: *option.cacheDir, CacheSizeMB: *option.cacheSizeMB, + CacheDirWrite: *option.cacheDirWrite, DataCenter: *option.dataCenter, Quota: int64(*option.collectionQuota) * 1024 * 1024, MountUid: uid, diff --git a/weed/mount/weedfs.go b/weed/mount/weedfs.go index 7cff71c52..4e6bf80ab 100644 --- a/weed/mount/weedfs.go +++ b/weed/mount/weedfs.go @@ -40,6 +40,7 @@ type Option struct { ConcurrentWriters int CacheDir string CacheSizeMB int64 + CacheDirWrite string DataCenter string Umask os.FileMode Quota int64 @@ -106,6 +107,7 @@ func NewSeaweedFileSystem(option *Option) *WFS { grace.OnInterrupt(func() { wfs.metaCache.Shutdown() os.RemoveAll(option.getUniqueCacheDir()) + os.RemoveAll(option.getTempFilePageDir()) }) if wfs.option.ConcurrentWriters > 0 { @@ -192,7 +194,8 @@ func (wfs *WFS) getCurrentFiler() pb.ServerAddress { 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) - option.uniqueCacheTempPageDir = filepath.Join(option.uniqueCacheDir, "swap") + os.MkdirAll(option.uniqueCacheDir, os.FileMode(0777)&^option.Umask) + option.uniqueCacheTempPageDir = filepath.Join(path.Join(option.CacheDirWrite, cacheUniqueId), "swap") os.MkdirAll(option.uniqueCacheTempPageDir, os.FileMode(0777)&^option.Umask) }