Skip to content

Commit

Permalink
core: only use shared lock on disks for dependant VMs
Browse files Browse the repository at this point in the history
Bug-Url: https://bugzilla.redhat.com/1879391
Signed-off-by: Benny Zlotnik <bzlotnik@redhat.com>
  • Loading branch information
bennyz committed Jun 19, 2022
1 parent 513d016 commit 7b42770
Showing 1 changed file with 25 additions and 9 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -201,6 +201,7 @@ && validate(diskImagesValidator.diskImagesNotIllegal())
}
return isValid && validate(isVmBackupReady()) && validate(isFormatApplicableForBackup());
}

return isValid
&& validateActiveDiskPluggedToAnyNonDownVm(diskImage, diskValidator)
&& validate(diskImagesValidator.diskImagesNotLocked());
Expand Down Expand Up @@ -299,14 +300,10 @@ protected void tearDownImage(Guid vdsId, Guid backupId) {
boolean tearDownFailed = false;

if (getTransferBackend() == ImageTransferBackend.FILE) {
if (!Guid.Empty.equals(image.getImageTemplateId())) {
LockInfo lockInfo =
lockManager.getLockInfo(getImage().getImageTemplateId() + LockingGroup.TEMPLATE.toString());
if (isTemplateBeingUsed(image)) {
log.info("Transfer '{}': The template image is being used, skipping teardown", getCommandId());

if (lockInfo != null) {
log.info("The template image is used for image transfer '{}', skipping teardown", getCommandId());
return;
}
return;
}

VDSReturnValue teardownImageVdsRetVal = runVdsCommand(VDSCommandType.TeardownImage,
Expand All @@ -326,6 +323,18 @@ protected void tearDownImage(Guid vdsId, Guid backupId) {
}
}

private boolean isTemplateBeingUsed(DiskImage image) {
if (!Guid.Empty.equals(image.getImageTemplateId())) {
LockInfo lockInfo =
lockManager.getLockInfo(getDiskImage().getImageTemplateId() + LockingGroup.TEMPLATE.toString());
if (lockInfo != null) {
return true;
}
}

return false;
}

private boolean stopNbdServer(Guid vdsId) {
NbdServerVDSParameters nbdServerVDSParameters = new NbdServerVDSParameters(vdsId);
nbdServerVDSParameters.setServerId(getCommandId());
Expand Down Expand Up @@ -436,11 +445,18 @@ protected Map<String, Pair<String, String>> getSharedLocks() {
// StartVmBackup should handle locks
return locks;
}
if (!Guid.isNullOrEmpty(getParameters().getImageId()) && getDiskImage() != null) {

if (!Guid.isNullOrEmpty(getParameters().getImageId()) ||
getDiskImage() != null &&
!Guid.isNullOrEmpty(getDiskImage().getImageTemplateId())) {
List<VM> vms = vmDao.getVmsListForDisk(getDiskImage().getId(), true);
vms.forEach(vm -> locks.put(vm.getId().toString(),
LockMessagesMatchUtil.makeLockingPair(LockingGroup.VM, getDiskIsBeingTransferredLockMessage())));
}
if (!Guid.isNullOrEmpty(getDiskImage().getImageTemplateId())) {
locks.put(getDiskImage().getId().toString(),
LockMessagesMatchUtil.makeLockingPair(LockingGroup.DISK, EngineMessage.ACTION_TYPE_FAILED_DISK_IS_LOCKED));
}

return locks;
}
Expand All @@ -458,7 +474,7 @@ protected Map<String, Pair<String, String>> getExclusiveLocks() {
// StartVmBackup should handle locks
return locks;
}
if (getDiskImage() != null) {
if (getDiskImage() != null && Guid.isNullOrEmpty(getDiskImage().getImageTemplateId())) {
locks.put(getDiskImage().getId().toString(),
LockMessagesMatchUtil.makeLockingPair(LockingGroup.DISK, getDiskIsBeingTransferredLockMessage()));
}
Expand Down

0 comments on commit 7b42770

Please sign in to comment.