mirror of
https://github.com/OpenNebula/one.git
synced 2025-03-22 18:50:08 +03:00
feature #3654: Retry failures on PROLOG_MIGRATE_SUSPEND
This commit is contained in:
parent
f46afca372
commit
211d0eabf2
@ -148,7 +148,8 @@ int DispatchManager::migrate(
|
||||
if ((vm->get_state() == VirtualMachine::ACTIVE &&
|
||||
(vm->get_lcm_state() == VirtualMachine::RUNNING ||
|
||||
vm->get_lcm_state() == VirtualMachine::UNKNOWN )) ||
|
||||
vm->get_state() == VirtualMachine::POWEROFF)
|
||||
vm->get_state() == VirtualMachine::POWEROFF ||
|
||||
vm->get_state() == VirtualMachine::SUSPENDED)
|
||||
{
|
||||
Nebula& nd = Nebula::instance();
|
||||
LifeCycleManager * lcm = nd.get_lcm();
|
||||
|
@ -31,7 +31,9 @@ void DispatchManager::suspend_success_action(int vid)
|
||||
}
|
||||
|
||||
if ((vm->get_state() == VirtualMachine::ACTIVE) &&
|
||||
(vm->get_lcm_state() == VirtualMachine::SAVE_SUSPEND))
|
||||
(vm->get_lcm_state() == VirtualMachine::SAVE_SUSPEND ||
|
||||
vm->get_lcm_state() == VirtualMachine::PROLOG_MIGRATE_SUSPEND ||
|
||||
vm->get_lcm_state() == VirtualMachine::PROLOG_MIGRATE_SUSPEND_FAILURE))
|
||||
{
|
||||
vm->set_state(VirtualMachine::SUSPENDED);
|
||||
|
||||
|
@ -203,6 +203,13 @@ void LifeCycleManager::migrate_action(int vid)
|
||||
{
|
||||
VirtualMachine * vm;
|
||||
|
||||
Nebula& nd = Nebula::instance();
|
||||
TransferManager * tm = nd.get_tm();
|
||||
VirtualMachineManager * vmm = nd.get_vmm();
|
||||
|
||||
int cpu, mem, disk;
|
||||
time_t the_time = time(0);
|
||||
|
||||
vm = vmpool->get(vid,true);
|
||||
|
||||
if ( vm == 0 )
|
||||
@ -213,10 +220,6 @@ void LifeCycleManager::migrate_action(int vid)
|
||||
if (vm->get_state() == VirtualMachine::ACTIVE &&
|
||||
vm->get_lcm_state() == VirtualMachine::RUNNING)
|
||||
{
|
||||
Nebula& nd = Nebula::instance();
|
||||
VirtualMachineManager * vmm = nd.get_vmm();
|
||||
int cpu,mem,disk;
|
||||
|
||||
//----------------------------------------------------
|
||||
// SAVE_MIGRATE STATE
|
||||
//----------------------------------------------------
|
||||
@ -227,7 +230,7 @@ void LifeCycleManager::migrate_action(int vid)
|
||||
|
||||
vmpool->update(vm);
|
||||
|
||||
vm->set_stime(time(0));
|
||||
vm->set_stime(the_time);
|
||||
|
||||
vm->set_previous_action(History::MIGRATE_ACTION);
|
||||
|
||||
@ -243,14 +246,9 @@ void LifeCycleManager::migrate_action(int vid)
|
||||
|
||||
vmm->trigger(VirtualMachineManager::SAVE,vid);
|
||||
}
|
||||
else if (vm->get_state() == VirtualMachine::POWEROFF)
|
||||
else if (vm->get_state() == VirtualMachine::POWEROFF ||
|
||||
vm->get_state() == VirtualMachine::SUSPENDED )
|
||||
{
|
||||
Nebula& nd = Nebula::instance();
|
||||
TransferManager * tm = nd.get_tm();
|
||||
|
||||
int cpu, mem, disk;
|
||||
time_t the_time = time(0);
|
||||
|
||||
//------------------------------------------------------
|
||||
// Bypass SAVE_MIGRATE & go to PROLOG_MIGRATE_POWEROFF
|
||||
//------------------------------------------------------
|
||||
@ -259,9 +257,16 @@ void LifeCycleManager::migrate_action(int vid)
|
||||
|
||||
vm->set_state(VirtualMachine::ACTIVE);
|
||||
|
||||
vm->set_state(VirtualMachine::PROLOG_MIGRATE_POWEROFF);
|
||||
|
||||
vm->log("LCM", Log::INFO, "New VM state is PROLOG_MIGRATE_POWEROFF");
|
||||
if (vm->get_state() == VirtualMachine::POWEROFF)
|
||||
{
|
||||
vm->set_state(VirtualMachine::PROLOG_MIGRATE_POWEROFF);
|
||||
vm->log("LCM", Log::INFO, "New VM state is PROLOG_MIGRATE_POWEROFF");
|
||||
}
|
||||
else //if (vm->get_state() == VirtualMachine::SUSPENDED)
|
||||
{
|
||||
vm->set_state(VirtualMachine::PROLOG_MIGRATE_SUSPEND);
|
||||
vm->log("LCM", Log::INFO, "New VM state is PROLOG_MIGRATE_SUSPEND");
|
||||
}
|
||||
|
||||
vm->delete_snapshots();
|
||||
|
||||
@ -270,7 +275,7 @@ void LifeCycleManager::migrate_action(int vid)
|
||||
|
||||
vmpool->update(vm);
|
||||
|
||||
vm->set_stime(time(0));
|
||||
vm->set_stime(the_time);
|
||||
|
||||
vm->set_prolog_stime(the_time);
|
||||
|
||||
@ -293,12 +298,6 @@ void LifeCycleManager::migrate_action(int vid)
|
||||
// Bypass SAVE_MIGRATE & PROLOG_MIGRATE goto BOOT
|
||||
//----------------------------------------------------
|
||||
|
||||
Nebula& nd = Nebula::instance();
|
||||
VirtualMachineManager * vmm = nd.get_vmm();
|
||||
|
||||
int cpu, mem, disk;
|
||||
time_t the_time = time(0);
|
||||
|
||||
vm->set_resched(false);
|
||||
|
||||
vm->set_state(VirtualMachine::BOOT);
|
||||
@ -306,7 +305,6 @@ void LifeCycleManager::migrate_action(int vid)
|
||||
vm->delete_snapshots();
|
||||
|
||||
map<string, string> empty;
|
||||
|
||||
vm->update_info(0, 0, -1, -1, empty);
|
||||
|
||||
vmpool->update(vm);
|
||||
@ -1093,6 +1091,8 @@ void LifeCycleManager::clean_up_vm(VirtualMachine * vm, bool dispose, int& imag
|
||||
case VirtualMachine::PROLOG_MIGRATE_FAILURE:
|
||||
case VirtualMachine::PROLOG_MIGRATE_POWEROFF:
|
||||
case VirtualMachine::PROLOG_MIGRATE_POWEROFF_FAILURE:
|
||||
case VirtualMachine::PROLOG_MIGRATE_SUSPEND:
|
||||
case VirtualMachine::PROLOG_MIGRATE_SUSPEND_FAILURE:
|
||||
vm->set_prolog_etime(the_time);
|
||||
vmpool->update_history(vm);
|
||||
|
||||
@ -1163,6 +1163,8 @@ void LifeCycleManager::recover(VirtualMachine * vm, bool success)
|
||||
case VirtualMachine::PROLOG_FAILURE:
|
||||
case VirtualMachine::PROLOG_MIGRATE_POWEROFF:
|
||||
case VirtualMachine::PROLOG_MIGRATE_POWEROFF_FAILURE:
|
||||
case VirtualMachine::PROLOG_MIGRATE_SUSPEND:
|
||||
case VirtualMachine::PROLOG_MIGRATE_SUSPEND_FAILURE:
|
||||
if (success)
|
||||
{
|
||||
lcm_action = LifeCycleManager::PROLOG_SUCCESS;
|
||||
@ -1386,6 +1388,17 @@ void LifeCycleManager::retry(VirtualMachine * vm)
|
||||
tm->trigger(TransferManager::PROLOG_MIGR, vid);
|
||||
break;
|
||||
|
||||
|
||||
case VirtualMachine::PROLOG_MIGRATE_SUSPEND_FAILURE:
|
||||
vm->set_state(VirtualMachine::PROLOG_MIGRATE_SUSPEND);
|
||||
|
||||
vmpool->update(vm);
|
||||
|
||||
vm->log("LCM", Log::INFO, "New VM state is PROLOG_MIGRATE_SUSPEND");
|
||||
|
||||
tm->trigger(TransferManager::PROLOG_MIGR, vid);
|
||||
break;
|
||||
|
||||
case VirtualMachine::PROLOG_FAILURE:
|
||||
vm->set_state(VirtualMachine::PROLOG);
|
||||
|
||||
@ -1451,6 +1464,7 @@ void LifeCycleManager::retry(VirtualMachine * vm)
|
||||
case VirtualMachine::PROLOG:
|
||||
case VirtualMachine::PROLOG_MIGRATE:
|
||||
case VirtualMachine::PROLOG_MIGRATE_POWEROFF:
|
||||
case VirtualMachine::PROLOG_MIGRATE_SUSPEND:
|
||||
case VirtualMachine::PROLOG_RESUME:
|
||||
case VirtualMachine::PROLOG_UNDEPLOY:
|
||||
case VirtualMachine::MIGRATE:
|
||||
|
@ -706,7 +706,9 @@ void LifeCycleManager::prolog_success_action(int vid)
|
||||
return;
|
||||
}
|
||||
|
||||
switch (vm->get_lcm_state())
|
||||
VirtualMachine::LcmState lcm_state = vm->get_lcm_state();
|
||||
|
||||
switch (lcm_state)
|
||||
{
|
||||
//---------------------------------------------------------------------
|
||||
// BOOT STATE
|
||||
@ -717,7 +719,7 @@ void LifeCycleManager::prolog_success_action(int vid)
|
||||
case VirtualMachine::PROLOG_MIGRATE_FAILURE: //recover success
|
||||
case VirtualMachine::PROLOG:
|
||||
case VirtualMachine::PROLOG_FAILURE: //recover success
|
||||
switch (vm->get_lcm_state())
|
||||
switch (lcm_state)
|
||||
{
|
||||
case VirtualMachine::PROLOG_RESUME:
|
||||
action = VirtualMachineManager::RESTORE;
|
||||
@ -761,10 +763,12 @@ void LifeCycleManager::prolog_success_action(int vid)
|
||||
break;
|
||||
|
||||
//---------------------------------------------------------------------
|
||||
// POWEROFF STATE
|
||||
// POWEROFF/SUSPEND STATE
|
||||
//---------------------------------------------------------------------
|
||||
case VirtualMachine::PROLOG_MIGRATE_POWEROFF:
|
||||
case VirtualMachine::PROLOG_MIGRATE_POWEROFF_FAILURE: //recover success
|
||||
case VirtualMachine::PROLOG_MIGRATE_SUSPEND:
|
||||
case VirtualMachine::PROLOG_MIGRATE_SUSPEND_FAILURE: //recover success
|
||||
vm->delete_snapshots();
|
||||
|
||||
vm->update_info(0, 0, -1, -1, empty);
|
||||
@ -784,7 +788,15 @@ void LifeCycleManager::prolog_success_action(int vid)
|
||||
|
||||
vmpool->update_history(vm);
|
||||
|
||||
dm->trigger(DispatchManager::POWEROFF_SUCCESS,vid);
|
||||
if (lcm_state == VirtualMachine::PROLOG_MIGRATE_POWEROFF||
|
||||
lcm_state == VirtualMachine::PROLOG_MIGRATE_POWEROFF_FAILURE)
|
||||
{
|
||||
dm->trigger(DispatchManager::POWEROFF_SUCCESS,vid);
|
||||
}
|
||||
else //PROLOG_MIGRATE_SUSPEND, PROLOG_MIGRATE_SUSPEND_FAILURE
|
||||
{
|
||||
dm->trigger(DispatchManager::POWEROFF_SUCCESS,vid);
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
@ -838,6 +850,13 @@ void LifeCycleManager::prolog_failure_action(int vid)
|
||||
|
||||
vm->log("LCM", Log::INFO, "New VM state is PROLOG_MIGRATE_POWEROFF_FAILURE");
|
||||
}
|
||||
else if ( state == VirtualMachine::PROLOG_MIGRATE_SUSPEND )
|
||||
{
|
||||
vm->set_state(VirtualMachine::PROLOG_MIGRATE_SUSPEND_FAILURE);
|
||||
vmpool->update(vm);
|
||||
|
||||
vm->log("LCM", Log::INFO, "New VM state is PROLOG_MIGRATE_SUSPEND_FAILURE");
|
||||
}
|
||||
else if ( state == VirtualMachine::PROLOG_RESUME )
|
||||
{
|
||||
//----------------------------------------------------
|
||||
|
Loading…
x
Reference in New Issue
Block a user