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