Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Sync 'odf/devel' into ds/sync/release-4.16 #282

Merged
merged 1 commit into from
Mar 27, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion charts/ceph-csi-rbd/templates/storageclass.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,10 @@ metadata:
provisioner: {{ .Values.driverName }}
parameters:
clusterID: {{ .Values.storageClass.clusterID }}
pool: {{ .Values.storageClass.pool }}
imageFeatures: {{ .Values.storageClass.imageFeatures }}
{{- if .Values.storageClass.pool }}
pool: {{ .Values.storageClass.pool }}
{{- end }}
{{- if .Values.storageClass.tryOtherMounters }}
tryOtherMounters: {{ .Values.storageClass.tryOtherMounters | quote}}
{{- end }}
Expand Down
1 change: 1 addition & 0 deletions charts/ceph-csi-rbd/values.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -343,6 +343,7 @@ storageClass:
dataPool: ""

# (required) Ceph pool into which the RBD image shall be created
# (optional) if topologyConstrainedPools is provided
# eg: pool: replicapool
pool: replicapool

Expand Down
8 changes: 5 additions & 3 deletions e2e/rbd.go
Original file line number Diff line number Diff line change
Expand Up @@ -3043,19 +3043,21 @@ var _ = Describe("RBD", func() {
}

By("ensuring created PV has its CSI journal in the CSI journal specific pool")
err = checkPVCCSIJournalInPool(f, pvc, "replicapool")
err = checkPVCCSIJournalInPool(f, pvc, rbdTopologyPool)
if err != nil {
framework.Failf("failed to check csi journal in pool: %v", err)
}

err = deleteJournalInfoInPool(f, pvc, "replicapool")
err = deleteJournalInfoInPool(f, pvc, rbdTopologyPool)
if err != nil {
framework.Failf("failed to delete omap data: %v", err)
}

err = deletePVCAndApp("", f, pvc, app)
if err != nil {
framework.Failf("failed to delete PVC and application: %v", err)
}

validateRBDImageCount(f, 0, defaultRBDPool)
validateOmapCount(f, 0, rbdType, defaultRBDPool, volumesType)

Expand Down Expand Up @@ -3092,7 +3094,7 @@ var _ = Describe("RBD", func() {
framework.Failf("failed to check data pool for image: %v", err)
}

err = deleteJournalInfoInPool(f, pvc, "replicapool")
err = deleteJournalInfoInPool(f, pvc, rbdTopologyPool)
if err != nil {
framework.Failf("failed to delete omap data: %v", err)
}
Expand Down
5 changes: 4 additions & 1 deletion e2e/rbd_helper.go
Original file line number Diff line number Diff line change
Expand Up @@ -126,7 +126,10 @@ func createRBDStorageClass(
if name != "" {
sc.Name = name
}
sc.Parameters["pool"] = defaultRBDPool
// add pool only if topologyConstrainedPools is not present
if _, ok := parameters["topologyConstrainedPools"]; !ok {
sc.Parameters["pool"] = defaultRBDPool
}
sc.Parameters["csi.storage.k8s.io/provisioner-secret-namespace"] = cephCSINamespace
sc.Parameters["csi.storage.k8s.io/provisioner-secret-name"] = rbdProvisionerSecretName

Expand Down
1 change: 1 addition & 0 deletions examples/rbd/storageclass.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ parameters:
# dataPool: <ec-data-pool>

# (required) Ceph pool into which the RBD image shall be created
# (optional) If the topologyConstrainedPools is provided
# eg: pool: rbdpool
pool: <rbd-pool-name>

Expand Down
21 changes: 17 additions & 4 deletions internal/rbd/controllerserver.go
Original file line number Diff line number Diff line change
Expand Up @@ -76,12 +76,19 @@ func (cs *ControllerServer) validateVolumeReq(ctx context.Context, req *csi.Crea
}
options := req.GetParameters()
if value, ok := options["clusterID"]; !ok || value == "" {
return status.Error(codes.InvalidArgument, "missing or empty cluster ID to provision volume from")
return status.Error(codes.InvalidArgument, "empty cluster ID to provision volume from")
}
if value, ok := options["pool"]; !ok || value == "" {
poolValue, poolOK := options["pool"]
topologyConstrainedPoolsValue, topologyOK := options["topologyConstrainedPools"]
if !poolOK {
if topologyOK && topologyConstrainedPoolsValue == "" {
return status.Error(codes.InvalidArgument, "empty pool name or topologyConstrainedPools to provision volume")
} else if !topologyOK {
return status.Error(codes.InvalidArgument, "missing or empty pool name to provision volume from")
}
} else if poolValue == "" {
return status.Error(codes.InvalidArgument, "missing or empty pool name to provision volume from")
}

if value, ok := options["dataPool"]; ok && value == "" {
return status.Error(codes.InvalidArgument, "empty datapool name to provision volume from")
}
Expand Down Expand Up @@ -244,6 +251,7 @@ func buildCreateVolumeResponse(req *csi.CreateVolumeRequest, rbdVol *rbdVolume)
VolumeContext: volumeContext,
ContentSource: req.GetVolumeContentSource(),
}

if rbdVol.Topology != nil {
volume.AccessibleTopology = []*csi.Topology{
{
Expand Down Expand Up @@ -341,6 +349,11 @@ func (cs *ControllerServer) CreateVolume(
return nil, err
}

err = updateTopologyConstraints(rbdVol, rbdSnap)
if err != nil {
return nil, status.Error(codes.Internal, err.Error())
}

found, err := rbdVol.Exists(ctx, parentVol)
if err != nil {
return nil, getGRPCErrorForCreateVolume(err)
Expand All @@ -358,7 +371,7 @@ func (cs *ControllerServer) CreateVolume(
return nil, err
}

err = reserveVol(ctx, rbdVol, rbdSnap, cr)
err = reserveVol(ctx, rbdVol, cr)
if err != nil {
return nil, status.Error(codes.Internal, err.Error())
}
Expand Down
13 changes: 7 additions & 6 deletions internal/rbd/rbd_journal.go
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,10 @@ func validateRbdVol(rbdVol *rbdVolume) error {
return err
}

if err = validateNonEmptyField(rbdVol.JournalPool, "JournalPool", "rbdVolume"); err != nil {
return err
}

if err = validateNonEmptyField(rbdVol.ClusterID, "ClusterID", "rbdVolume"); err != nil {
return err
}
Expand Down Expand Up @@ -433,6 +437,7 @@ func updateTopologyConstraints(rbdVol *rbdVolume, rbdSnap *rbdSnapshot) error {
if rbdVol.Topology != nil {
rbdVol.Pool = poolName
rbdVol.DataPool = dataPoolName
rbdVol.JournalPool = poolName
}

return nil
Expand All @@ -446,21 +451,17 @@ func updateTopologyConstraints(rbdVol *rbdVolume, rbdSnap *rbdSnapshot) error {
rbdVol.Pool = poolName
rbdVol.DataPool = dataPoolName
rbdVol.Topology = topology
rbdVol.JournalPool = poolName
}

return nil
}

// reserveVol is a helper routine to request a rbdVolume name reservation and generate the
// volume ID for the generated name.
func reserveVol(ctx context.Context, rbdVol *rbdVolume, rbdSnap *rbdSnapshot, cr *util.Credentials) error {
func reserveVol(ctx context.Context, rbdVol *rbdVolume, cr *util.Credentials) error {
var err error

err = updateTopologyConstraints(rbdVol, rbdSnap)
if err != nil {
return err
}

journalPoolID, imagePoolID, err := util.GetPoolIDs(ctx, rbdVol.Monitors, rbdVol.JournalPool, rbdVol.Pool, cr)
if err != nil {
return err
Expand Down
5 changes: 4 additions & 1 deletion internal/rbd/rbd_util.go
Original file line number Diff line number Diff line change
Expand Up @@ -1270,9 +1270,12 @@ func genVolFromVolumeOptions(
)

rbdVol := &rbdVolume{}

rbdVol.Pool, ok = volOptions["pool"]
if !ok {
return nil, errors.New("missing required parameter pool")
if _, ok = volOptions["topologyConstrainedPools"]; !ok {
return nil, errors.New("empty pool name or topologyConstrainedPools to provision volume")
}
}

rbdVol.DataPool = volOptions["dataPool"]
Expand Down