mirror of
https://github.com/OpenNebula/one.git
synced 2026-11-15 17:23:10 +09:00
Avoid sending prolog and epilog actions to already deleted (or non existent) hosts
This commit is contained in:
1 parent
b1d2785707
commit
539243ac2a
1 file changed
+52
-6
@@ -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);
|
||||
|
||||
Reference in new issue
Block a user