diff --git a/internal/rbd/errors.go b/internal/rbd/errors.go index 32937c058..2443b8797 100644 --- a/internal/rbd/errors.go +++ b/internal/rbd/errors.go @@ -42,6 +42,4 @@ var ( ErrMissingImageNameInVolID = errors.New("rbd image name information can not be empty in volID") // ErrDecodeClusterIDFromMonsInVolID is returned when mons hash decoding on migration volID. ErrDecodeClusterIDFromMonsInVolID = errors.New("failed to get clusterID from monitors hash in volID") - // ErrUnHealthyMirroredImage is returned when mirrored image is not healthy. - ErrUnHealthyMirroredImage = errors.New("mirrored image is not healthy") ) diff --git a/internal/rbd/replicationcontrollerserver.go b/internal/rbd/replicationcontrollerserver.go index 117885345..e93887686 100644 --- a/internal/rbd/replicationcontrollerserver.go +++ b/internal/rbd/replicationcontrollerserver.go @@ -581,16 +581,6 @@ func (rs *ReplicationServer) PromoteVolume(ctx context.Context, } } - mirrorStatus, err := rbdVol.getImageMirroringStatus() - if err != nil { - return nil, status.Error(codes.Internal, err.Error()) - } - - err = checkHealthyPrimary(ctx, rbdVol, mirrorStatus) - if err != nil { - return nil, status.Error(codes.Internal, err.Error()) - } - var mode librbd.ImageMirrorMode mode, err = getMirroringMode(ctx, req.GetParameters()) if err != nil { @@ -620,31 +610,6 @@ func (rs *ReplicationServer) PromoteVolume(ctx context.Context, return &replication.PromoteVolumeResponse{}, nil } -// checkHealthyPrimary checks if the image is a healhty primary or not. -// healthy primary image will be in up+stopped state, for states other -// than this it returns an error message. -func checkHealthyPrimary(ctx context.Context, rbdVol *rbdVolume, mirrorStatus *librbd.GlobalMirrorImageStatus) error { - localStatus, err := mirrorStatus.LocalStatus() - if err != nil { - // LocalStatus can fail if the local site status is not found in - // mirroring status. Log complete sites status to debug why getting - // local status failed - log.ErrorLog(ctx, "mirroring status is %+v", mirrorStatus) - - return fmt.Errorf("failed to get local status: %w", err) - } - - if !localStatus.Up || localStatus.State != librbd.MirrorImageStatusStateStopped { - return fmt.Errorf("%s %w. State is up=%t, state=%q", - rbdVol, - ErrUnHealthyMirroredImage, - localStatus.Up, - localStatus.State) - } - - return nil -} - // DemoteVolume extracts the RBD volume information from the // volumeID, If the image is present, mirroring is enabled and the // image is in promoted state it will demote the volume as secondary. diff --git a/internal/rbd/replicationcontrollerserver_test.go b/internal/rbd/replicationcontrollerserver_test.go index 87f60a38f..401292587 100644 --- a/internal/rbd/replicationcontrollerserver_test.go +++ b/internal/rbd/replicationcontrollerserver_test.go @@ -279,75 +279,3 @@ func TestCheckVolumeResyncStatus(t *testing.T) { }) } } - -func Test_checkHealthyPrimary(t *testing.T) { - t.Parallel() - rbdVol := &rbdVolume{ - rbdImage: rbdImage{ - RbdImageName: "test", - Pool: "test-pool", - }, - } - tests := []struct { - name string - ctx context.Context - rbdVol *rbdVolume - mirrorStatus *librbd.GlobalMirrorImageStatus - wantErr bool - }{ - { - name: "when image is in up+stopped state", - ctx: context.TODO(), - rbdVol: rbdVol, - mirrorStatus: &librbd.GlobalMirrorImageStatus{ - SiteStatuses: []librbd.SiteMirrorImageStatus{ - { - MirrorUUID: "", - State: librbd.MirrorImageStatusStateStopped, - Up: true, - }, - }, - }, - wantErr: false, - }, - { - name: "when image is in up+error state", - ctx: context.TODO(), - rbdVol: rbdVol, - mirrorStatus: &librbd.GlobalMirrorImageStatus{ - SiteStatuses: []librbd.SiteMirrorImageStatus{ - { - MirrorUUID: "", - State: librbd.MirrorImageStatusStateError, - Up: false, - }, - }, - }, - wantErr: true, - }, - { - name: "when image is in up+replaying state", - ctx: context.TODO(), - rbdVol: rbdVol, - mirrorStatus: &librbd.GlobalMirrorImageStatus{ - SiteStatuses: []librbd.SiteMirrorImageStatus{ - { - MirrorUUID: "", - State: librbd.MirrorImageStatusStateReplaying, - Up: true, - }, - }, - }, - wantErr: true, - }, - } - for _, tt := range tests { - ts := tt - t.Run(ts.name, func(t *testing.T) { - t.Parallel() - if err := checkHealthyPrimary(ts.ctx, ts.rbdVol, ts.mirrorStatus); (err != nil) != ts.wantErr { - t.Errorf("checkHealthyPrimary() error = %v, wantErr %v", err, ts.wantErr) - } - }) - } -}