class Bosh::Director::DeploymentPlan::CompilationInstancePool
Public Class Methods
new(instance_reuser, vm_creator, deployment_plan, logger, instance_deleter, max_instance_count)
click to toggle source
# File lib/bosh/director/deployment_plan/compilation_instance_pool.rb, line 4 def initialize(instance_reuser, vm_creator, deployment_plan, logger, instance_deleter, max_instance_count) @instance_reuser = instance_reuser @logger = logger @instance_deleter = instance_deleter @max_instance_count = max_instance_count @instance_provider = InstanceProvider.new(deployment_plan, vm_creator, logger) @mutex = Mutex.new end
Public Instance Methods
delete_instances(number_of_workers)
click to toggle source
# File lib/bosh/director/deployment_plan/compilation_instance_pool.rb, line 47 def delete_instances(number_of_workers) ThreadPool.new(:max_threads => number_of_workers).wrap do |pool| @instance_reuser.each do |instance_memo| pool.process do @instance_reuser.remove_instance(instance_memo) instance_plan = DeploymentPlan::InstancePlan.new( existing_instance: instance_memo.instance.model, instance: instance_memo.instance, desired_instance: DeploymentPlan::DesiredInstance.new, network_plans: [] ) destroy_instance(instance_plan) end end end end
with_reused_vm(stemcell) { |instance| ... }
click to toggle source
# File lib/bosh/director/deployment_plan/compilation_instance_pool.rb, line 13 def with_reused_vm(stemcell) begin instance_memo = obtain_instance_memo(stemcell) yield instance_memo.instance release_instance(instance_memo) rescue => e remove_instance(instance_memo) unless instance_memo.instance_plan.nil? if Config.keep_unreachable_vms @logger.info('Keeping reused compilation VM for debugging') else destroy_instance(instance_memo.instance_plan) end end raise e end end
with_single_use_vm(stemcell) { |instance| ... }
click to toggle source
# File lib/bosh/director/deployment_plan/compilation_instance_pool.rb, line 31 def with_single_use_vm(stemcell) begin keep_failing_vm = false instance_memo = InstanceMemo.new(@instance_provider, stemcell) yield instance_memo.instance rescue => e @logger.info('Keeping single-use compilation VM for debugging') keep_failing_vm = Config.keep_unreachable_vms raise e ensure unless instance_memo.instance.nil? || keep_failing_vm destroy_instance(instance_memo.instance_plan) end end end
Private Instance Methods
destroy_instance(instance_plan)
click to toggle source
# File lib/bosh/director/deployment_plan/compilation_instance_pool.rb, line 97 def destroy_instance(instance_plan) @instance_deleter.delete_instance_plan(instance_plan, EventLog::NullStage.new) end
obtain_instance_memo(stemcell)
click to toggle source
# File lib/bosh/director/deployment_plan/compilation_instance_pool.rb, line 78 def obtain_instance_memo(stemcell) instance_memo = nil @mutex.synchronize do instance_memo = @instance_reuser.get_instance(stemcell) if instance_memo.nil? if @instance_reuser.total_instance_count >= @max_instance_count instance_memo = @instance_reuser.remove_idle_instance_not_matching_stemcell(stemcell) destroy_instance(instance_memo.instance_plan) end @logger.debug("Creating new compilation VM for stemcell '#{stemcell.model.desc}'") instance_memo = InstanceMemo.new(@instance_provider, stemcell) @instance_reuser.add_in_use_instance(instance_memo, stemcell) else @logger.info("Reusing compilation VM '#{instance_memo.instance.model.vm_cid}' for stemcell '#{stemcell.model.desc}'") end end return instance_memo end
release_instance(instance_memo)
click to toggle source
# File lib/bosh/director/deployment_plan/compilation_instance_pool.rb, line 72 def release_instance(instance_memo) @mutex.synchronize do @instance_reuser.release_instance(instance_memo) end end
remove_instance(instance_memo)
click to toggle source
# File lib/bosh/director/deployment_plan/compilation_instance_pool.rb, line 66 def remove_instance(instance_memo) @mutex.synchronize do @instance_reuser.remove_instance(instance_memo) end end