1
0
mirror of https://github.com/OpenNebula/one.git synced 2025-08-24 17:49:28 +03:00

feature #4701: Moved logic to LifeCycleStates

This commit is contained in:
Ruben S. Montero
2016-09-02 12:13:16 +02:00
parent 3ccdd7961d
commit 61202c75bf
2 changed files with 59 additions and 66 deletions

View File

@ -1141,14 +1141,18 @@ void LifeCycleManager::recover(VirtualMachine * vm, bool success)
//---------------------------------------------------------------------- //----------------------------------------------------------------------
case VirtualMachine::PROLOG: case VirtualMachine::PROLOG:
case VirtualMachine::PROLOG_MIGRATE: case VirtualMachine::PROLOG_MIGRATE:
case VirtualMachine::PROLOG_MIGRATE_FAILURE:
case VirtualMachine::PROLOG_RESUME: case VirtualMachine::PROLOG_RESUME:
case VirtualMachine::PROLOG_RESUME_FAILURE: case VirtualMachine::PROLOG_RESUME_FAILURE:
case VirtualMachine::PROLOG_UNDEPLOY: case VirtualMachine::PROLOG_UNDEPLOY:
case VirtualMachine::PROLOG_UNDEPLOY_FAILURE: case VirtualMachine::PROLOG_UNDEPLOY_FAILURE:
case VirtualMachine::PROLOG_FAILURE: case VirtualMachine::PROLOG_FAILURE:
case VirtualMachine::PROLOG_MIGRATE_POWEROFF: case VirtualMachine::PROLOG_MIGRATE_POWEROFF:
case VirtualMachine::PROLOG_MIGRATE_POWEROFF_FAILURE:
case VirtualMachine::PROLOG_MIGRATE_SUSPEND: case VirtualMachine::PROLOG_MIGRATE_SUSPEND:
case VirtualMachine::PROLOG_MIGRATE_SUSPEND_FAILURE:
case VirtualMachine::PROLOG_MIGRATE_UNKNOWN: case VirtualMachine::PROLOG_MIGRATE_UNKNOWN:
case VirtualMachine::PROLOG_MIGRATE_UNKNOWN_FAILURE:
if (success) if (success)
{ {
lcm_action = LifeCycleManager::PROLOG_SUCCESS; lcm_action = LifeCycleManager::PROLOG_SUCCESS;
@ -1159,71 +1163,6 @@ void LifeCycleManager::recover(VirtualMachine * vm, bool success)
} }
break; break;
case VirtualMachine::PROLOG_MIGRATE_FAILURE:
case VirtualMachine::PROLOG_MIGRATE_POWEROFF_FAILURE:
case VirtualMachine::PROLOG_MIGRATE_SUSPEND_FAILURE:
case VirtualMachine::PROLOG_MIGRATE_UNKNOWN_FAILURE:
if (success)
{
lcm_action = LifeCycleManager::PROLOG_SUCCESS;
}
else
{
int cpu, mem, disk;
vector<VectorAttribute *> pci;
time_t t = time(0);
// Close current history record
vm->set_prolog_etime(t);
vm->set_etime(t);
vm->set_reason(History::ERROR);
vm->set_action(History::MIGRATE_ACTION);
vm->set_vm_info();
vmpool->update_history(vm);
vm->get_requirements(cpu, mem, disk, pci);
hpool->del_capacity(vm->get_hid(), vm->get_oid(), cpu, mem, disk, pci);
// Clone previous history record into a new one
vm->cp_previous_history();
vm->set_stime(t);
vm->set_prolog_stime(t);
vm->set_last_poll(0);
switch (vm->get_lcm_state())
{
case VirtualMachine::PROLOG_MIGRATE_FAILURE:
vm->set_state(VirtualMachine::PROLOG_MIGRATE);
break;
case VirtualMachine::PROLOG_MIGRATE_POWEROFF_FAILURE:
vm->set_state(VirtualMachine::PROLOG_MIGRATE_POWEROFF);
break;
case VirtualMachine::PROLOG_MIGRATE_SUSPEND_FAILURE:
vm->set_state(VirtualMachine::PROLOG_MIGRATE_SUSPEND);
break;
case VirtualMachine::PROLOG_MIGRATE_UNKNOWN_FAILURE:
vm->set_state(VirtualMachine::PROLOG_MIGRATE_UNKNOWN);
break;
default:
break;
}
vmpool->update(vm); //update last_seq & state
vmpool->update_history(vm);
hpool->add_capacity(vm->get_hid(), vm->get_oid(), cpu, mem, disk, pci);
lcm_action = LifeCycleManager::PROLOG_SUCCESS;
}
break;
case VirtualMachine::EPILOG: case VirtualMachine::EPILOG:
case VirtualMachine::EPILOG_STOP: case VirtualMachine::EPILOG_STOP:
case VirtualMachine::EPILOG_UNDEPLOY: case VirtualMachine::EPILOG_UNDEPLOY:

