ACK with two notes:
- cpus/memory/storage left in "reset" method of quota controller and
"View Pool's Quota Usage" scenario of pool cuke test. Tests passed after
removing it.
- quota is not checked when creating/starting instance in condormatic
util, but it's not part of this patch (will be added by condor guys)
Dne 26.8.2010 12:43, mtaylor(a)redhat.com napsal(a):
From: martyntaylor<mtaylor(a)redhat.com>
---
src/app/models/instance_observer.rb | 8 +---
src/app/models/quota.rb | 42 +++++++-------------
src/app/services/data_service_active_record.rb | 6 ---
src/app/views/quota/edit.html.erb | 3 -
src/db/migrate/20090802000000_create_quotas.rb | 6 ---
src/spec/factories/quota.rb | 6 ---
src/spec/models/instance_observer_spec.rb | 14 -------
.../services/data_service_active_record_spec.rb | 21 +--------
8 files changed, 18 insertions(+), 88 deletions(-)
diff --git a/src/app/models/instance_observer.rb b/src/app/models/instance_observer.rb
index 610d742..70537ac 100644
--- a/src/app/models/instance_observer.rb
+++ b/src/app/models/instance_observer.rb
@@ -43,20 +43,14 @@ class InstanceObserver< ActiveRecord::Observer
if quota
if state_to == Instance::STATE_RUNNING
quota.running_instances += 1
- quota.running_memory = quota.running_memory.to_f + hwp.memory.value.to_f
- quota.running_cpus = quota.running_cpus.to_f + hwp.cpu.value.to_f
elsif state_from == Instance::STATE_RUNNING
quota.running_instances -= 1
- quota.running_memory = quota.running_memory.to_f - hwp.memory.value.to_f
- quota.running_cpus = quota.running_cpus.to_f - hwp.cpu.value.to_f
end
if state_from != nil
if !ACTIVE_STATES.include?(state_from)&&
ACTIVE_STATES.include?(state_to)
- quota.total_storage = quota.total_storage.to_f + hwp.storage.value.to_f
quota.total_instances += 1
- elsif ACTIVE_STATES.include?(state_from)&&
!ACTIVE_STATES.include?(state_to)
- quota.total_storage = quota.total_storage.to_f - hwp.storage.value.to_f
+ elsif ACTIVE_STATES.include?(state_from)&&
!ACTIVE_STATES.include?(state_to)
quota.total_instances -= 1
end
end
diff --git a/src/app/models/quota.rb b/src/app/models/quota.rb
index bd228b3..f882878 100644
--- a/src/app/models/quota.rb
+++ b/src/app/models/quota.rb
@@ -21,63 +21,49 @@
class Quota< ActiveRecord::Base
+ has_one :pool
+ has_one :cloud_account
+
QuotaResource = Struct.new(:name, :used, :max, :available, :unit)
NO_LIMIT = nil
RESOURCE_RUNNING_INSTANCES = "running_instances"
- RESOURCE_RUNNING_MEMORY = "running_memory"
- RESOURCE_RUNNING_CPUS = "running_cpus"
RESOURCE_TOTAL_INSTANCES = "total_instances"
- RESOURCE_TOTAL_STORAGE = "total_storage"
RESOURCE_OVERALL = "overall"
- RESOURCE_NAMES = [ RESOURCE_RUNNING_INSTANCES, RESOURCE_RUNNING_MEMORY,
RESOURCE_RUNNING_CPUS,
- RESOURCE_TOTAL_INSTANCES, RESOURCE_TOTAL_STORAGE ]
-
- has_one :pool
- has_one :cloud_account
+ RESOURCE_NAMES = [ RESOURCE_RUNNING_INSTANCES, RESOURCE_TOTAL_INSTANCES ]
def can_create_instance?(instance)
- hwp = instance.hardware_profile
-
- potential_total_storage = total_storage.to_f + hwp.storage.value.to_f
potential_total_instances = total_instances + 1
-
- # check for no quota
- if (Quota.no_limit(maximum_total_instances) || maximum_total_instances>=
potential_total_instances)&&
- (Quota.no_limit(maximum_total_storage) || maximum_total_storage.to_f>=
potential_total_storage.to_f)
+ if (Quota.no_limit(maximum_total_instances) || maximum_total_instances>=
potential_total_instances)
return true
end
return false
end
def can_start_instance?(instance)
- hwp = instance.hardware_profile
-
potential_running_instances = running_instances + 1
- potential_running_memory = running_memory.to_f + hwp.memory.value.to_f
- potential_running_cpus = running_cpus.to_f + hwp.cpu.value.to_f
-
- if (Quota.no_limit(maximum_running_instances) || maximum_running_instances>=
potential_running_instances)&&
- (Quota.no_limit(maximum_running_memory) || maximum_running_memory.to_f>=
potential_running_memory)&&
- (Quota.no_limit(maximum_running_cpus) || maximum_running_cpus.to_f>=
potential_running_cpus)
+ if (Quota.no_limit(maximum_running_instances) || maximum_running_instances>=
potential_running_instances)
return true
end
return false
end
def quota_resources()
- quota_resources = {"running_instances" =>
QuotaResource.new("Running Instances", running_instances,
maximum_running_instances, maximum_running_instances.to_f - running_instances.to_f,
""),
- "running_memory" => QuotaResource.new("Running
Memory", running_memory, maximum_running_memory, maximum_running_memory.to_f -
running_memory.to_f, "MB"),
- "running_cpus" => QuotaResource.new("Running CPUs",
running_cpus, maximum_running_cpus, maximum_running_cpus.to_f - running_cpus.to_f,
""),
- "total_instances" => QuotaResource.new("Total
Instances", total_instances, maximum_total_instances, maximum_total_instances.to_f -
total_instances.to_f, ""),
- "total_storage" => QuotaResource.new("Total
Storage", total_storage, maximum_total_storage, maximum_total_storage.to_f -
total_storage.to_f, "GB")}
+ quota_resources = {"running_instances" =>
QuotaResource.new("Running Instances", running_instances,
maximum_running_instances, nil, ""),
+ "total_instances" => QuotaResource.new("Total
Instances", total_instances, maximum_total_instances, nil, "")}
quota_resources.each_value do |quota_resource|
if Quota.no_limit(quota_resource.max)
quota_resource.max = "No Limit"
quota_resource.available = "N\A"
+ else
+ quota_resource.available = quota_resource.max - quota_resource.used
+ if quota_resource.available< 0
+ quota_resource.available = quota_resource.available * -1
+ quota_resource.available = "OverLimit By: " +
quota_resource.available.to_s
+ end
end
end
diff --git a/src/app/services/data_service_active_record.rb
b/src/app/services/data_service_active_record.rb
index 1165621..68769ab 100644
--- a/src/app/services/data_service_active_record.rb
+++ b/src/app/services/data_service_active_record.rb
@@ -55,14 +55,8 @@ class DataServiceActiveRecord
case resource_name
when Quota::RESOURCE_RUNNING_INSTANCES
return QuotaUsagePoint.new(quota.running_instances,
quota.maximum_running_instances)
- when Quota::RESOURCE_RUNNING_MEMORY
- return QuotaUsagePoint.new(quota.running_memory.to_f,
quota.maximum_running_memory.to_f)
- when Quota::RESOURCE_RUNNING_CPUS
- return QuotaUsagePoint.new(quota.running_cpus.to_f,
quota.maximum_running_cpus.to_f)
when Quota::RESOURCE_TOTAL_INSTANCES
return QuotaUsagePoint.new(quota.total_instances,
quota.maximum_total_instances)
- when Quota::RESOURCE_TOTAL_STORAGE
- return QuotaUsagePoint.new(quota.total_storage.to_f,
quota.maximum_total_storage.to_f)
when Quota::RESOURCE_OVERALL
return self.overall_usage(parent)
else
diff --git a/src/app/views/quota/edit.html.erb b/src/app/views/quota/edit.html.erb
index 5e742bb..8d9ae97 100644
--- a/src/app/views/quota/edit.html.erb
+++ b/src/app/views/quota/edit.html.erb
@@ -10,10 +10,7 @@
<ul>
<li><label>Max Running Instances</label><%= text_field
:quota, :maximum_running_instances %></li>
- <li><label>Max Running Memory</label><%= text_field :quota,
:maximum_running_memory %></li>
- <li><label>Max Running CPUs</label><%= text_field :quota,
:maximum_running_cpus %></li>
<li><label>Max Total Instances</label><%= text_field :quota,
:maximum_total_instances %></li>
- <li><label>Max Total Storage</label><%= text_field :quota,
:maximum_total_storage %></li>
</ul>
</fieldset>
<%= submit_tag "Save", :class => "submit" %>
diff --git a/src/db/migrate/20090802000000_create_quotas.rb
b/src/db/migrate/20090802000000_create_quotas.rb
index bfd195b..6456ff2 100644
--- a/src/db/migrate/20090802000000_create_quotas.rb
+++ b/src/db/migrate/20090802000000_create_quotas.rb
@@ -20,15 +20,9 @@
class CreateQuotas< ActiveRecord::Migration
def self.up
create_table :quotas do |t|
- t.string :running_cpus, :default => 0
- t.string :running_memory, :default => 0
t.integer :running_instances, :default => 0
- t.string :total_storage, :default => 0
t.integer :total_instances, :default => 0
- t.string :maximum_running_cpus, :default => nil
- t.string :maximum_running_memory, :default => nil
t.integer :maximum_running_instances, :default => nil
- t.string :maximum_total_storage, :default => nil
t.integer :maximum_total_instances, :default => nil
t.integer :lock_version, :default => 0
t.timestamps
diff --git a/src/spec/factories/quota.rb b/src/spec/factories/quota.rb
index 3f519ca..92c832f 100644
--- a/src/spec/factories/quota.rb
+++ b/src/spec/factories/quota.rb
@@ -1,15 +1,9 @@
Factory.define :quota do |f|
f.maximum_running_instances 10
- f.maximum_running_memory "10240"
- f.maximum_running_cpus 20
f.maximum_total_instances 15
- f.maximum_total_storage "8500"
end
Factory.define :full_quota, :parent => :quota do |f|
f.running_instances 10
- f.running_memory "10240"
- f.running_cpus 20
f.total_instances 15
- f.total_storage "8500"
end
\ No newline at end of file
diff --git a/src/spec/models/instance_observer_spec.rb
b/src/spec/models/instance_observer_spec.rb
index 6bcb4d0..ae5ee0d 100644
--- a/src/spec/models/instance_observer_spec.rb
+++ b/src/spec/models/instance_observer_spec.rb
@@ -98,9 +98,7 @@ describe InstanceObserver do
it "should not update quota on pool and cloud account when an instance is state
new" do
[@cloud_account_quota, @pool_quota].each do |quota|
quota = Quota.find(quota)
-
quota.total_instances.should == 0
- quota.total_storage.to_f.should == 0.to_f
end
end
@@ -110,9 +108,7 @@ describe InstanceObserver do
@instance.save
quota = Quota.find(quota)
-
quota.total_instances.should == 1
- quota.total_storage.to_f.should == @hwp.storage.value.to_f
end
end
@@ -122,9 +118,7 @@ describe InstanceObserver do
[@cloud_account_quota, @pool_quota].each do |quota|
quota = Quota.find(quota)
-
quota.total_instances.should == 0
- quota.total_storage.to_f.should == 0.to_f
end
end
@@ -135,10 +129,6 @@ describe InstanceObserver do
[@cloud_account_quota, @pool_quota].each do |quota|
quota = Quota.find(quota.id)
quota.running_instances.should == 1
- quota.running_memory.to_f.should == @hwp.memory.value.to_f
- quota.running_cpus.to_f.should == @hwp.cpu.value.to_f
-
- quota.total_storage.to_f.should == @hwp.storage.value.to_f
quota.total_instances.should == 1
end
end
@@ -153,11 +143,7 @@ describe InstanceObserver do
[@cloud_account_quota, @pool_quota].each do |quota|
quota = Quota.find(quota.id)
- #TODO test for cpus
quota.running_instances.should == 0
- quota.running_memory.to_f.should == 0.to_f
-
- quota.total_storage.to_f.should == @hwp.storage.value.to_f
quota.total_instances.should == 1
end
end
diff --git a/src/spec/services/data_service_active_record_spec.rb
b/src/spec/services/data_service_active_record_spec.rb
index 7dd6b50..9842146 100644
--- a/src/spec/services/data_service_active_record_spec.rb
+++ b/src/spec/services/data_service_active_record_spec.rb
@@ -42,34 +42,19 @@ describe DataServiceActiveRecord do
quota = Factory(:quota,
:maximum_running_instances => 40,
- :maximum_running_memory => 10240,
- :maximum_running_cpus => 10,
:maximum_total_instances => 50,
- :maximum_total_storage => 500,
:running_instances => 20,
- :running_memory => 4096,
- :running_cpus => 7,
- :total_instances => 20,
- :total_storage => 499)
+ :total_instances => 20)
cloud_account.quota_id = quota.id
data_point = DataServiceActiveRecord.quota_usage(cloud_account,
Quota::RESOURCE_RUNNING_INSTANCES)
data_point.should == DataServiceActiveRecord::QuotaUsagePoint.new(20, 40)
- data_point = DataServiceActiveRecord.quota_usage(cloud_account,
Quota::RESOURCE_RUNNING_MEMORY)
- data_point.should == DataServiceActiveRecord::QuotaUsagePoint.new(4096, 10240)
-
- data_point = DataServiceActiveRecord.quota_usage(cloud_account,
Quota::RESOURCE_RUNNING_CPUS)
- data_point.should == DataServiceActiveRecord::QuotaUsagePoint.new(7, 10)
-
data_point = DataServiceActiveRecord.quota_usage(cloud_account,
Quota::RESOURCE_TOTAL_INSTANCES)
data_point.should == DataServiceActiveRecord::QuotaUsagePoint.new(20, 50)
- data_point = DataServiceActiveRecord.quota_usage(cloud_account,
Quota::RESOURCE_TOTAL_STORAGE)
- data_point.should == DataServiceActiveRecord::QuotaUsagePoint.new(499, 500)
-
data_point = DataServiceActiveRecord.quota_usage(cloud_account,
Quota::RESOURCE_OVERALL)
- data_point.should == DataServiceActiveRecord::QuotaUsagePoint.new(499, 500)
+ data_point.should == DataServiceActiveRecord::QuotaUsagePoint.new(20, 40)
end
it "should calculate the average, max and min task submission times" do
@@ -367,4 +352,4 @@ describe DataServiceActiveRecord do
interval_time += interval_length
end
end
-end
\ No newline at end of file
+end