diff --git a/internal/journal/voljournal.go b/internal/journal/voljournal.go index 286d84658..7125a7370 100644 --- a/internal/journal/voljournal.go +++ b/internal/journal/voljournal.go @@ -864,3 +864,9 @@ func (conn *Connection) ReserveNewUUIDMapping(ctx context.Context, return setOMapKeys(ctx, conn, journalPool, cj.namespace, cj.csiDirectory, setKeys) } + +// ResetVolumeOwner updates the owner in the rados object. +func (conn *Connection) ResetVolumeOwner(ctx context.Context, pool, reservedUUID, owner string) error { + return setOMapKeys(ctx, conn, pool, conn.config.namespace, conn.config.cephUUIDDirectoryPrefix+reservedUUID, + map[string]string{conn.config.ownerKey: owner}) +} diff --git a/internal/rbd/rbd_journal.go b/internal/rbd/rbd_journal.go index eb7650283..f1a2da95b 100644 --- a/internal/rbd/rbd_journal.go +++ b/internal/rbd/rbd_journal.go @@ -538,7 +538,7 @@ func undoVolReservation(ctx context.Context, rbdVol *rbdVolume, cr *util.Credent // Generate new volume Handler // The volume handler won't remain same as its contains poolID,clusterID etc // which are not same across clusters. -// nolint:gocyclo,cyclop // TODO: reduce complexity +// nolint:gocyclo,cyclop,nestif // TODO: reduce complexity func RegenerateJournal( volumeAttributes map[string]string, claimName, @@ -625,6 +625,12 @@ func RegenerateJournal( return "", err } } + if rbdVol.Owner != owner { + err = j.ResetVolumeOwner(ctx, rbdVol.JournalPool, rbdVol.ReservedID, owner) + if err != nil { + return "", err + } + } // Update Metadata on reattach of the same old PV parameters := k8s.PrepareVolumeMetadata(claimName, owner, "") err = rbdVol.setAllMetadata(parameters)