diff options
Diffstat (limited to 'pkg')
| -rw-r--r-- | pkg/driver/controllerserver.go | 12 | ||||
| -rw-r--r-- | pkg/driver/driver.go | 2 | ||||
| -rw-r--r-- | pkg/driver/mounter.go | 4 | ||||
| -rw-r--r-- | pkg/driver/mounter_seaweedfs.go | 26 | ||||
| -rw-r--r-- | pkg/driver/nodeserver.go | 16 |
5 files changed, 33 insertions, 27 deletions
diff --git a/pkg/driver/controllerserver.go b/pkg/driver/controllerserver.go index 0e07291..c57a72a 100644 --- a/pkg/driver/controllerserver.go +++ b/pkg/driver/controllerserver.go @@ -39,16 +39,8 @@ func (cs *ControllerServer) CreateVolume(ctx context.Context, req *csi.CreateVol } params := req.GetParameters() - glog.V(4).Info("params:%v", params) + glog.V(4).Infof("params:%v", params) capacity := req.GetCapacityRange().GetRequiredBytes() - capacityGB := capacity >> 30 - if capacityGB == 0 { - return nil, status.Error(codes.InvalidArgument, "required bytes less than 1GB") - } - seaweedFsVolumeCount := capacityGB / 30 - if seaweedFsVolumeCount == 0 { - seaweedFsVolumeCount = 1 - } if err := filer_pb.Mkdir(cs.Driver, "/buckets", volumeId, nil); err != nil { return nil, fmt.Errorf("Error setting bucket metadata: %v", err) @@ -59,7 +51,7 @@ func (cs *ControllerServer) CreateVolume(ctx context.Context, req *csi.CreateVol return &csi.CreateVolumeResponse{ Volume: &csi.Volume{ VolumeId: volumeId, - CapacityBytes: capacity, // 0, // seaweedFsVolumeCount * 1024 * 1024 * 30, + CapacityBytes: capacity, VolumeContext: params, }, }, nil diff --git a/pkg/driver/driver.go b/pkg/driver/driver.go index 9c77adb..9fb08ff 100644 --- a/pkg/driver/driver.go +++ b/pkg/driver/driver.go @@ -61,8 +61,6 @@ func NewSeaweedFsDriver(filer, nodeID, endpoint string) *SeaweedFsDriver { n.AddVolumeCapabilityAccessModes([]csi.VolumeCapability_AccessMode_Mode{ csi.VolumeCapability_AccessMode_SINGLE_NODE_WRITER, - }) - n.AddVolumeCapabilityAccessModes([]csi.VolumeCapability_AccessMode_Mode{ csi.VolumeCapability_AccessMode_MULTI_NODE_MULTI_WRITER, }) n.AddControllerServiceCapabilities([]csi.ControllerServiceCapability_RPC_Type{ diff --git a/pkg/driver/mounter.go b/pkg/driver/mounter.go index 5085b49..82da5f6 100644 --- a/pkg/driver/mounter.go +++ b/pkg/driver/mounter.go @@ -20,8 +20,8 @@ type Mounter interface { Mount(target string) error } -func newMounter(bucketName string, driver *SeaweedFsDriver, volContext map[string]string) (Mounter, error) { - return newSeaweedFsMounter(bucketName, driver, volContext) +func newMounter(path string, collection string, readOnly bool, driver *SeaweedFsDriver, volContext map[string]string) (Mounter, error) { + return newSeaweedFsMounter(path, collection, readOnly, driver, volContext) } func fuseMount(path string, command string, args []string) error { diff --git a/pkg/driver/mounter_seaweedfs.go b/pkg/driver/mounter_seaweedfs.go index 5b9ccb1..a35d702 100644 --- a/pkg/driver/mounter_seaweedfs.go +++ b/pkg/driver/mounter_seaweedfs.go @@ -2,13 +2,14 @@ package driver import ( "fmt" - "github.com/chrislusf/seaweedfs/weed/glog" ) // Implements Mounter type seaweedFsMounter struct { - bucketName string + path string + collection string + readOnly bool driver *SeaweedFsDriver volContext map[string]string } @@ -17,25 +18,27 @@ const ( seaweedFsCmd = "weed" ) -func newSeaweedFsMounter(bucketName string, driver *SeaweedFsDriver, volContext map[string]string) (Mounter, error) { +func newSeaweedFsMounter(path string, collection string, readOnly bool, driver *SeaweedFsDriver, volContext map[string]string) (Mounter, error) { return &seaweedFsMounter{ - bucketName: bucketName, + path: path, + collection: collection, + readOnly: readOnly, driver: driver, volContext: volContext, }, nil } func (seaweedFs *seaweedFsMounter) Mount(target string) error { - glog.V(0).Infof("mounting %s %s to %s", seaweedFs.driver.filer, seaweedFs.bucketName, target) + glog.V(0).Infof("mounting %s %s to %s", seaweedFs.driver.filer, seaweedFs.path, target) args := []string{ "mount", "-dirAutoCreate=true", "-umask=000", fmt.Sprintf("-dir=%s", target), - fmt.Sprintf("-collection=%s", seaweedFs.bucketName), + fmt.Sprintf("-collection=%s", seaweedFs.collection), fmt.Sprintf("-filer=%s", seaweedFs.driver.filer), - fmt.Sprintf("-filer.path=/buckets/%s", seaweedFs.bucketName), + fmt.Sprintf("-filer.path=%s", seaweedFs.path), fmt.Sprintf("-cacheCapacityMB=%d", seaweedFs.driver.CacheSizeMB), } @@ -48,9 +51,15 @@ func (seaweedFs *seaweedFsMounter) Mount(target string) error { args = append(args, fmt.Sprintf("-map.uid=%s", value)) case "map.gid": args = append(args, fmt.Sprintf("-map.gid=%s", value)) + case "replication": + args = append(args, fmt.Sprintf("-replication=%s", value)) } } + if seaweedFs.readOnly { + args = append(args, "-readOnly") + } + if seaweedFs.driver.ConcurrentWriters > 0 { args = append(args, fmt.Sprintf("-concurrentWriters=%d", seaweedFs.driver.ConcurrentWriters)) } @@ -63,9 +72,10 @@ func (seaweedFs *seaweedFsMounter) Mount(target string) error { if seaweedFs.driver.GidMap != "" { args = append(args, fmt.Sprintf("-map.gid=%s", seaweedFs.driver.GidMap)) } + err := fuseMount(target, seaweedFsCmd, args) if err != nil { - glog.Errorf("mount %s %s to %s: %s", seaweedFs.driver.filer, seaweedFs.bucketName, target, err) + glog.Errorf("mount %s %s to %s: %s", seaweedFs.driver.filer, seaweedFs.path, target, err) } return err } diff --git a/pkg/driver/nodeserver.go b/pkg/driver/nodeserver.go index 71f40ba..8d2277a 100644 --- a/pkg/driver/nodeserver.go +++ b/pkg/driver/nodeserver.go @@ -2,6 +2,7 @@ package driver import ( "context" + "fmt" "os" "strings" @@ -50,14 +51,19 @@ func (ns *NodeServer) NodePublishVolume(ctx context.Context, req *csi.NodePublis return &csi.NodePublishVolumeResponse{}, nil } - mo := req.GetVolumeCapability().GetMount().GetMountFlags() - if req.GetReadonly() { - mo = append(mo, "ro") + volContext := req.GetVolumeContext() + + path, ok := volContext["path"] + if !ok { + path = fmt.Sprintf("/buckets/%s", volumeID) } - volContext := req.GetVolumeContext() + collection, ok := volContext["collection"] + if !ok { + collection = volumeID + } - mounter, err := newMounter(volumeID, ns.Driver, volContext) + mounter, err := newMounter(path, collection, req.GetReadonly(), ns.Driver, volContext) if err != nil { return nil, err } |
