aboutsummaryrefslogtreecommitdiff
path: root/pkg/driver/mounter_seaweedfs.go
diff options
context:
space:
mode:
Diffstat (limited to 'pkg/driver/mounter_seaweedfs.go')
-rw-r--r--pkg/driver/mounter_seaweedfs.go57
1 files changed, 46 insertions, 11 deletions
diff --git a/pkg/driver/mounter_seaweedfs.go b/pkg/driver/mounter_seaweedfs.go
index 5cbca71..a82b10b 100644
--- a/pkg/driver/mounter_seaweedfs.go
+++ b/pkg/driver/mounter_seaweedfs.go
@@ -2,6 +2,8 @@ package driver
import (
"fmt"
+ "os"
+ "path/filepath"
"strconv"
"strings"
@@ -19,6 +21,11 @@ type seaweedFsMounter struct {
volContext map[string]string
}
+type seaweedFsUnmounter struct {
+ unmounter Unmounter
+ cacheDir string
+}
+
const (
seaweedFsCmd = "weed"
)
@@ -34,6 +41,25 @@ func newSeaweedFsMounter(volumeID string, path string, collection string, readOn
}, nil
}
+func (seaweedFs *seaweedFsMounter) getOrDefaultContext(key string, defaultValue string) string {
+ v, ok := seaweedFs.volContext[key]
+ if ok {
+ return v
+ }
+ return defaultValue
+}
+
+func (seaweedFs *seaweedFsMounter) getOrDefaultContextInt(key string, defaultValue int) int {
+ v := seaweedFs.getOrDefaultContext(key, "")
+ if v != "" {
+ iv, err := strconv.Atoi(v)
+ if err == nil {
+ return iv
+ }
+ }
+ return defaultValue
+}
+
func (seaweedFs *seaweedFsMounter) Mount(target string) (Unmounter, error) {
glog.V(0).Infof("mounting %v %s to %s", seaweedFs.driver.filers, seaweedFs.path, target)
@@ -51,7 +77,7 @@ func (seaweedFs *seaweedFsMounter) Mount(target string) (Unmounter, error) {
fmt.Sprintf("-collection=%s", seaweedFs.collection),
fmt.Sprintf("-filer=%s", strings.Join(filers, ",")),
fmt.Sprintf("-filer.path=%s", seaweedFs.path),
- fmt.Sprintf("-cacheCapacityMB=%d", seaweedFs.driver.CacheSizeMB),
+ fmt.Sprintf("-cacheCapacityMB=%d", seaweedFs.getOrDefaultContextInt("cacheSizeMB", seaweedFs.driver.CacheSizeMB)),
fmt.Sprintf("-localSocket=%s", GetLocalSocket(seaweedFs.volumeID)),
}
@@ -78,24 +104,33 @@ func (seaweedFs *seaweedFsMounter) Mount(target string) (Unmounter, error) {
args = append(args, "-readOnly")
}
- if seaweedFs.driver.ConcurrentWriters > 0 {
- args = append(args, fmt.Sprintf("-concurrentWriters=%d", seaweedFs.driver.ConcurrentWriters))
- }
- if seaweedFs.driver.CacheDir != "" {
- args = append(args, fmt.Sprintf("-cacheDir=%s", seaweedFs.driver.CacheDir))
+ // CacheDir should be always defined - we use temp dir in case it is not defined
+ // we need to use predictable cache path, because we need to clean it up on unstage
+ cacheDir := filepath.Join(seaweedFs.driver.CacheDir, seaweedFs.volumeID)
+ args = append(args, fmt.Sprintf("-cacheDir=%s", cacheDir))
+
+ if cw := seaweedFs.getOrDefaultContextInt("concurrentWriters", seaweedFs.driver.ConcurrentWriters); cw > 0 {
+ args = append(args, fmt.Sprintf("-concurrentWriters=%d", cw))
}
- if seaweedFs.driver.UidMap != "" {
- args = append(args, fmt.Sprintf("-map.uid=%s", seaweedFs.driver.UidMap))
+ if uidMap := seaweedFs.getOrDefaultContext("uidMap", seaweedFs.driver.UidMap); uidMap != "" {
+ args = append(args, fmt.Sprintf("-map.uid=%s", uidMap))
}
- if seaweedFs.driver.GidMap != "" {
- args = append(args, fmt.Sprintf("-map.gid=%s", seaweedFs.driver.GidMap))
+ if gidMap := seaweedFs.getOrDefaultContext("gidMap", seaweedFs.driver.GidMap); gidMap != "" {
+ args = append(args, fmt.Sprintf("-map.gid=%s", gidMap))
}
u, err := fuseMount(target, seaweedFsCmd, args)
if err != nil {
glog.Errorf("mount %v %s to %s: %s", seaweedFs.driver.filers, seaweedFs.path, target, err)
}
- return u, err
+
+ return &seaweedFsUnmounter{unmounter: u, cacheDir: cacheDir}, err
+}
+
+func (su *seaweedFsUnmounter) Unmount() error {
+ err := su.unmounter.Unmount()
+ _ = os.RemoveAll(su.cacheDir)
+ return err
}
func GetLocalSocket(volumeID string) string {