1
0
mirror of https://github.com/OpenNebula/one.git synced 2025-03-11 04:58:16 +03:00

feature : Quotas for one.image snapshots actions

This commit is contained in:
Ruben S. Montero 2015-06-19 13:47:17 +02:00
parent f9bec6a019
commit dfdbc516d1
3 changed files with 43 additions and 2 deletions

@ -498,6 +498,8 @@ int ImageManager::delete_image(int iid, string& error_str)
ipool->update(img);
}
unsigned int snap_size = (img->get_snapshots()).get_total_size();
img->unlock();
delete drv_msg;
@ -507,7 +509,7 @@ int ImageManager::delete_image(int iid, string& error_str)
Template img_usage;
img_usage.add("DATASTORE", ds_id);
img_usage.add("SIZE", size);
img_usage.add("SIZE", size + snap_size);
Quotas::ds_del(uid, gid, &img_usage);

@ -18,6 +18,7 @@
#include "ImagePool.h"
#include "NebulaLog.h"
#include "Quotas.h"
#include "Nebula.h"
#include <sstream>
@ -692,6 +693,9 @@ static void snap_delete_action(istringstream& is,
ostringstream oss;
string info;
unsigned int snap_size;
int ds_id, uid, gid;
Image * image = ipool->get(id, true);
if ( image == 0 )
@ -715,6 +719,11 @@ static void snap_delete_action(istringstream& is,
if ( result == "SUCCESS")
{
ds_id = image->get_ds_id();
uid = image->get_uid();
gid = image->get_gid();
snap_size = (image->get_snapshots()).get_snapshot_size(snap_id);
image->delete_snapshot(snap_id);
}
else
@ -738,6 +747,17 @@ static void snap_delete_action(istringstream& is,
ipool->update(image);
image->unlock();
if (result == "SUCCESS")
{
Template quotas;
quotas.add("DATASTORE", ds_id);
quotas.add("SIZE", (long long) snap_size);
quotas.add("IMAGES",0 );
Quotas::ds_del(uid, gid, &quotas);
}
}
/* -------------------------------------------------------------------------- */
@ -808,6 +828,9 @@ static void snap_flatten_action(istringstream& is,
ostringstream oss;
string info;
unsigned int snap_size;
int ds_id, uid, gid;
Image * image = ipool->get(id, true);
if ( image == 0 )
@ -817,6 +840,11 @@ static void snap_flatten_action(istringstream& is,
if ( result == "SUCCESS")
{
ds_id = image->get_ds_id();
uid = image->get_uid();
gid = image->get_gid();
snap_size = (image->get_snapshots()).get_total_size();
image->clear_snapshots();
}
else
@ -842,6 +870,17 @@ static void snap_flatten_action(istringstream& is,
ipool->update(image);
image->unlock();
if (result == "SUCCESS")
{
Template quotas;
quotas.add("DATASTORE", ds_id);
quotas.add("SIZE", (long long) snap_size);
quotas.add("IMAGES",0 );
Quotas::ds_del(uid, gid, &quotas);
}
}
/* -------------------------------------------------------------------------- */

@ -60,7 +60,7 @@ PoolObjectSQL * RequestManagerChown::get_and_quota(
tmpl = new Template;
tmpl->add("DATASTORE", img->get_ds_id());
tmpl->add("SIZE", img->get_size());
tmpl->add("SIZE",img->get_size()+img->get_snapshots().get_total_size());
qtype = Quotas::DATASTORE;
}