class AppDynamics::NodeIndexPool
Constants
- KEEPALIVE
- MAX_INDEX
Attributes
config[R]
path[R]
Public Class Methods
new(path, config:)
click to toggle source
# File lib/app_dynamics/node_index_pool.rb, line 14 def initialize(path, config:) @path = path @config = config end
Public Instance Methods
exit()
click to toggle source
# File lib/app_dynamics/node_index_pool.rb, line 23 def exit debug "Exiting index pool; index=#{@index}" @thread&.kill if @index FileUtils.rm_f(path_for_nodeindex(index)) @index = nil end end
index()
click to toggle source
# File lib/app_dynamics/node_index_pool.rb, line 19 def index @index ||= fetch_index end
Private Instance Methods
fetch_index()
click to toggle source
NOTE: This may be susceptible to race conditions
# File lib/app_dynamics/node_index_pool.rb, line 57 def fetch_index index = nil FileUtils.mkdir_p(path) Lockfile.new(File.expand_path("lock", path)) do if (index = next_index(MAX_INDEX)) touch_index(index) else raise "Unable to get node index" end end keepalive(index) index end
keepalive(index)
click to toggle source
# File lib/app_dynamics/node_index_pool.rb, line 47 def keepalive(index) @thread = Thread.new do loop do touch_index(index) sleep KEEPALIVE end end end
next_index(max)
click to toggle source
# File lib/app_dynamics/node_index_pool.rb, line 34 def next_index(max) (1..max).find do |i| file = path_for_nodeindex(i) !File.exist?(file) || File.mtime(file) < Time.now - (KEEPALIVE * 2) end end
path_for_nodeindex(index)
click to toggle source
# File lib/app_dynamics/node_index_pool.rb, line 71 def path_for_nodeindex(index) File.expand_path("#{index}.nodeindex", path) end
touch_index(index)
click to toggle source
# File lib/app_dynamics/node_index_pool.rb, line 41 def touch_index(index) path = path_for_nodeindex(index) debug "Touching #{path}" FileUtils.touch(path) end