mirror of
https://github.com/OpenNebula/one.git
synced 2025-03-22 18:50:08 +03:00
feature #612: Added meaningful error messages on quota violations
This commit is contained in:
parent
cd6662d496
commit
876ecf8ad7
@ -89,19 +89,43 @@ class Quota
|
||||
# Checks if the user is below resource limits. If new_vm is defined
|
||||
# checks if its requirements fit in limits
|
||||
def check(user, new_vm=nil)
|
||||
usage=@usage.total(user)
|
||||
use=@usage.total(user)
|
||||
use_after=use.clone
|
||||
user_quota=get(user)
|
||||
if new_vm
|
||||
usage.cpu+=new_vm.cpu.to_f
|
||||
usage.memory+=new_vm.memory.to_i
|
||||
usage.num_vms+=1
|
||||
use_after.cpu+=new_vm.cpu.to_f
|
||||
use_after.memory+=new_vm.memory.to_i
|
||||
use_after.num_vms+=1
|
||||
end
|
||||
|
||||
STDERR.puts [user_quota, use_after, new_vm].inspect
|
||||
|
||||
error_message=""
|
||||
|
||||
if !(!user_quota[:cpu] || use_after.cpu<=user_quota[:cpu])
|
||||
error_message<<"Cpu quota exceeded (Quota: #{user_quota[:cpu]}, "+
|
||||
"Used: #{use.cpu}"
|
||||
error_message<<", asked: #{new_vm.cpu.to_f}" if new_vm
|
||||
error_message<<")."
|
||||
end
|
||||
|
||||
if !(!user_quota[:memory] || use_after.memory<=user_quota[:memory])
|
||||
error_message<<" Memory quota exceeded (Quota: "+
|
||||
"#{user_quota[:memory]}, Used: #{use.memory}"
|
||||
error_message<<", asked: #{new_vm.memory.to_i}" if new_vm
|
||||
error_message<<")."
|
||||
end
|
||||
|
||||
if !(!user_quota[:num_vms] || use_after.num_vms<=user_quota[:num_vms])
|
||||
error_message<<" Num VMS quota exceeded (Quota: "+
|
||||
"#{user_quota[:memory]}, Used: #{use.num_vms})."
|
||||
end
|
||||
|
||||
if error_message==""
|
||||
false
|
||||
else
|
||||
error_message.strip
|
||||
end
|
||||
|
||||
STDERR.puts [user_quota, usage, new_vm].inspect
|
||||
|
||||
(!user_quota[:cpu] || usage.cpu<=user_quota[:cpu]) &&
|
||||
(!user_quota[:memory] || usage.memory<=user_quota[:memory]) &&
|
||||
(!user_quota[:num_vms] || usage.num_vms<=user_quota[:num_vms])
|
||||
end
|
||||
|
||||
# Updates user resource consuption
|
||||
|
@ -54,8 +54,8 @@ class SimplePermissions
|
||||
if @quota_enabled and object=='VM' and auth_result
|
||||
STDERR.puts 'quota enabled'
|
||||
@quota.update(uid.to_i)
|
||||
if !@quota.check(uid.to_i, get_vm_usage(id))
|
||||
auth_result="Quota exceeded"
|
||||
if message=@quota.check(uid.to_i, get_vm_usage(id))
|
||||
auth_result=message
|
||||
end
|
||||
end
|
||||
|
||||
|
@ -60,8 +60,8 @@ describe 'Quota' do
|
||||
it 'should check for quotas' do
|
||||
@quota.update(0)
|
||||
@quota.update(1)
|
||||
@quota.check(0).should == true
|
||||
@quota.check(1).should == true
|
||||
@quota.check(0).should == false
|
||||
@quota.check(1).should == false
|
||||
|
||||
vms=@quota.get_user(0)
|
||||
vms[5]=VmUsage.new(40.0, 8192)
|
||||
@ -69,13 +69,13 @@ describe 'Quota' do
|
||||
vms=@quota.get_user(1)
|
||||
vms[6]=VmUsage.new(40.0, 8192)
|
||||
|
||||
@quota.check(0).should == false
|
||||
@quota.check(1).should == false
|
||||
@quota.check(0).class.should == String
|
||||
@quota.check(1).class.should == String
|
||||
|
||||
@quota.update(0)
|
||||
@quota.update(1)
|
||||
@quota.check(0).should == true
|
||||
@quota.check(1).should == true
|
||||
@quota.check(0).should == false
|
||||
@quota.check(1).should == false
|
||||
end
|
||||
|
||||
it 'should let update limits' do
|
||||
@ -86,8 +86,8 @@ describe 'Quota' do
|
||||
it 'should understand unlimited quotas' do
|
||||
vms=@quota.get_user(0)
|
||||
vms[7]=VmUsage.new(9999999999.0, 99999999999)
|
||||
@quota.check(0).should == true
|
||||
@quota.check(0, VmUsage.new(999999999.0, 99999999)).should == true
|
||||
@quota.check(0).should == false
|
||||
@quota.check(0, VmUsage.new(999999999.0, 99999999)).should == false
|
||||
end
|
||||
|
||||
end
|
||||
|
Loading…
x
Reference in New Issue
Block a user