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:
parent
13bee9d9da
commit
d38292505b
@ -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
|
||||
|
@ -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:
|
||||
|
@ -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));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user