From ef1b77900937430309ece25cb0ff15ed3e51cad3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christian=20Gonz=C3=A1lez?= Date: Wed, 20 Jan 2021 11:24:41 +0100 Subject: [PATCH] M #: improve error management for one_hm driver (#679) (cherry picked from commit 25a8383b1bf0464cf805f05c2d13e15c90d043c1) --- src/hm_mad/one_hm.rb | 57 +++++++++++++++++++++++++++++++------------- 1 file changed, 41 insertions(+), 16 deletions(-) diff --git a/src/hm_mad/one_hm.rb b/src/hm_mad/one_hm.rb index 1a6cf2fd1b..ea4c03df66 100755 --- a/src/hm_mad/one_hm.rb +++ b/src/hm_mad/one_hm.rb @@ -84,30 +84,38 @@ class HookManagerDriver < OpenNebulaDriver end def action_execute(*arguments) - arg_xml = Nokogiri::XML(Base64.decode64(arguments.flatten[0])) - type = arg_xml.xpath('//HOOK_TYPE').text + begin + arg_xml = Nokogiri::XML(Base64.decode64(arguments.flatten[0])) + type = arg_xml.xpath('//HOOK_TYPE').text - key(type, arg_xml).each do |key| - m_key = "EVENT #{key}" + key(type, arg_xml).each do |key| + m_key = "EVENT #{key}" - # Using envelopes for splitting key/val - # http://zguide.zeromq.org/page:all#Pub-Sub-Message-Envelopes - @publisher.send_string m_key, ZMQ::SNDMORE - @publisher.send_string arguments.flatten[0] + # Using envelopes for splitting key/val + # http://zguide.zeromq.org/page:all#Pub-Sub-Message-Envelopes + send_string(@publisher, m_key, ZMQ::SNDMORE) + send_string(@publisher, arguments.flatten[0]) + end + rescue StandardError => e + log(0, "ERROR: #{e.message}") end end def action_retry(*arguments) - arguments.flatten! + begin + arguments.flatten! - command = arguments[0] - params = arguments[1] + command = arguments[0] + params = arguments[1] - m_key = 'RETRY' - m_val = "#{command} #{params}" + m_key = 'RETRY' + m_val = "#{command} #{params}" - @publisher.send_string m_key, ZMQ::SNDMORE - @publisher.send_string m_val + send_string(@publisher, m_key, ZMQ::SNDMORE) + send_string(@publisher, m_val) + rescue StandardError => e + log(0, "ERROR: #{e.message}") + end end def receiver_thread @@ -133,8 +141,9 @@ class HookManagerDriver < OpenNebulaDriver end #--------------------------------------------------------------------------- - # Helpers to build key and message values + # Helpers #--------------------------------------------------------------------------- + def key(type, xml) case type.to_sym when :API @@ -161,6 +170,22 @@ class HookManagerDriver < OpenNebulaDriver end end + def send_string(socket, content, flag = nil) + rc = 0 + + if flag.nil? + rc = socket.send_string(content) + else + rc = socket.send_string(content, flag) + end + + return unless rc < 0 + + msg = "ERROR: failure sending string: #{ZMQ::Util.error_string}" \ + " (#{ZMQ::Util.errno})" + log(0, msg) + end + end #-------------------------------------------------------------------------------