View File

@ -763,6 +763,11 @@ void LifeCycleManager::prolog_success_action(int vid)
void LifeCycleManager::prolog_failure_action(int vid) void LifeCycleManager::prolog_failure_action(int vid)
{ {
int cpu, mem, disk;
vector<VectorAttribute *> pci;
time_t t = time(0);
VirtualMachine * vm = vmpool->get(vid,true); VirtualMachine * vm = vmpool->get(vid,true);
if ( vm == 0 ) if ( vm == 0 )
@ -807,10 +812,59 @@ void LifeCycleManager::prolog_failure_action(int vid)
vmpool->update(vm); vmpool->update(vm);
break; break;
case VirtualMachine::PROLOG_MIGRATE_FAILURE: //recover failure from failure state //recover failure from failure state
case VirtualMachine::PROLOG_MIGRATE_FAILURE:
case VirtualMachine::PROLOG_MIGRATE_POWEROFF_FAILURE: case VirtualMachine::PROLOG_MIGRATE_POWEROFF_FAILURE:
case VirtualMachine::PROLOG_MIGRATE_SUSPEND_FAILURE: case VirtualMachine::PROLOG_MIGRATE_SUSPEND_FAILURE:
case VirtualMachine::PROLOG_MIGRATE_UNKNOWN_FAILURE: case VirtualMachine::PROLOG_MIGRATE_UNKNOWN_FAILURE:
// Close current history record
vm->set_prolog_etime(t);
vm->set_etime(t);
vm->set_reason(History::ERROR);
vm->set_action(History::MIGRATE_ACTION);
vm->set_vm_info();
vmpool->update_history(vm);
switch (vm->get_lcm_state())
{
case VirtualMachine::PROLOG_MIGRATE_FAILURE:
vm->set_state(VirtualMachine::PROLOG_MIGRATE);
break;
case VirtualMachine::PROLOG_MIGRATE_POWEROFF_FAILURE:
vm->set_state(VirtualMachine::PROLOG_MIGRATE_POWEROFF);
break;
case VirtualMachine::PROLOG_MIGRATE_SUSPEND_FAILURE:
vm->set_state(VirtualMachine::PROLOG_MIGRATE_SUSPEND);
break;
case VirtualMachine::PROLOG_MIGRATE_UNKNOWN_FAILURE:
vm->set_state(VirtualMachine::PROLOG_MIGRATE_UNKNOWN);
break;
default:
break;
}
vm->get_requirements(cpu, mem, disk, pci);
hpool->del_capacity(vm->get_hid(), vm->get_oid(), cpu,mem,disk,pci);
// Clone previous history record into a new one
vm->cp_previous_history();
vm->set_stime(t);
vm->set_prolog_stime(t);
vm->set_last_poll(0);
vmpool->update(vm); //update last_seq & state
vmpool->update_history(vm);
hpool->add_capacity(vm->get_hid(), vm->get_oid(), cpu,mem,disk,pci);
trigger(LifeCycleManager::PROLOG_SUCCESS, vm->get_oid());
break;
case VirtualMachine::PROLOG_RESUME_FAILURE: case VirtualMachine::PROLOG_RESUME_FAILURE:
case VirtualMachine::PROLOG_UNDEPLOY_FAILURE: case VirtualMachine::PROLOG_UNDEPLOY_FAILURE:
case VirtualMachine::PROLOG_FAILURE: case VirtualMachine::PROLOG_FAILURE: