mirror of
https://github.com/OpenNebula/one.git
synced 2025-01-22 22:03:39 +03:00
Feature #1288: Clean quotas that reach 0 usage and limit
This commit is contained in:
parent
8f809df025
commit
e2f59f0cbb
@ -124,9 +124,40 @@ protected:
|
||||
/**
|
||||
* Gets a quota identified by its ID.
|
||||
* @param id of the quota
|
||||
* @return a pointer to the quota or 0 if not found
|
||||
* @param va The quota, if it is found
|
||||
* @return 0 on success, -1 if not found
|
||||
*/
|
||||
virtual int get_quota(const string& id, VectorAttribute **va);
|
||||
virtual int get_quota(const string& id, VectorAttribute **va)
|
||||
{
|
||||
map<string, Attribute *>::iterator it;
|
||||
return get_quota(id, va, it);
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets a quota identified by its ID.
|
||||
*
|
||||
* @param id of the quota
|
||||
* @param va The quota, if it is found
|
||||
* @param it The quota iterator, if it is found
|
||||
*
|
||||
* @return 0 on success, -1 if not found
|
||||
*/
|
||||
virtual int get_quota(
|
||||
const string& id,
|
||||
VectorAttribute **va,
|
||||
map<string, Attribute *>::iterator& it);
|
||||
|
||||
/**
|
||||
* Deletes a quota from the index. The quota pointer is freed.
|
||||
* @param it The quota iterator, as returned by Quota::get_quota
|
||||
*/
|
||||
virtual void del(map<string, Attribute *>::iterator& it)
|
||||
{
|
||||
Attribute * attr = it->second;
|
||||
delete attr;
|
||||
|
||||
attributes.erase(it);
|
||||
}
|
||||
|
||||
private:
|
||||
/**
|
||||
|
@ -62,15 +62,41 @@ public:
|
||||
|
||||
/**
|
||||
* Gets a quota, overrides base to not to use ID.
|
||||
* @param id of the quota
|
||||
* @param id of the quota, ignored
|
||||
* @param va The quota
|
||||
*
|
||||
* @return a pointer to the quota or 0 if not found
|
||||
*/
|
||||
int get_quota(const string& id, VectorAttribute **va);
|
||||
|
||||
/**
|
||||
* Gets a quota, overrides base to not to use ID.
|
||||
*
|
||||
* @param id of the quota, ignored
|
||||
* @param va The quota
|
||||
* @param it The quota iterator, if it is found
|
||||
*
|
||||
* @return 0 on success, -1 if not found
|
||||
*/
|
||||
int get_quota(
|
||||
const string& id,
|
||||
VectorAttribute **va,
|
||||
map<string, Attribute *>::iterator& it)
|
||||
{
|
||||
it = attributes.end();
|
||||
return get_quota(id, va);
|
||||
}
|
||||
|
||||
/**
|
||||
* Overrides base to not delete anything
|
||||
* @param it The quota iterator, ignored
|
||||
*/
|
||||
void del(map<string, Attribute *>::iterator& it){}
|
||||
|
||||
protected:
|
||||
static const char * VM_METRICS[];
|
||||
|
||||
static const int NUM_VM_METRICS;
|
||||
};
|
||||
|
||||
#endif /*QUOTA_VIRTUALMACHINE_H_*/
|
||||
#endif /*QUOTA_VIRTUALMACHINE_H_*/
|
||||
|
@ -19,9 +19,11 @@
|
||||
/* -------------------------------------------------------------------------- */
|
||||
/* -------------------------------------------------------------------------- */
|
||||
|
||||
int Quota::get_quota(const string& id, VectorAttribute ** va)
|
||||
int Quota::get_quota(
|
||||
const string& id,
|
||||
VectorAttribute ** va,
|
||||
map<string, Attribute *>::iterator& it)
|
||||
{
|
||||
map<string, Attribute *>::iterator it;
|
||||
VectorAttribute * q;
|
||||
|
||||
istringstream iss(id);
|
||||
@ -269,8 +271,12 @@ void Quota::del_quota(const string& qid, map<string, int>& usage_req)
|
||||
{
|
||||
VectorAttribute * q;
|
||||
map<string, int>::iterator it;
|
||||
map<string, Attribute *>::iterator q_it;
|
||||
|
||||
if ( get_quota(qid, &q) == -1)
|
||||
int limit, limit_tmp;
|
||||
int usage, usage_tmp;
|
||||
|
||||
if ( get_quota(qid, &q, q_it) == -1)
|
||||
{
|
||||
return;
|
||||
}
|
||||
@ -280,6 +286,9 @@ void Quota::del_quota(const string& qid, map<string, int>& usage_req)
|
||||
return;
|
||||
}
|
||||
|
||||
limit = 0;
|
||||
usage = 0;
|
||||
|
||||
for (int i=0; i < num_metrics; i++)
|
||||
{
|
||||
string metrics_used = metrics[i];
|
||||
@ -294,6 +303,17 @@ void Quota::del_quota(const string& qid, map<string, int>& usage_req)
|
||||
}
|
||||
|
||||
add_to_quota(q, metrics_used, -it->second);
|
||||
|
||||
q->vector_value(metrics[i], limit_tmp);
|
||||
q->vector_value(metrics_used.c_str(), usage_tmp);
|
||||
|
||||
limit += limit_tmp;
|
||||
usage += usage_tmp;
|
||||
}
|
||||
|
||||
if ( limit == 0 && usage == 0 )
|
||||
{
|
||||
del(q_it);
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user