diff options
| author | Ruakij <ruakij@ruekov.eu> | 2023-01-16 12:51:06 +0100 |
|---|---|---|
| committer | Ruakij <ruakij@ruekov.eu> | 2023-01-16 19:07:40 +0100 |
| commit | 097bf9ab328477aef512220617266c178edb8766 (patch) | |
| tree | e2e710c0f91960432f5744b8d8e228758ebc095e /pkg | |
| parent | ae6e1c343ee742c06df762111f74158fe2a24159 (diff) | |
| download | seaweedfs-csi-driver-097bf9ab328477aef512220617266c178edb8766.tar.xz seaweedfs-csi-driver-097bf9ab328477aef512220617266c178edb8766.zip | |
Add dataLocality flag, checking and handling
Diffstat (limited to 'pkg')
| -rw-r--r-- | pkg/driver/driver.go | 3 | ||||
| -rw-r--r-- | pkg/driver/mounter_seaweedfs.go | 20 |
2 files changed, 23 insertions, 0 deletions
diff --git a/pkg/driver/driver.go b/pkg/driver/driver.go index 47a55e0..1cc3832 100644 --- a/pkg/driver/driver.go +++ b/pkg/driver/driver.go @@ -10,6 +10,7 @@ import ( "github.com/seaweedfs/seaweedfs/weed/pb/filer_pb" "github.com/seaweedfs/seaweedfs/weed/security" "github.com/seaweedfs/seaweedfs/weed/util" + "github.com/seaweedfs/seaweedfs-csi-driver/pkg/datalocality" "google.golang.org/grpc" "google.golang.org/grpc/codes" "google.golang.org/grpc/status" @@ -43,6 +44,8 @@ type SeaweedFsDriver struct { CacheDir string UidMap string GidMap string + DataCenter string + DataLocality datalocality.DataLocality } func NewSeaweedFsDriver(filer, nodeID, endpoint string) *SeaweedFsDriver { diff --git a/pkg/driver/mounter_seaweedfs.go b/pkg/driver/mounter_seaweedfs.go index 7035cd4..cbb77cd 100644 --- a/pkg/driver/mounter_seaweedfs.go +++ b/pkg/driver/mounter_seaweedfs.go @@ -7,6 +7,7 @@ import ( "strconv" "strings" + "github.com/seaweedfs/seaweedfs-csi-driver/pkg/datalocality" "github.com/seaweedfs/seaweedfs/weed/glog" "github.com/seaweedfs/seaweedfs/weed/util" ) @@ -85,6 +86,24 @@ func (seaweedFs *seaweedFsMounter) Mount(target string) (Unmounter, error) { "map.gid": seaweedFs.driver.GidMap, } + // 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 + } + } + // 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", @@ -97,6 +116,7 @@ func (seaweedFs *seaweedFsMounter) Mount(target string) (Unmounter, error) { // Fields supplied in context, but ignored because they are handled explicitly somewhere else ignoreArgs := []string{ "volumeCapacity", + "dataLocality", } // Merge volContext into argsMap with key-mapping |
