class DockerHelper::Pool
Constants
- DEFAULT_BASENAME
- DEFAULT_SIZE
Attributes
basename[R]
docker[R]
image[RW]
path[RW]
pool[R]
port[RW]
Public Class Methods
new(size = nil, basename = nil, docker = nil) { |self| ... }
click to toggle source
# File lib/docker_helper/pool.rb, line 35 def initialize(size = nil, basename = nil, docker = nil) @docker, @previous_name, @basename = docker ||= DockerHelper.proxy, nil, basename ||= self.class::DEFAULT_BASENAME yield self if block_given? @pool = Array.new(size ||= self.class::DEFAULT_SIZE) { |i| spawn_thread("#{basename}-#{$$}-#{i}") } extend(SinglePool) if size == 1 end
Public Instance Methods
clean(name = @previous_name)
click to toggle source
# File lib/docker_helper/pool.rb, line 59 def clean(name = @previous_name) pool.map { |t| clean_thread(t.value) }.tap { |clean| clean << clean_thread(name) if name }.each(&:join) end
fetch(name = @previous_name)
click to toggle source
# File lib/docker_helper/pool.rb, line 55 def fetch(name = @previous_name) pool.shift.tap { reclaim(name) }.value end
fetch_url(name = @previous_name)
click to toggle source
# File lib/docker_helper/pool.rb, line 51 def fetch_url(name = @previous_name) docker.url(port, @previous_name = fetch(name)) + path.to_s end
inspect()
click to toggle source
# File lib/docker_helper/pool.rb, line 65 def inspect '#<%s:0x%x %s@%d>' % [self.class, object_id, basename, pool.size] end
Private Instance Methods
clean_thread(name)
click to toggle source
# File lib/docker_helper/pool.rb, line 83 def clean_thread(name) Thread.new { docker.clean(name) } end
reclaim(name)
click to toggle source
# File lib/docker_helper/pool.rb, line 87 def reclaim(name) pool << spawn_thread(name, true) if name end
spawn_thread(name, clean = false)
click to toggle source
# File lib/docker_helper/pool.rb, line 73 def spawn_thread(name, clean = false) Thread.new { docker.clean(name) if clean docker.start(name, image) if image docker.ready(docker.port(port, name), path) if port name } end