1
0
mirror of https://github.com/OpenNebula/one.git synced 2025-03-29 18:50:08 +03:00

feature #1112: Update Image state when releasing it (persistent and save_as images)

This commit is contained in:
Ruben S. Montero 2012-03-06 00:18:01 +01:00
parent 13bee9d9da
commit d38292505b
3 changed files with 39 additions and 10 deletions

View File

@ -99,8 +99,9 @@ public:
/**
* Releases an image and triggers any needed operations in the repo
* @param iid image id of the image to be released
* @param failed the associated VM releasing the images is FAILED
*/
void release_image(const string& iid)
void release_image(const string& iid, bool failed)
{
int image_id;
istringstream iss;
@ -108,14 +109,15 @@ public:
iss.str(iid);
iss >> image_id;
release_image(image_id);
release_image(image_id, failed);
};
/**
* Releases an image and triggers any needed operations in the repo
* @param iid image id of the image to be released
* @param failed the associated VM releasing the images is FAILED
*/
void release_image(int iid);
void release_image(int iid, bool failed);
/**
* Enables the image

View File

@ -128,7 +128,7 @@ int ImageManager::acquire_image(Image *img, string& error)
/* -------------------------------------------------------------------------- */
/* -------------------------------------------------------------------------- */
void ImageManager::release_image(int iid)
void ImageManager::release_image(int iid, bool failed)
{
int rvms;
@ -148,20 +148,47 @@ void ImageManager::release_image(int iid)
case Image::USED:
rvms = img->dec_running();
if ( img->isPersistent() || rvms == 0 )
if (img->isPersistent())
{
if (failed == true)
{
img->set_state(Image::ERROR);
}
else
{
img->set_state(Image::READY);
}
ipool->update(img);
}
else if ( rvms == 0 )
{
img->set_state(Image::READY);
ipool->update(img);
img->unlock();
}
img->unlock();
break;
case Image::LOCKED: //SAVE_AS images are LOCKED till released
if (failed == true)
{
img->set_state(Image::ERROR);
}
else
{
img->set_state(Image::READY);
}
ipool->update(img);
img->unlock();
break;
case Image::DISABLED:
case Image::READY:
case Image::ERROR:
case Image::LOCKED:
NebulaLog::log("ImM",Log::ERROR,
"Trying to release image in wrong state.");
default:

View File

@ -938,7 +938,7 @@ error_common:
for ( it=acquired_images.begin() ; it < acquired_images.end(); it++ )
{
imagem->release_image(*it);
imagem->release_image(*it, false);
}
return -1;
@ -977,7 +977,7 @@ void VirtualMachine::release_disk_images()
if ( !iid.empty() )
{
imagem->release_image(iid);
imagem->release_image(iid, (state == FAILED));
}
}
}