diff --git a/src/lcm/LifeCycleActions.cc b/src/lcm/LifeCycleActions.cc index 3a70c00249..b47165abd6 100644 --- a/src/lcm/LifeCycleActions.cc +++ b/src/lcm/LifeCycleActions.cc @@ -1376,6 +1376,16 @@ void LifeCycleManager::retry(VirtualMachine * vm) tm->trigger(TransferManager::PROLOG_MIGR, vid); break; + case VirtualMachine::PROLOG_MIGRATE_POWEROFF_FAILURE: + vm->set_state(VirtualMachine::PROLOG_MIGRATE_POWEROFF); + + vmpool->update(vm); + + vm->log("LCM", Log::INFO, "New VM state is PROLOG_MIGRATE_POWEROFF"); + + tm->trigger(TransferManager::PROLOG_MIGR, vid); + break; + case VirtualMachine::PROLOG_FAILURE: vm->set_state(VirtualMachine::PROLOG); @@ -1440,6 +1450,7 @@ void LifeCycleManager::retry(VirtualMachine * vm) case VirtualMachine::HOTPLUG_EPILOG_POWEROFF: case VirtualMachine::PROLOG: case VirtualMachine::PROLOG_MIGRATE: + case VirtualMachine::PROLOG_MIGRATE_POWEROFF: case VirtualMachine::PROLOG_RESUME: case VirtualMachine::PROLOG_UNDEPLOY: case VirtualMachine::MIGRATE: diff --git a/src/lcm/LifeCycleStates.cc b/src/lcm/LifeCycleStates.cc index 0ec5a68f27..56d0d00284 100644 --- a/src/lcm/LifeCycleStates.cc +++ b/src/lcm/LifeCycleStates.cc @@ -900,6 +900,7 @@ void LifeCycleManager::prolog_failure_action(int vid) } //wrong state + recover failure from failure state else if ( state != VirtualMachine::PROLOG_MIGRATE_FAILURE && + state != VirtualMachine::PROLOG_MIGRATE_POWEROFF_FAILURE && state != VirtualMachine::PROLOG_FAILURE ) { vm->log("LCM",Log::ERROR,"prolog_failure_action, VM in a wrong state"); diff --git a/src/rm/RequestManagerVirtualMachine.cc b/src/rm/RequestManagerVirtualMachine.cc index 48830d8856..c919ac1879 100644 --- a/src/rm/RequestManagerVirtualMachine.cc +++ b/src/rm/RequestManagerVirtualMachine.cc @@ -942,10 +942,11 @@ void VirtualMachineMigrate::request_execute(xmlrpc_c::paramList const& paramList return; } - if((vm->get_state() != VirtualMachine::ACTIVE) || - (vm->get_lcm_state() != VirtualMachine::RUNNING && - vm->get_lcm_state() != VirtualMachine::UNKNOWN) || - (vm->hasPreviousHistory() && vm->get_previous_reason() == History::NONE)) + if((vm->hasPreviousHistory() && vm->get_previous_reason()== History::NONE)|| + (vm->get_state() != VirtualMachine::POWEROFF && + (vm->get_state() != VirtualMachine::ACTIVE || + (vm->get_lcm_state() != VirtualMachine::RUNNING && + vm->get_lcm_state() != VirtualMachine::UNKNOWN)))) { failure_response(ACTION, request_error("Wrong state to perform action",""), @@ -966,7 +967,6 @@ void VirtualMachineMigrate::request_execute(xmlrpc_c::paramList const& paramList } // Check we are not migrating to the same host - c_hid = vm->get_hid(); if (c_hid == hid) @@ -1009,7 +1009,6 @@ void VirtualMachineMigrate::request_execute(xmlrpc_c::paramList const& paramList } // Check we are in the same cluster - Host * host = nd.get_hpool()->get(c_hid, true); if (host == 0)