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.go188
1 files changed, 0 insertions, 188 deletions
diff --git a/pkg/driver/mounter_seaweedfs.go b/pkg/driver/mounter_seaweedfs.go
deleted file mode 100644
index 56ba98b..0000000
--- a/pkg/driver/mounter_seaweedfs.go
+++ /dev/null
@@ -1,188 +0,0 @@
-package driver
-
-import (
- "fmt"
- "os"
- "path/filepath"
- "strings"
-
- "github.com/seaweedfs/seaweedfs-csi-driver/pkg/datalocality"
- "github.com/seaweedfs/seaweedfs/weed/glog"
- "github.com/seaweedfs/seaweedfs/weed/util"
-)
-
-// Implements Mounter
-type seaweedFsMounter struct {
- volumeID string
- path string
- collection string
- readOnly bool
- driver *SeaweedFsDriver
- volContext map[string]string
-}
-
-type seaweedFsUnmounter struct {
- unmounter Unmounter
- cacheDir string
-}
-
-const (
- seaweedFsCmd = "weed"
-)
-
-func newSeaweedFsMounter(volumeID string, path string, collection string, readOnly bool, driver *SeaweedFsDriver, volContext map[string]string) (Mounter, error) {
- return &seaweedFsMounter{
- volumeID: volumeID,
- path: path,
- collection: collection,
- readOnly: readOnly,
- driver: driver,
- volContext: volContext,
- }, nil
-}
-
-func (seaweedFs *seaweedFsMounter) Mount(target string) (Unmounter, error) {
- glog.V(0).Infof("mounting %v %s to %s", seaweedFs.driver.filers, seaweedFs.path, target)
-
- var filers []string
- for _, address := range seaweedFs.driver.filers {
- filers = append(filers, string(address))
- }
-
- // CacheDirForRead 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)
-
- // Final args
- args := []string{
- "-logtostderr=true",
- "mount",
- "-dirAutoCreate=true",
- "-umask=000",
- fmt.Sprintf("-dir=%s", target),
- fmt.Sprintf("-localSocket=%s", GetLocalSocket(seaweedFs.volumeID)),
- fmt.Sprintf("-cacheDir=%s", cacheDir),
- }
-
- if seaweedFs.readOnly {
- args = append(args, "-readOnly")
- }
-
- // Values for override-able args
- // Whitelist for merging with volContext
- argsMap := map[string]string{
- "collection": seaweedFs.collection,
- "filer": strings.Join(filers, ","),
- "filer.path": seaweedFs.path,
- "cacheCapacityMB": fmt.Sprint(seaweedFs.driver.CacheCapacityMB),
- "concurrentWriters": fmt.Sprint(seaweedFs.driver.ConcurrentWriters),
- "map.uid": seaweedFs.driver.UidMap,
- "map.gid": seaweedFs.driver.GidMap,
- "disk": "",
- "dataCenter": "",
- "replication": "",
- "ttl": "",
- "chunkSizeLimitMB": "",
- "volumeServerAccess": "",
- "readRetryTime": "",
- }
-
- // Handle DataLocality
- dataLocality := seaweedFs.driver.DataLocality
- // Try to override when set in context
- if dataLocalityStr, ok := seaweedFs.volContext["dataLocality"]; ok {
- // Convert to enum
- dataLocalityRes, ok := datalocality.FromString(dataLocalityStr)
- if !ok {
- glog.Warning("volumeContext 'dataLocality' invalid")
- } else {
- dataLocality = dataLocalityRes
- }
- }
- if err := CheckDataLocality(&dataLocality, &seaweedFs.driver.DataCenter); err != nil {
- return nil, err
- }
- // Settings based on type
- switch dataLocality {
- case datalocality.Write_preferLocalDc:
- argsMap["dataCenter"] = seaweedFs.driver.DataCenter
- }
-
- // volContext-parameter -> mount-arg
- parameterArgMap := map[string]string{
- "uidMap": "map.uid",
- "gidMap": "map.gid",
- "filerPath": "filer.path",
- // volumeContext has "diskType", but mount-option is "disk", converting for backwards compatability
- "diskType": "disk",
- }
-
- // Explicitly ignored volContext args e.g. handled somewhere else
- ignoreArgs := []string{
- "dataLocality",
- }
-
- // Merge volContext into argsMap with key-mapping
- for arg, value := range seaweedFs.volContext {
- if in_arr(ignoreArgs, arg) {
- continue
- }
-
- // Check if key-mapping exists
- newArg, ok := parameterArgMap[arg]
- if ok {
- arg = newArg
- }
-
- // Check if arg can be applied
- if _, ok := argsMap[arg]; !ok {
- glog.Warningf("VolumeContext '%s' ignored", arg)
- continue
- }
-
- // Write to args-map
- argsMap[arg] = value
- }
-
- // Convert Args-Map to args
- for arg, value := range argsMap {
- if value != "" { // ignore empty values
- args = append(args, fmt.Sprintf("-%s=%s", arg, value))
- }
- }
-
- 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 &seaweedFsUnmounter{unmounter: u, cacheDir: cacheDir}, err
-}
-
-func (su *seaweedFsUnmounter) Unmount() error {
- err := su.unmounter.Unmount()
- err2 := os.RemoveAll(su.cacheDir)
- if err2 != nil {
- glog.Warningf("error removing cache from: %s, err: %v", su.cacheDir, err2)
- }
- return err
-}
-
-func GetLocalSocket(volumeID string) string {
- montDirHash := util.HashToInt32([]byte(volumeID))
- if montDirHash < 0 {
- montDirHash = -montDirHash
- }
-
- socket := fmt.Sprintf("/tmp/seaweedfs-mount-%d.sock", montDirHash)
- return socket
-}
-
-func in_arr(arr []string, val string) bool {
- for _, v := range arr {
- if val == v {
- return true
- }
- }
- return false
-}