Skip to content

Commit

Permalink
Merge pull request #44 from zakiva/quota_numeric_values
Browse files Browse the repository at this point in the history
Add numeric columns to Container Quota Items
  • Loading branch information
Fryguy authored Sep 28, 2017
2 parents 67e4678 + 5c15e6d commit af0e49a
Show file tree
Hide file tree
Showing 3 changed files with 110 additions and 1 deletion.
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
class ChangeContainerQuotaItemsColumnsToFloat < ActiveRecord::Migration[5.0]
class ContainerQuotaItem < ActiveRecord::Base
self.inheritance_column = :_type_disabled # disable STI
end

def up
add_column :container_quota_items, :quota_desired_float, :float
add_column :container_quota_items, :quota_enforced_float, :float
add_column :container_quota_items, :quota_observed_float, :float

ContainerQuotaItem.find_each do |item|
item.quota_desired_float = numeric_quantity(item.quota_desired)
item.quota_enforced_float = numeric_quantity(item.quota_enforced)
item.quota_observed_float = numeric_quantity(item.quota_observed)
item.save
end

remove_column :container_quota_items, :quota_desired
remove_column :container_quota_items, :quota_enforced
remove_column :container_quota_items, :quota_observed

rename_column :container_quota_items, :quota_desired_float, :quota_desired
rename_column :container_quota_items, :quota_enforced_float, :quota_enforced
rename_column :container_quota_items, :quota_observed_float, :quota_observed
end

def down
add_column :container_quota_items, :quota_desired_string, :string
add_column :container_quota_items, :quota_enforced_string, :string
add_column :container_quota_items, :quota_observed_string, :string

ContainerQuotaItem.find_each do |item|
item.quota_desired_string = string_quantity(item.quota_desired)
item.quota_enforced_string = string_quantity(item.quota_enforced)
item.quota_observed_string = string_quantity(item.quota_observed)
item.save
end

remove_column :container_quota_items, :quota_desired
remove_column :container_quota_items, :quota_enforced
remove_column :container_quota_items, :quota_observed

rename_column :container_quota_items, :quota_desired_string, :quota_desired
rename_column :container_quota_items, :quota_enforced_string, :quota_enforced
rename_column :container_quota_items, :quota_observed_string, :quota_observed
end

def numeric_quantity(resource) # parse a string with a suffix into a int\float
return nil if resource.nil?

begin
resource.iec_60027_2_to_i
rescue
resource.decimal_si_to_f
end
end

def string_quantity(resource)
return nil if resource.nil?

val = resource == resource.to_i ? resource.to_i : resource
val.to_s
end
end
2 changes: 1 addition & 1 deletion db/schema.yml
Original file line number Diff line number Diff line change
Expand Up @@ -817,10 +817,10 @@ container_projects:
container_quota_items:
- id
- resource
- container_quota_id
- quota_desired
- quota_enforced
- quota_observed
- container_quota_id
container_quotas:
- id
- name
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
require_migration

describe ChangeContainerQuotaItemsColumnsToFloat do
let(:container_quota_item_stub) { migration_stub(:ContainerQuotaItem) }

migration_context :up do
it "converts string quotas to float values" do
quota_item = container_quota_item_stub.create!(:quota_desired => "10m",
:quota_enforced => "2Gi",
:quota_observed => "30Mi")

migrate

quota_item.reload
expect(quota_item.reload).to have_attributes(:quota_desired => 0.01,
:quota_enforced => 2_147_483_648,
:quota_observed => 31_457_280)
end

it "converts big integers (under 2^49) to float values without rounding" do
big_int = 2**49
quota_item = container_quota_item_stub.create!(:quota_desired => big_int.to_s)

migrate

quota_item.reload
expect(quota_item.quota_desired).to eq(big_int)
end
end

migration_context :down do
it "converts float values to string quotas" do
quota_item = container_quota_item_stub.create!(:quota_desired => 0.01,
:quota_enforced => 1.0,
:quota_observed => 1.5)

migrate

quota_item.reload
expect(quota_item.reload).to have_attributes(:quota_desired => "0.01",
:quota_enforced => "1",
:quota_observed => "1.5")
end
end
end

0 comments on commit af0e49a

Please sign in to comment.