From 5e7127f9ec13c0ed0e62b9d9150d835ca2a27b72 Mon Sep 17 00:00:00 2001 From: georgy Date: Fri, 27 Jan 2017 08:58:52 +0300 Subject: [PATCH] Fix volatile CPU 'size' The 'size' parameter for CPU returned by lshw is current CPU clock which changes constantly breaking nailgun optimization which expects hw data to not change each time. This also must reduce probability of deadlocks in #1624230. Change-Id: I7d9b5282991b17424d458c2612dfa4eeeb52be48 Partial-Bug: #1624230 --- agent | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/agent b/agent index 0a92601..ac6d3c6 100755 --- a/agent +++ b/agent @@ -1235,6 +1235,23 @@ class NodeAgent res end + def traverse(item, &block) + yield item + if item.is_a?(Hash) + item.each { |k,v| traverse(v, &block) } + elsif item.is_a?(Array) + item.each { |elem| traverse(elem, &block) } + end + end + + #todo: move all quirks here + def fixup(data) + traverse(data) do |item| + # size for CPU means current clock frequency which constantly changes + item.delete(:size) if item.is_a?(Hash) and item.fetch(:class, nil) == 'processor' + end + end + def _get_pci_dev_list return {} if `cat /etc/nailgun_systemtype`.chomp != 'bootstrap' lshw_timeout = @settings['lshw_timeout'] || 60 @@ -1242,7 +1259,7 @@ class NodeAgent lshw_path = `which lshw`.chomp if $?.success? data = `#{lshw_path} -json -sanitize` - return JSON.parse(data) if $?.success? + return fixup(JSON.parse(data)) if $?.success? @logger.warn("Can't get data from lshw. Reason: lshw exited with status #{$?.exitstatus}") else @logger.warn("Can't find lshw. Reason: 'which lshw' returned exit status #{$?.exitstatus}")