check subvolume present in backend

If a CreateVolume call is interrupted,
post creating the required CSI journal entries,
but prior to creating the backing CephFS subvolume,
then a subsequent CreateVolume call will return
a valid response with a VolumeID that has
it's backing image missing. This PR adds a check
for backend image, if image notfound it deletes the
reserved keys in omap.

fixes #839

Signed-off-by: Madhu Rajanna <madhupr007@gmail.com>
(cherry picked from commit 128f3fc2cf)
This commit is contained in:
Madhu Rajanna 2020-02-24 10:59:08 +05:30 committed by mergify[bot]
parent 7f4028d356
commit c4b6bb90d6

View File

@ -67,6 +67,14 @@ func checkVolExists(ctx context.Context, volOptions *volumeOptions, secret map[s
} }
vid.FsSubvolName = volJournal.NamingPrefix() + imageUUID vid.FsSubvolName = volJournal.NamingPrefix() + imageUUID
_, err = getVolumeRootPathCeph(ctx, volOptions, cr, volumeID(vid.FsSubvolName))
if err != nil {
if _, ok := err.(ErrVolumeNotFound); ok {
err = volJournal.UndoReservation(ctx, volOptions.Monitors, cr, volOptions.MetadataPool, vid.FsSubvolName, volOptions.RequestName)
return nil, err
}
return nil, err
}
// TODO: size checks // TODO: size checks
// found a volume already available, process and return it! // found a volume already available, process and return it!