|
|
@ -10,6 +10,7 @@ import ( |
|
|
|
"math/rand" |
|
|
|
"os" |
|
|
|
"path" |
|
|
|
"path/filepath" |
|
|
|
"sync" |
|
|
|
"time" |
|
|
|
|
|
|
@ -54,6 +55,9 @@ type Option struct { |
|
|
|
VolumeServerAccess string // how to access volume servers
|
|
|
|
Cipher bool // whether encrypt data on volume server
|
|
|
|
UidGidMapper *meta_cache.UidGidMapper |
|
|
|
|
|
|
|
uniqueCacheDir string |
|
|
|
uniqueCacheTempPageDir string |
|
|
|
} |
|
|
|
|
|
|
|
var _ = fs.FS(&WFS{}) |
|
|
@ -98,14 +102,12 @@ func NewSeaweedFileSystem(option *Option) *WFS { |
|
|
|
signature: util.RandomInt32(), |
|
|
|
} |
|
|
|
wfs.option.filerIndex = rand.Intn(len(option.FilerAddresses)) |
|
|
|
cacheUniqueId := util.Md5String([]byte(option.MountDirectory + option.FilerGrpcAddresses[0] + option.FilerMountRootPath + util.Version()))[0:8] |
|
|
|
cacheDir := path.Join(option.CacheDir, cacheUniqueId) |
|
|
|
wfs.option.setupUniqueCacheDirectory() |
|
|
|
if option.CacheSizeMB > 0 { |
|
|
|
os.MkdirAll(cacheDir, os.FileMode(0777)&^option.Umask) |
|
|
|
wfs.chunkCache = chunk_cache.NewTieredChunkCache(256, cacheDir, option.CacheSizeMB, 1024*1024) |
|
|
|
wfs.chunkCache = chunk_cache.NewTieredChunkCache(256, option.getUniqueCacheDir(), option.CacheSizeMB, 1024*1024) |
|
|
|
} |
|
|
|
|
|
|
|
wfs.metaCache = meta_cache.NewMetaCache(path.Join(cacheDir, "meta"), util.FullPath(option.FilerMountRootPath), option.UidGidMapper, func(filePath util.FullPath) { |
|
|
|
wfs.metaCache = meta_cache.NewMetaCache(path.Join(option.getUniqueCacheDir(), "meta"), util.FullPath(option.FilerMountRootPath), option.UidGidMapper, func(filePath util.FullPath) { |
|
|
|
|
|
|
|
fsNode := NodeWithId(filePath.AsInode()) |
|
|
|
if err := wfs.Server.InvalidateNodeData(fsNode); err != nil { |
|
|
@ -271,6 +273,20 @@ func (wfs *WFS) getCurrentFiler() string { |
|
|
|
return wfs.option.FilerAddresses[wfs.option.filerIndex] |
|
|
|
} |
|
|
|
|
|
|
|
func (option *Option) setupUniqueCacheDirectory() { |
|
|
|
cacheUniqueId := util.Md5String([]byte(option.MountDirectory + option.FilerGrpcAddresses[0] + option.FilerMountRootPath + util.Version()))[0:8] |
|
|
|
option.uniqueCacheDir = path.Join(option.CacheDir, cacheUniqueId) |
|
|
|
option.uniqueCacheTempPageDir = filepath.Join(option.uniqueCacheDir, "sw") |
|
|
|
os.MkdirAll(option.uniqueCacheTempPageDir, os.FileMode(0777)&^option.Umask) |
|
|
|
} |
|
|
|
|
|
|
|
func (option *Option) getTempFilePageDir() string { |
|
|
|
return option.uniqueCacheTempPageDir |
|
|
|
} |
|
|
|
func (option *Option) getUniqueCacheDir() string { |
|
|
|
return option.uniqueCacheDir |
|
|
|
} |
|
|
|
|
|
|
|
type NodeWithId uint64 |
|
|
|
|
|
|
|
func (n NodeWithId) Id() uint64 { |
|
|
|