Change in ovirt-engine[ovirt-engine-3.6]: core: prevent removal of all images of prestarted stateless vm

Tal Nisan has submitted this change and it was merged. Change subject: core: prevent removal of all images of prestarted stateless vm ...................................................................... core: prevent removal of all images of prestarted stateless vm When prestarted VM shuts down two threads might try to remove its stateless snapshot: 1. Pool's monitoring that automatically starts prestarted VMs 2. VMs monitoring If the pool's monitoring is triggered before VMs monitoring we might get into a race that leads to removal of all images of a prestarted stateless VM: Thread 1 - PoolMonitoring calls RunVm that calls ProceedDownVm which calls RestoreStatelessVm that in turn calls RestoreAllSnapshots Thread 2 - VmsMonitoring calls ProceedDownVm that in turn calls RestoreStatelessVm that also calls RestoreAllSnapshots In thread 1 an exclusive lock is taken for the VM by RunVm and this lock is passed all the way through to RestoreStatelessVm. This in turn calls UpdateVmVersion that most of the time fails to run with its lock and therefore the lock is released. But the instance of the lock is still passed to RestoreAllSnapshots which basically means that this command is executed with no lock on the VM. Then, the second call to RestoreAllSnapshots by thread 2 might also try to remove the latest images of the disks, after the ones from the stateless snapshots had been removed -> so the images attached to the active snapshot is removed as well. The solution is not to pass the lock to UpdateVmVersion. This change is safe since the lock was anyway released at the end of the execute phase of UpdateVmVersion. Change-Id: I870ef6757418205599e97688a276c75097642456 Bug-Url: https://bugzilla.redhat.com/1348950 Signed-off-by: Arik Hadas <ahadas@redhat.com> --- M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RestoreStatelessVmCommand.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/UpdateVmVersionCommand.java M backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/UpdateVmVersionParameters.java 3 files changed, 19 insertions(+), 4 deletions(-) Approvals: Shahar Havivi: Looks good to me, approved Jenkins CI: Passed CI tests Arik Hadas: Verified -- To view, visit https://gerrit.ovirt.org/59697 To unsubscribe, visit https://gerrit.ovirt.org/settings Gerrit-MessageType: merged Gerrit-Change-Id: I870ef6757418205599e97688a276c75097642456 Gerrit-PatchSet: 3 Gerrit-Project: ovirt-engine Gerrit-Branch: ovirt-engine-3.6 Gerrit-Owner: Arik Hadas <ahadas@redhat.com> Gerrit-Reviewer: Arik Hadas <ahadas@redhat.com> Gerrit-Reviewer: Jenkins CI Gerrit-Reviewer: Shahar Havivi <shavivi@redhat.com> Gerrit-Reviewer: Tal Nisan <tnisan@redhat.com> Gerrit-Reviewer: gerrit-hooks <automation@ovirt.org>
participants (1)
-
tnisan@redhat.com