From c822ad460dc65f1e36b8d3f9fa35918cfec5a554 Mon Sep 17 00:00:00 2001 From: Madhu Rajanna Date: Wed, 17 Mar 2021 13:20:30 +0530 Subject: [PATCH] rbd: add a check for image mirror disabling state the rbd mirror state can be in enabled,disabled or disabling state. If the mirroring is not disabled yet and still in disabling state. we need to check for it and return abort error message if the mirroring is still getting disabled. Signed-off-by: Madhu Rajanna --- internal/rbd/replicationcontrollerserver.go | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/internal/rbd/replicationcontrollerserver.go b/internal/rbd/replicationcontrollerserver.go index bbe4fc9d2..bf440c837 100644 --- a/internal/rbd/replicationcontrollerserver.go +++ b/internal/rbd/replicationcontrollerserver.go @@ -219,10 +219,22 @@ func (rs *ReplicationServer) DisableVolumeReplication(ctx context.Context, util.ErrorLog(ctx, err.Error()) return nil, status.Error(codes.Internal, err.Error()) } - // TODO: check do we need to return abort after disabling the mirroring + // the image state can be still disabling once we disable the mirroring + // check the mirroring is disabled or not + mirroringInfo, err = rbdVol.getImageMirroringInfo() + if err != nil { + util.ErrorLog(ctx, err.Error()) + return nil, status.Error(codes.Internal, err.Error()) + } + if mirroringInfo.State == librbd.MirrorImageDisabling { + return nil, status.Errorf(codes.Aborted, "%s is in disabling state", volumeID) + } return &replication.DisableVolumeReplicationResponse{}, nil + // image is already in disabled state case librbd.MirrorImageDisabled: - // image is already in disabled state + // image mirroring is still disabling + case librbd.MirrorImageDisabling: + return nil, status.Errorf(codes.Aborted, "%s is in disabling state", volumeID) default: // TODO: use string instead of int for returning valid error message return nil, status.Errorf(codes.InvalidArgument, "image is in %d Mode", mirroringInfo.State)