diff --git a/internal/journal/voljournal.go b/internal/journal/voljournal.go index 6cbf2f519..7807d2da4 100644 --- a/internal/journal/voljournal.go +++ b/internal/journal/voljournal.go @@ -842,3 +842,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 98a66050b..e2fadd21f 100644 --- a/internal/rbd/rbd_journal.go +++ b/internal/rbd/rbd_journal.go @@ -535,7 +535,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, @@ -621,6 +621,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)