Avoid sending prolog and epilog actions to already deleted (or non existent) hosts

This commit is contained in:
Tino Vazquez committed 2013-11-04 17:58:07 +01:00
1 parent b1d2785707
commit 539243ac2a
1 file changed
+52 -6
+52 -6
View File
@@ -149,9 +149,11 @@ void TransferManager::trigger(Actions action, int _vid)
void TransferManager::do_action(const string &action, void * arg)
{
int vid;
int hid;
VirtualMachine * vm;
Host * host;
bool host_is_hybrid;
bool host_is_hybrid = false;
bool host_is_deleted = false;
Nebula& nd = Nebula::instance();
if (arg == 0)
@@ -170,11 +172,20 @@ void TransferManager::do_action(const string &action, void * arg)
return;
}
host = hpool->get(vm->get_hid(),true);
host_is_hybrid=host->isHybrid();
hid = vm->get_hid();
vm->unlock();
host->unlock();
host = hpool->get(hid,true);
if ( host == 0)
{
host_is_deleted=true;
}
else
{
host_is_hybrid=host->isHybrid();
host->unlock();
}
if (action == "PROLOG")
{
@@ -182,6 +193,10 @@ void TransferManager::do_action(const string &action, void * arg)
{
(nd.get_lcm())->trigger(LifeCycleManager::PROLOG_SUCCESS,vid);
}
else if (host_is_deleted)
{
(nd.get_lcm())->trigger(LifeCycleManager::PROLOG_FAILURE,vid);
}
else
{
prolog_action(vid);
@@ -193,6 +208,10 @@ void TransferManager::do_action(const string &action, void * arg)
{
(nd.get_lcm())->trigger(LifeCycleManager::PROLOG_SUCCESS,vid);
}
else if (host_is_deleted)
{
(nd.get_lcm())->trigger(LifeCycleManager::PROLOG_FAILURE,vid);
}
else
{
prolog_migr_action(vid);
@@ -204,6 +223,10 @@ void TransferManager::do_action(const string &action, void * arg)
{
(nd.get_lcm())->trigger(LifeCycleManager::PROLOG_SUCCESS,vid);
}
else if (host_is_deleted)
{
(nd.get_lcm())->trigger(LifeCycleManager::PROLOG_FAILURE,vid);
}
else
{
prolog_resume_action(vid);
@@ -215,6 +238,10 @@ void TransferManager::do_action(const string &action, void * arg)
{
(nd.get_lcm())->trigger(LifeCycleManager::EPILOG_SUCCESS,vid);
}
else if (host_is_deleted)
{
(nd.get_lcm())->trigger(LifeCycleManager::EPILOG_FAILURE,vid);
}
else
{
epilog_action(vid);
@@ -226,6 +253,10 @@ void TransferManager::do_action(const string &action, void * arg)
{
(nd.get_lcm())->trigger(LifeCycleManager::EPILOG_SUCCESS,vid);
}
else if (host_is_deleted)
{
(nd.get_lcm())->trigger(LifeCycleManager::EPILOG_FAILURE,vid);
}
else
{
epilog_stop_action(vid);
@@ -237,6 +268,10 @@ void TransferManager::do_action(const string &action, void * arg)
{
(nd.get_lcm())->trigger(LifeCycleManager::EPILOG_SUCCESS,vid);
}
else if (host_is_deleted)
{
(nd.get_lcm())->trigger(LifeCycleManager::EPILOG_FAILURE,vid);
}
else
{
epilog_delete_action(vid);
@@ -248,6 +283,10 @@ void TransferManager::do_action(const string &action, void * arg)
{
(nd.get_lcm())->trigger(LifeCycleManager::EPILOG_SUCCESS,vid);
}
else if (host_is_deleted)
{
(nd.get_lcm())->trigger(LifeCycleManager::EPILOG_FAILURE,vid);
}
else
{
epilog_delete_stop_action(vid);
@@ -259,10 +298,13 @@ void TransferManager::do_action(const string &action, void * arg)
{
(nd.get_lcm())->trigger(LifeCycleManager::EPILOG_SUCCESS,vid);
}
else if (host_is_deleted)
{
(nd.get_lcm())->trigger(LifeCycleManager::EPILOG_FAILURE,vid);
}
else
{
epilog_delete_previous_action(vid);
}
}
else if (action == "EPILOG_DELETE_BOTH")
@@ -271,6 +313,10 @@ void TransferManager::do_action(const string &action, void * arg)
{
(nd.get_lcm())->trigger(LifeCycleManager::EPILOG_SUCCESS,vid);
}
else if (host_is_deleted)
{
(nd.get_lcm())->trigger(LifeCycleManager::EPILOG_FAILURE,vid);
}
else
{
epilog_delete_both_action(vid);