mirror of
https://github.com/OpenNebula/one.git
synced 2025-03-23 22:50:09 +03:00
feature #1617: Image of type FILE: are always non-persistent, does not have DEV_PREFIX, cannot be acquired, cannot change type as they live in a FILE_DS.
This commit is contained in:
parent
8feb9206c4
commit
ed9a14077a
@ -132,19 +132,33 @@ int Image::insert(SqlDB *db, string& error_str)
|
||||
|
||||
erase_template_attribute("PERSISTENT", persistent_attr);
|
||||
|
||||
TO_UPPER(persistent_attr);
|
||||
if ( type != DATAFILE )
|
||||
{
|
||||
TO_UPPER(persistent_attr);
|
||||
|
||||
persistent_img = (persistent_attr == "YES");
|
||||
persistent_img = (persistent_attr == "YES");
|
||||
}
|
||||
else // Files are always non-persistent
|
||||
{
|
||||
persistent_img = false;
|
||||
}
|
||||
|
||||
// ------------ PREFIX --------------------
|
||||
|
||||
get_template_attribute("DEV_PREFIX", dev_prefix);
|
||||
|
||||
if( dev_prefix.empty() )
|
||||
if ( type != DATAFILE )
|
||||
{
|
||||
SingleAttribute * dev_att = new SingleAttribute("DEV_PREFIX",
|
||||
ImagePool::default_dev_prefix());
|
||||
obj_template->set(dev_att);
|
||||
get_template_attribute("DEV_PREFIX", dev_prefix);
|
||||
|
||||
if( dev_prefix.empty() )
|
||||
{
|
||||
SingleAttribute * dev_att = new SingleAttribute("DEV_PREFIX",
|
||||
ImagePool::default_dev_prefix());
|
||||
obj_template->set(dev_att);
|
||||
}
|
||||
}
|
||||
else // Do not set dev_prefix for files
|
||||
{
|
||||
erase_template_attribute("DEV_PREFIX", dev_prefix);
|
||||
}
|
||||
|
||||
// ------------ SIZE --------------------
|
||||
|
@ -88,6 +88,12 @@ int ImageManager::acquire_image(int vm_id, Image *img, string& error)
|
||||
{
|
||||
int rc = 0;
|
||||
|
||||
if ( img->get_type() == Image::DATAFILE )
|
||||
{
|
||||
error = "Image of type FILE cannot be used as DISK.";
|
||||
return -1;
|
||||
}
|
||||
|
||||
switch (img->get_state())
|
||||
{
|
||||
case Image::READY:
|
||||
@ -149,6 +155,14 @@ void ImageManager::release_image(int vm_id, int iid, bool failed)
|
||||
return;
|
||||
}
|
||||
|
||||
if ( img->get_type() == Image::DATAFILE )
|
||||
{
|
||||
NebulaLog::log("ImM", Log::ERROR, "Trying to release a FILE image");
|
||||
|
||||
img->unlock();
|
||||
return;
|
||||
}
|
||||
|
||||
switch (img->get_state())
|
||||
{
|
||||
case Image::USED_PERS:
|
||||
@ -238,6 +252,14 @@ void ImageManager::release_cloning_image(int iid, int clone_img_id)
|
||||
return;
|
||||
}
|
||||
|
||||
if ( img->get_type() == Image::DATAFILE )
|
||||
{
|
||||
NebulaLog::log("ImM", Log::ERROR, "Trying to release a cloning FILE image");
|
||||
|
||||
img->unlock();
|
||||
return;
|
||||
}
|
||||
|
||||
switch (img->get_state())
|
||||
{
|
||||
case Image::USED:
|
||||
|
@ -116,6 +116,7 @@ int ImagePool::allocate (
|
||||
{
|
||||
goto error_types_missmatch_image;
|
||||
}
|
||||
|
||||
img_aux = get(name,uid,false);
|
||||
|
||||
if( img_aux != 0 )
|
||||
@ -135,7 +136,6 @@ int ImagePool::allocate (
|
||||
goto error_clone_state;
|
||||
}
|
||||
|
||||
|
||||
img->set_cloning_id(cloning_id);
|
||||
}
|
||||
|
||||
@ -197,11 +197,11 @@ error_name_length:
|
||||
goto error_common;
|
||||
|
||||
error_types_missmatch_file:
|
||||
oss << "Only IMAGES of type FILE can be registered in FILE_DS Datastore";
|
||||
oss << "Only IMAGES of type FILE can be registered in a FILE_DS datastore";
|
||||
goto error_common;
|
||||
|
||||
error_types_missmatch_image:
|
||||
oss << "IMAGES of type FILE can be registered in IMAGE_DS Datastore";
|
||||
oss << "IMAGES of type FILE cannot be registered in a IMAGE_DS datastore";
|
||||
goto error_common;
|
||||
|
||||
error_duplicated:
|
||||
|
@ -44,11 +44,11 @@ void ImageEnable::request_execute(xmlrpc_c::paramList const& paramList,
|
||||
{
|
||||
if (enable_flag == true)
|
||||
{
|
||||
err_msg = "Could not enable image";
|
||||
err_msg = "Could not enable image.";
|
||||
}
|
||||
else
|
||||
{
|
||||
err_msg = "Could not disable image";
|
||||
err_msg = "Could not disable image.";
|
||||
}
|
||||
|
||||
failure_response(INTERNAL, request_error(err_msg,""), att);
|
||||
@ -87,6 +87,15 @@ void ImagePersistent::request_execute(xmlrpc_c::paramList const& paramList,
|
||||
return;
|
||||
}
|
||||
|
||||
if ( image->get_type() == Image::DATAFILE )
|
||||
{
|
||||
failure_response(ACTION,
|
||||
request_error("FILE images must be non-persistent",""), att);
|
||||
|
||||
image->unlock();
|
||||
return;
|
||||
}
|
||||
|
||||
rc = image->persistent(persistent_flag, err_msg);
|
||||
|
||||
if ( rc != 0 )
|
||||
@ -142,6 +151,17 @@ void ImageChangeType::request_execute(xmlrpc_c::paramList const& paramList,
|
||||
return;
|
||||
}
|
||||
|
||||
if ( image->get_type() == Image::DATAFILE )
|
||||
{
|
||||
failure_response(ACTION,
|
||||
request_error("Only FILE images can be stored in a FILE_DS"
|
||||
" datastore.",""),
|
||||
att);
|
||||
|
||||
image->unlock();
|
||||
return;
|
||||
}
|
||||
|
||||
rc = image->set_type(type);
|
||||
|
||||
if ( rc != 0 )
|
||||
|
@ -641,6 +641,14 @@ void VirtualMachineSaveDisk::request_execute(xmlrpc_c::paramList const& paramLis
|
||||
return;
|
||||
}
|
||||
|
||||
if ( type == Image::DATAFILE )
|
||||
{
|
||||
failure_response(INTERNAL,
|
||||
request_error("Cannot save_as image of type FILE", ""),
|
||||
att);
|
||||
return;
|
||||
}
|
||||
|
||||
// -------------------------------------------------------------------------
|
||||
// Get the data of the DataStore for the new image
|
||||
// -------------------------------------------------------------------------
|
||||
|
Loading…
x
Reference in New Issue
Block a user