class Bosh::Director::InstanceReuser
Public Class Methods
new()
click to toggle source
# File lib/bosh/director/instance_reuser.rb, line 5 def initialize @idle_instances_by_stemcell = {} @in_use_instances_by_stemcell = {} @mutex = Mutex.new end
Public Instance Methods
add_in_use_instance(instance, stemcell)
click to toggle source
# File lib/bosh/director/instance_reuser.rb, line 11 def add_in_use_instance(instance, stemcell) raise NilInstanceError if instance.nil? canonical_stemcell = canonical(stemcell) @mutex.synchronize do @in_use_instances_by_stemcell[canonical_stemcell] ||= [] @in_use_instances_by_stemcell[canonical_stemcell] << instance end end
each() { |instance| ... }
click to toggle source
# File lib/bosh/director/instance_reuser.rb, line 80 def each all_instances = (@idle_instances_by_stemcell.values + @in_use_instances_by_stemcell.values).flatten all_instances.each do |instance| yield instance end end
get_instance(stemcell)
click to toggle source
# File lib/bosh/director/instance_reuser.rb, line 20 def get_instance(stemcell) canonical_stemcell = canonical(stemcell) @mutex.synchronize do return nil if @idle_instances_by_stemcell[canonical_stemcell].nil? instance = @idle_instances_by_stemcell[canonical_stemcell].pop return nil if instance.nil? @in_use_instances_by_stemcell[canonical_stemcell] ||= [] @in_use_instances_by_stemcell[canonical_stemcell] << instance return instance end end
get_num_instances(stemcell)
click to toggle source
# File lib/bosh/director/instance_reuser.rb, line 62 def get_num_instances(stemcell) canonical_stemcell = canonical(stemcell) @mutex.synchronize do idle_count = @idle_instances_by_stemcell.fetch(canonical_stemcell, []).size in_use_count = @in_use_instances_by_stemcell.fetch(canonical_stemcell, []).size idle_count + in_use_count end end
release_instance(instance)
click to toggle source
# File lib/bosh/director/instance_reuser.rb, line 32 def release_instance(instance) raise NilInstanceError if instance.nil? @mutex.synchronize do release_without_lock(instance) end end
remove_idle_instance_not_matching_stemcell(stemcell)
click to toggle source
# File lib/bosh/director/instance_reuser.rb, line 51 def remove_idle_instance_not_matching_stemcell(stemcell) canonical_stemcell = canonical(stemcell) @mutex.synchronize do @idle_instances_by_stemcell.each do |stemcell, idle_instances| if stemcell != canonical_stemcell && !idle_instances.empty? return idle_instances.pop end end end end
remove_instance(instance)
click to toggle source
# File lib/bosh/director/instance_reuser.rb, line 39 def remove_instance(instance) raise NilInstanceError if instance.nil? @mutex.synchronize do release_without_lock(instance) @idle_instances_by_stemcell.each_value do |idle_instances| idle_instances.each do |idle_instance| idle_instances.delete(idle_instance) if instance == idle_instance end end end end
total_instance_count()
click to toggle source
# File lib/bosh/director/instance_reuser.rb, line 71 def total_instance_count @mutex.synchronize do sum = 0 @idle_instances_by_stemcell.values.each{|instances| sum += instances.to_a.count } @in_use_instances_by_stemcell.values.each{|instances| sum += instances.to_a.count } sum end end
Private Instance Methods
canonical(stemcell)
click to toggle source
# File lib/bosh/director/instance_reuser.rb, line 101 def canonical(stemcell) stemcell.desc end
release_without_lock(instance)
click to toggle source
# File lib/bosh/director/instance_reuser.rb, line 89 def release_without_lock(instance) @in_use_instances_by_stemcell.each do |canonical_stemcell, in_use_instances| in_use_instances.each do |in_use_instance| if instance == in_use_instance in_use_instances.delete(in_use_instance) @idle_instances_by_stemcell[canonical_stemcell] ||= [] @idle_instances_by_stemcell[canonical_stemcell] << instance end end end end