From c6a8c1fbdcc1d11df23f8ead30a1fd0df3d2630e Mon Sep 17 00:00:00 2001 From: "Ruben S. Montero" Date: Fri, 16 Sep 2011 11:52:55 +0200 Subject: [PATCH] bug #265: Failure actions will *NOT* remove VM files in the host. Host files will be removed from the remote host upon VM resubmition or deletion. This will let sysadmins to easily debug any failure or perform forensic analysis. --- src/dm/DispatchManagerActions.cc | 6 ++++-- src/lcm/LifeCycleActions.cc | 12 +++++++----- src/lcm/LifeCycleStates.cc | 5 +---- 3 files changed, 12 insertions(+), 11 deletions(-) diff --git a/src/dm/DispatchManagerActions.cc b/src/dm/DispatchManagerActions.cc index 93d95a4ab1..37189b4a81 100644 --- a/src/dm/DispatchManagerActions.cc +++ b/src/dm/DispatchManagerActions.cc @@ -565,6 +565,7 @@ int DispatchManager::finalize( switch (state) { case VirtualMachine::SUSPENDED: + case VirtualMachine::FAILED: tm->trigger(TransferManager::EPILOG_DELETE,vid); case VirtualMachine::INIT: @@ -573,7 +574,6 @@ int DispatchManager::finalize( case VirtualMachine::STOPPED: vm->set_exit_time(time(0)); - case VirtualMachine::FAILED: vm->set_state(VirtualMachine::LCM_INIT); vm->set_state(VirtualMachine::DONE); vmpool->update(vm); @@ -608,6 +608,7 @@ int DispatchManager::resubmit(int vid) Nebula& nd = Nebula::instance(); LifeCycleManager * lcm = nd.get_lcm(); + TransferManager * tm = nd.get_tm(); vm = vmpool->get(vid,true); @@ -628,9 +629,10 @@ int DispatchManager::resubmit(int vid) case VirtualMachine::PENDING: break; + case VirtualMachine::FAILED: //Cleanup VM host files + tm->trigger(TransferManager::EPILOG_DELETE,vid); case VirtualMachine::HOLD: // Move the VM to PENDING in any of these case VirtualMachine::STOPPED: - case VirtualMachine::FAILED: vm->set_state(VirtualMachine::LCM_INIT); vm->set_state(VirtualMachine::PENDING); vmpool->update(vm); diff --git a/src/lcm/LifeCycleActions.cc b/src/lcm/LifeCycleActions.cc index 03683a2473..c415692bed 100644 --- a/src/lcm/LifeCycleActions.cc +++ b/src/lcm/LifeCycleActions.cc @@ -500,8 +500,7 @@ void LifeCycleManager::delete_action(int vid) VirtualMachine::LcmState state = vm->get_lcm_state(); if ((state == VirtualMachine::LCM_INIT) || - (state == VirtualMachine::CLEANUP) || - (state == VirtualMachine::FAILURE)) + (state == VirtualMachine::CLEANUP)) { vm->unlock(); return; @@ -535,8 +534,7 @@ void LifeCycleManager::clean_action(int vid) VirtualMachine::LcmState state = vm->get_lcm_state(); if ((state == VirtualMachine::LCM_INIT) || - (state == VirtualMachine::CLEANUP) || - (state == VirtualMachine::FAILURE)) + (state == VirtualMachine::CLEANUP)) { vm->unlock(); return; @@ -664,7 +662,11 @@ void LifeCycleManager::clean_up_vm(VirtualMachine * vm) tm->trigger(TransferManager::EPILOG_DELETE,vid); break; - default: //FAILURE,LCM_INIT,CLEANUP + case VirtualMachine::FAILURE: + tm->trigger(TransferManager::EPILOG_DELETE,vid); + break; + + default: //LCM_INIT,CLEANUP break; } diff --git a/src/lcm/LifeCycleStates.cc b/src/lcm/LifeCycleStates.cc index ac01274093..5d9eb8dc61 100644 --- a/src/lcm/LifeCycleStates.cc +++ b/src/lcm/LifeCycleStates.cc @@ -778,7 +778,6 @@ void LifeCycleManager::monitor_done_action(int vid) void LifeCycleManager::failure_action(VirtualMachine * vm) { Nebula& nd = Nebula::instance(); - TransferManager * tm = nd.get_tm(); DispatchManager * dm = nd.get_dm(); time_t the_time = time(0); @@ -802,11 +801,9 @@ void LifeCycleManager::failure_action(VirtualMachine * vm) hpool->del_capacity(vm->get_hid(),cpu,mem,disk); - //------------- Clean up remote files ---------------- + //--- VM to FAILED. Remote host cleanup upon VM deletion --- dm->trigger(DispatchManager::FAILED,vm->get_oid()); - - tm->trigger(TransferManager::EPILOG_DELETE,vm->get_oid()); } /* -------------------------------------------------------------------------- */