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 35 def initialize(size = nil, basename = nil, docker = nil) 36 @docker, @previous_name, @basename = 37 docker ||= DockerHelper.proxy, nil, 38 basename ||= self.class::DEFAULT_BASENAME 39 40 yield self if block_given? 41 42 @pool = Array.new(size ||= self.class::DEFAULT_SIZE) { |i| 43 spawn_thread("#{basename}-#{$$}-#{i}") 44 } 45 46 extend(SinglePool) if size == 1 47 end
Public Instance Methods
clean(name = @previous_name)
click to toggle source
# File lib/docker_helper/pool.rb 59 def clean(name = @previous_name) 60 pool.map { |t| clean_thread(t.value) }.tap { |clean| 61 clean << clean_thread(name) if name 62 }.each(&:join) 63 end
fetch(name = @previous_name)
click to toggle source
# File lib/docker_helper/pool.rb 55 def fetch(name = @previous_name) 56 pool.shift.tap { reclaim(name) }.value 57 end
fetch_url(name = @previous_name)
click to toggle source
# File lib/docker_helper/pool.rb 51 def fetch_url(name = @previous_name) 52 docker.url(port, @previous_name = fetch(name)) + path.to_s 53 end
inspect()
click to toggle source
# File lib/docker_helper/pool.rb 65 def inspect 66 '#<%s:0x%x %s@%d>' % [self.class, object_id, basename, pool.size] 67 end
Private Instance Methods
clean_thread(name)
click to toggle source
# File lib/docker_helper/pool.rb 83 def clean_thread(name) 84 Thread.new { docker.clean(name) } 85 end
reclaim(name)
click to toggle source
# File lib/docker_helper/pool.rb 87 def reclaim(name) 88 pool << spawn_thread(name, true) if name 89 end
spawn_thread(name, clean = false)
click to toggle source
# File lib/docker_helper/pool.rb 73 def spawn_thread(name, clean = false) 74 Thread.new { 75 docker.clean(name) if clean 76 docker.start(name, image) if image 77 docker.ready(docker.port(port, name), path) if port 78 79 name 80 } 81 end