Skip to content

Commit

Permalink
Removed exclusive threading
Browse files Browse the repository at this point in the history
I've experienced regular facter freezes on puppet apply.
Tracing back the freezes showed that they were produced by exclusive threads.
After I've removed the exclusive thread wrapper the facter stopped freezing.

(FYI those were introduced by c2aa508)

Note: there is a similar code in facter/processor.rb for Windows. I've left
that intact as I don't quite understand the ways Windows works.
  • Loading branch information
Timur Batyrshin committed Feb 20, 2012
1 parent 6a59c77 commit 9ff4453
Show file tree
Hide file tree
Showing 2 changed files with 46 additions and 60 deletions.
22 changes: 9 additions & 13 deletions lib/facter/util/memory.rb
Expand Up @@ -3,23 +3,19 @@
##

module Facter::Memory
require 'thread'

def self.meminfo_number(tag)
memsize = ""
Thread::exclusive do
size, scale = [0, ""]
File.readlines("/proc/meminfo").each do |l|
size, scale = [$1.to_f, $2] if l =~ /^#{tag}:\s+(\d+)\s+(\S+)/
# MemoryFree == memfree + cached + buffers
# (assume scales are all the same as memfree)
if tag == "MemFree" &&
l =~ /^(?:Buffers|Cached):\s+(\d+)\s+(?:\S+)/
size += $1.to_f
end
size, scale = [0, ""]
File.readlines("/proc/meminfo").each do |l|
size, scale = [$1.to_f, $2] if l =~ /^#{tag}:\s+(\d+)\s+(\S+)/
# MemoryFree == memfree + cached + buffers
# (assume scales are all the same as memfree)
if tag == "MemFree" &&
l =~ /^(?:Buffers|Cached):\s+(\d+)\s+(?:\S+)/
size += $1.to_f
end
memsize = scale_number(size, scale)
end
memsize = scale_number(size, scale)

memsize
end
Expand Down
84 changes: 37 additions & 47 deletions lib/facter/util/processor.rb
Expand Up @@ -8,55 +8,47 @@ def self.enum_cpuinfo
model = Facter.value(:architecture)
case model
when "x86_64", "amd64", "i386", /parisc/, "hppa", "ia64"
Thread::exclusive do
File.readlines(cpuinfo).each do |l|
if l =~ /processor\s+:\s+(\d+)/
processor_num = $1.to_i
elsif l =~ /model name\s+:\s+(.*)\s*$/
processor_list[processor_num] = $1 unless processor_num == -1
processor_num = -1
elsif l =~ /processor\s+(\d+):\s+(.*)/
processor_num = $1.to_i
processor_list[processor_num] = $2 unless processor_num == -1
end
File.readlines(cpuinfo).each do |l|
if l =~ /processor\s+:\s+(\d+)/
processor_num = $1.to_i
elsif l =~ /model name\s+:\s+(.*)\s*$/
processor_list[processor_num] = $1 unless processor_num == -1
processor_num = -1
elsif l =~ /processor\s+(\d+):\s+(.*)/
processor_num = $1.to_i
processor_list[processor_num] = $2 unless processor_num == -1
end
end

when "ppc64"
Thread::exclusive do
File.readlines(cpuinfo).each do |l|
if l =~ /processor\s+:\s+(\d+)/
processor_num = $1.to_i
elsif l =~ /cpu\s+:\s+(.*)\s*$/
processor_list[processor_num] = $1 unless processor_num == -1
processor_num = -1
end
File.readlines(cpuinfo).each do |l|
if l =~ /processor\s+:\s+(\d+)/
processor_num = $1.to_i
elsif l =~ /cpu\s+:\s+(.*)\s*$/
processor_list[processor_num] = $1 unless processor_num == -1
processor_num = -1
end
end

when /arm/
Thread::exclusive do
File.readlines(cpuinfo).each do |l|
if l =~ /Processor\s+:\s+(.+)/
File.readlines(cpuinfo).each do |l|
if l =~ /Processor\s+:\s+(.+)/
processor_num += 1
processor_list[processor_num] = $1.chomp
elsif l =~ /processor\s+:\s+(\d+)\s*$/
proc_num = $1.to_i
if proc_num != 0
processor_num += 1
processor_list[processor_num] = $1.chomp
elsif l =~ /processor\s+:\s+(\d+)\s*$/
proc_num = $1.to_i
if proc_num != 0
processor_num += 1
processor_list[processor_num] = processor_list[processor_num-1]
end
processor_list[processor_num] = processor_list[processor_num-1]
end
end
end

when /sparc/
Thread::exclusive do
File.readlines(cpuinfo).each do |l|
if l =~ /cpu\s+:\s+(.*)\s*$/
processor_num += 1
processor_list[processor_num] = $1
end
File.readlines(cpuinfo).each do |l|
if l =~ /cpu\s+:\s+(.*)\s*$/
processor_num += 1
processor_list[processor_num] = $1
end
end
end
Expand All @@ -67,18 +59,16 @@ def self.enum_cpuinfo
def self.enum_lsdev
processor_num = -1
processor_list = {}
Thread::exclusive do
procs = Facter::Util::Resolution.exec('lsdev -Cc processor')
if procs
procs.each_line do |proc|
if proc =~ /^proc(\d+)/
processor_num = $1.to_i
# Not retrieving the frequency since AIX 4.3.3 doesn't support the
# attribute and some people still use the OS.
proctype = Facter::Util::Resolution.exec('lsattr -El proc0 -a type')
if proctype =~ /^type\s+(\S+)\s+/
processor_list[processor_num] = $1
end
procs = Facter::Util::Resolution.exec('lsdev -Cc processor')
if procs
procs.each_line do |proc|
if proc =~ /^proc(\d+)/
processor_num = $1.to_i
# Not retrieving the frequency since AIX 4.3.3 doesn't support the
# attribute and some people still use the OS.
proctype = Facter::Util::Resolution.exec('lsattr -El proc0 -a type')
if proctype =~ /^type\s+(\S+)\s+/
processor_list[processor_num] = $1
end
end
end
Expand Down

0 comments on commit 9ff4453

Please sign in to comment.