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 Mar 22, 2022
1 parent 3fe8f84 commit b78fb50
Showing 1 changed file with 35 additions and 11 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -196,9 +196,12 @@ && validate(diskImagesValidator.diskImagesNotIllegal())
}
return isValid && validate(isVmBackupReady()) && validate(isFormatApplicableForBackup());
}

if (!Guid.isNullOrEmpty(getDiskImage().getImageTemplateId())) {
isValid &= validate(diskImagesValidator.diskImagesNotLocked());
}
return isValid
&& validateActiveDiskPluggedToAnyNonDownVm(diskImage, diskValidator)
&& validate(diskImagesValidator.diskImagesNotLocked());
&& validateActiveDiskPluggedToAnyNonDownVm(diskImage, diskValidator);
}

private boolean validateActiveDiskPluggedToAnyNonDownVm(DiskImage diskImage, DiskValidator diskValidator) {
Expand Down Expand Up @@ -293,14 +296,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 @@ -320,6 +319,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 @@ -430,11 +441,17 @@ protected Map<String, Pair<String, String>> getSharedLocks() {
// StartVmBackup should handle locks
return locks;
}
if (!Guid.isNullOrEmpty(getParameters().getImageId())) {
if (!Guid.isNullOrEmpty(getParameters().getImageId()) ||
!Guid.isNullOrEmpty(getDiskImage().getImageTemplateId())) {
List<VM> vms = vmDao.getVmsListForDisk(getDiskImage().getId(), true);
vms.forEach(vm -> locks.put(vm.getId().toString(),
LockMessagesMatchUtil.makeLockingPair(LockingGroup.VM, EngineMessage.ACTION_TYPE_FAILED_VM_IS_LOCKED)));
}
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 @@ -445,7 +462,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, EngineMessage.ACTION_TYPE_FAILED_DISK_IS_LOCKED));
}
Expand Down Expand Up @@ -881,6 +898,13 @@ private void handleFinalizingSuccess(final StateContext context) {
}
}

@Override
protected void setImageStatus(ImageStatus imageStatus) {
if (!isTemplateBeingUsed(getDiskImage()) && imageStatus == ImageStatus.OK) {
super.setImageStatus(imageStatus);
}
}

private boolean verifyImage(Guid transferingVdsId) {
ImageActionsVDSCommandParameters parameters =
new ImageActionsVDSCommandParameters(transferingVdsId, getStoragePool().getId(),
Expand Down

0 comments on commit b78fb50

Please sign in to comment.