diff --git a/internal/sidecar/service/volumereplication.go b/internal/sidecar/service/volumereplication.go index 806e566d4..bb837195d 100644 --- a/internal/sidecar/service/volumereplication.go +++ b/internal/sidecar/service/volumereplication.go @@ -63,14 +63,24 @@ func (rs *ReplicationServer) EnableVolumeReplication( klog.Errorf("Failed to get secret %s in namespace %s: %v", req.GetSecretName(), req.GetSecretNamespace(), err) return nil, status.Error(codes.Internal, err.Error()) } + repReq := &csiReplication.EnableVolumeReplicationRequest{ + ReplicationId: req.ReplicationId, + Parameters: req.Parameters, + Secrets: data, + } + if req.VolumeId != "" { + // setting repReq.VolumeId for backward compatibility for volume replication of a given volume + repReq.VolumeId = req.VolumeId // nolint:staticcheck + repReq.ReplicationSource = &csiReplication.ReplicationSource{ + Type: &csiReplication.ReplicationSource_Volume{ + Volume: &csiReplication.ReplicationSource_VolumeSource{ + VolumeId: req.VolumeId, + }, + }, + } + } + _, err = rs.controllerClient.EnableVolumeReplication(ctx, repReq) - _, err = rs.controllerClient.EnableVolumeReplication(ctx, - &csiReplication.EnableVolumeReplicationRequest{ - VolumeId: req.VolumeId, - ReplicationId: req.ReplicationId, - Parameters: req.Parameters, - Secrets: data, - }) if err != nil { klog.Errorf("Failed to enable volume replication: %v", err) return nil, err @@ -91,13 +101,24 @@ func (rs *ReplicationServer) DisableVolumeReplication( return nil, status.Error(codes.Internal, err.Error()) } - _, err = rs.controllerClient.DisableVolumeReplication(ctx, - &csiReplication.DisableVolumeReplicationRequest{ - VolumeId: req.VolumeId, - ReplicationId: req.ReplicationId, - Parameters: req.Parameters, - Secrets: data, - }) + repReq := &csiReplication.DisableVolumeReplicationRequest{ + ReplicationId: req.ReplicationId, + Parameters: req.Parameters, + Secrets: data, + } + if req.VolumeId != "" { + // setting repReq.VolumeId for backward compatibility for volume replication of a given volume + repReq.VolumeId = req.VolumeId // nolint:staticcheck + repReq.ReplicationSource = &csiReplication.ReplicationSource{ + Type: &csiReplication.ReplicationSource_Volume{ + Volume: &csiReplication.ReplicationSource_VolumeSource{ + VolumeId: req.VolumeId, + }, + }, + } + } + + _, err = rs.controllerClient.DisableVolumeReplication(ctx, repReq) if err != nil { klog.Errorf("Failed to disable volume replication: %v", err) return nil, err @@ -118,14 +139,25 @@ func (rs *ReplicationServer) PromoteVolume( return nil, status.Error(codes.Internal, err.Error()) } - _, err = rs.controllerClient.PromoteVolume(ctx, - &csiReplication.PromoteVolumeRequest{ - VolumeId: req.VolumeId, - ReplicationId: req.ReplicationId, - Force: req.Force, - Parameters: req.Parameters, - Secrets: data, - }) + repReq := &csiReplication.PromoteVolumeRequest{ + ReplicationId: req.ReplicationId, + Parameters: req.Parameters, + Force: req.Force, + Secrets: data, + } + if req.VolumeId != "" { + // setting repReq.VolumeId for backward compatibility for volume replication of a given volume + repReq.VolumeId = req.VolumeId // nolint:staticcheck + repReq.ReplicationSource = &csiReplication.ReplicationSource{ + Type: &csiReplication.ReplicationSource_Volume{ + Volume: &csiReplication.ReplicationSource_VolumeSource{ + VolumeId: req.VolumeId, + }, + }, + } + } + + _, err = rs.controllerClient.PromoteVolume(ctx, repReq) if err != nil { klog.Errorf("Failed to promote volume: %v", err) return nil, err @@ -146,14 +178,24 @@ func (rs *ReplicationServer) DemoteVolume( return nil, status.Error(codes.Internal, err.Error()) } - _, err = rs.controllerClient.DemoteVolume(ctx, - &csiReplication.DemoteVolumeRequest{ - VolumeId: req.VolumeId, - ReplicationId: req.ReplicationId, - Force: req.Force, - Parameters: req.Parameters, - Secrets: data, - }) + repReq := &csiReplication.DemoteVolumeRequest{ + ReplicationId: req.ReplicationId, + Parameters: req.Parameters, + Force: req.Force, + Secrets: data, + } + if req.VolumeId != "" { + // setting repReq.VolumeId for backward compatibility for volume replication of a given volume + repReq.VolumeId = req.VolumeId // nolint:staticcheck + repReq.ReplicationSource = &csiReplication.ReplicationSource{ + Type: &csiReplication.ReplicationSource_Volume{ + Volume: &csiReplication.ReplicationSource_VolumeSource{ + VolumeId: req.VolumeId, + }, + }, + } + } + _, err = rs.controllerClient.DemoteVolume(ctx, repReq) if err != nil { klog.Errorf("Failed to demote volume: %v", err) return nil, err @@ -174,14 +216,25 @@ func (rs *ReplicationServer) ResyncVolume( return nil, status.Error(codes.Internal, err.Error()) } - resp, err := rs.controllerClient.ResyncVolume(ctx, - &csiReplication.ResyncVolumeRequest{ - VolumeId: req.VolumeId, - ReplicationId: req.ReplicationId, - Force: req.Force, - Parameters: req.Parameters, - Secrets: data, - }) + repReq := &csiReplication.ResyncVolumeRequest{ + ReplicationId: req.ReplicationId, + Parameters: req.Parameters, + Force: req.Force, + Secrets: data, + } + if req.VolumeId != "" { + // setting repReq.VolumeId for backward compatibility for volume replication of a given volume + repReq.VolumeId = req.VolumeId // nolint:staticcheck + repReq.ReplicationSource = &csiReplication.ReplicationSource{ + Type: &csiReplication.ReplicationSource_Volume{ + Volume: &csiReplication.ReplicationSource_VolumeSource{ + VolumeId: req.VolumeId, + }, + }, + } + } + + resp, err := rs.controllerClient.ResyncVolume(ctx, repReq) if err != nil { klog.Errorf("Failed to resync volume: %v", err) return nil, err @@ -204,12 +257,23 @@ func (rs *ReplicationServer) GetVolumeReplicationInfo( return nil, status.Error(codes.Internal, err.Error()) } - resp, err := rs.controllerClient.GetVolumeReplicationInfo(ctx, - &csiReplication.GetVolumeReplicationInfoRequest{ - VolumeId: req.VolumeId, - Secrets: data, - ReplicationId: req.ReplicationId, - }) + repReq := &csiReplication.GetVolumeReplicationInfoRequest{ + ReplicationId: req.ReplicationId, + Secrets: data, + } + if req.VolumeId != "" { + // setting repReq.VolumeId for backward compatibility for volume replication of a given volume + repReq.VolumeId = req.VolumeId // nolint:staticcheck + repReq.ReplicationSource = &csiReplication.ReplicationSource{ + Type: &csiReplication.ReplicationSource_Volume{ + Volume: &csiReplication.ReplicationSource_VolumeSource{ + VolumeId: req.VolumeId, + }, + }, + } + } + + resp, err := rs.controllerClient.GetVolumeReplicationInfo(ctx, repReq) if err != nil { klog.Errorf("Failed to get volume replication info: %v", err) return nil, err