diff options
-rw-r--r-- | Gemfile.lock | 2 | ||||
-rw-r--r-- | lib/oxidized/nodes.rb | 88 | ||||
-rw-r--r-- | oxidized.gemspec | 2 |
3 files changed, 48 insertions, 44 deletions
diff --git a/Gemfile.lock b/Gemfile.lock index c467382..883b2a5 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -1,7 +1,7 @@ PATH remote: . specs: - oxidized (0.0.22) + oxidized (0.0.23) grit haml net-ssh diff --git a/lib/oxidized/nodes.rb b/lib/oxidized/nodes.rb index 981e082..a6aa2f9 100644 --- a/lib/oxidized/nodes.rb +++ b/lib/oxidized/nodes.rb @@ -5,70 +5,70 @@ module Oxidized class Nodes < Array attr_accessor :source alias :put :unshift - def initialize *args - super - @mutex= Mutex.new # we compete for the nodes with webapi thread - load if args.empty? - end def load - lock - new = [] - @source = CFG.source[:default] - Oxidized.mgr.source = @source - Oxidized.mgr.source[@source].new.load.each do |node| - new.push Node.new node + with_lock do + new = [] + @source = CFG.source[:default] + Oxidized.mgr.source = @source + Oxidized.mgr.source[@source].new.load.each do |node| + new.push Node.new node + end + replace new end - unlock(replace new) end + def list - lock - unlock(map { |e| e.serialize }) + with_lock do + map { |e| e.serialize } + end end + def show node - lock - i = find_node_index node - unlock(self[i].serialize) + with_lock do + i = find_node_index node + self[i].serialize + end end + def fetch node, group - lock - i = find_node_index node - output = self[i].output.new - unlock - raise Oxidized::NotSupported unless output.respond_to? :fetch - output.fetch node, group - end - def del node - lock - unlock(delete_at find_node_index(node)) + with_lock do + i = find_node_index node + output = self[i].output.new + raise Oxidized::NotSupported unless output.respond_to? :fetch + output.fetch node, group + end end + # @param node [String] name of the node moved into the head of array def next node, opt={} - lock - n = del node - if n - n.user = opt['user'] - n.msg = opt['msg'] - n.from = opt['from'] - put n + with_lock do + n = del node + if n + n.user = opt['user'] + n.msg = opt['msg'] + n.from = opt['from'] + put n + end end - unlock end alias :top :next # @return [String] node from the head of the array def get - lock - unlock((self << shift).last) + with_lock do + (self << shift).last + end end private - def lock - @mutex.lock unless @mutex.owned? + def initialize *args + super + @mutex= Mutex.new # we compete for the nodes with webapi thread + load if args.empty? end - def unlock arg=nil - @mutex.unlock if @mutex.owned? - arg + def with_lock &block + @mutex.synchronize(&block) end def find_index node @@ -78,5 +78,9 @@ module Oxidized def find_node_index node find_index node or raise Oxidized::NodeNotFound, "unable to find '#{node}'" end + + def del node + delete_at find_node_index(node) + end end end diff --git a/oxidized.gemspec b/oxidized.gemspec index ff3ebe5..63de5c0 100644 --- a/oxidized.gemspec +++ b/oxidized.gemspec @@ -1,6 +1,6 @@ Gem::Specification.new do |s| s.name = 'oxidized' - s.version = '0.0.22' + s.version = '0.0.23' s.platform = Gem::Platform::RUBY s.authors = [ 'Saku Ytti' ] s.email = %w( saku@ytti.fi ) |