From 91a8831912ce0fe17c1f1532dd49d98468951daf Mon Sep 17 00:00:00 2001 From: Jaime Melis Date: Mon, 17 Jul 2017 17:06:20 +0200 Subject: [PATCH] F #4913: Speed up monitorization --- src/vmm_mad/remotes/lib/vcenter_driver/host.rb | 10 ++++++++-- .../remotes/lib/vcenter_driver/vi_helper.rb | 14 +++++++------- .../remotes/lib/vcenter_driver/virtual_machine.rb | 12 +++++++++--- 3 files changed, 24 insertions(+), 12 deletions(-) diff --git a/src/vmm_mad/remotes/lib/vcenter_driver/host.rb b/src/vmm_mad/remotes/lib/vcenter_driver/host.rb index cc908f075a..0e6fd1e1a0 100644 --- a/src/vmm_mad/remotes/lib/vcenter_driver/host.rb +++ b/src/vmm_mad/remotes/lib/vcenter_driver/host.rb @@ -430,6 +430,8 @@ class ClusterComputeResource get_resource_pool_list if !@rp_list + vm_pool = VCenterDriver::VIHelper.one_pool(OpenNebula::VirtualMachinePool) + vms.each do |vm_ref,info| begin vm = VCenterDriver::VirtualMachine.new_from_ref(vm_ref, @vi_client) @@ -466,14 +468,18 @@ class ClusterComputeResource one_vm = VCenterDriver::VIHelper.find_by_ref(OpenNebula::VirtualMachinePool, "DEPLOY_ID", vm_ref, - vc_uuid) + vc_uuid, + vm_pool) number = one_vm["ID"] if one_vm end if number != -1 next if @monitored_vms.include? number @monitored_vms << number - vm.one_item if vm.get_vm_id + + if vm.get_vm_id(vm_pool) + vm.one_item + end end vm.monitor(stats) diff --git a/src/vmm_mad/remotes/lib/vcenter_driver/vi_helper.rb b/src/vmm_mad/remotes/lib/vcenter_driver/vi_helper.rb index dbd74715b1..6b2df72546 100644 --- a/src/vmm_mad/remotes/lib/vcenter_driver/vi_helper.rb +++ b/src/vmm_mad/remotes/lib/vcenter_driver/vi_helper.rb @@ -45,7 +45,7 @@ class VIHelper def self.find_by_name(the_class, name, pool = nil, raise_if_fail = true) pool = one_pool(the_class, raise_if_fail) if pool.nil? - element = pool.select{|e| e['NAME'] == "#{name}" }.first rescue nil + element = pool.find{|e| e['NAME'] == "#{name}" } if element.nil? && raise_if_fail raise "Could not find element '#{name}' in pool '#{the_class}'" else @@ -55,28 +55,28 @@ class VIHelper def self.find_by_ref(the_class, attribute, ref, vcenter_uuid, pool = nil) pool = one_pool(the_class, false) if pool.nil? - element = pool.select{|e| + element = pool.find{|e| e["#{attribute}"] == ref && (!e["TEMPLATE/OPENNEBULA_MANAGED"] || e["TEMPLATE/OPENNEBULA_MANAGED"] != "NO") && (e["TEMPLATE/VCENTER_INSTANCE_ID"] == vcenter_uuid || - e["USER_TEMPLATE/VCENTER_INSTANCE_ID"] == vcenter_uuid)}.first rescue nil + e["USER_TEMPLATE/VCENTER_INSTANCE_ID"] == vcenter_uuid)} return element end def self.find_image_by_path(the_class, path, ds_id, pool = nil) pool = one_pool(the_class, false) if pool.nil? - element = pool.select{|e| + element = pool.find{|e| e["PATH"] == path && - e["DATASTORE_ID"] == ds_id}.first rescue nil + e["DATASTORE_ID"] == ds_id} return element end def self.find_persistent_image_by_source(source, pool) - element = pool.select{|e| + element = pool.find{|e| e["SOURCE"] == source && e["PERSISTENT"] == "1" - }.first rescue nil + } return element end diff --git a/src/vmm_mad/remotes/lib/vcenter_driver/virtual_machine.rb b/src/vmm_mad/remotes/lib/vcenter_driver/virtual_machine.rb index 68c370444a..afeae53fb1 100644 --- a/src/vmm_mad/remotes/lib/vcenter_driver/virtual_machine.rb +++ b/src/vmm_mad/remotes/lib/vcenter_driver/virtual_machine.rb @@ -919,7 +919,11 @@ class VirtualMachine < Template end # @return String the vm_id stored in vCenter - def get_vm_id + def get_vm_id(vm_pool = nil) + if defined?(@one_item_id) && @one_item_id + return @one_item_id + end + vm_ref = self['_ref'] return nil if !vm_ref @@ -928,10 +932,12 @@ class VirtualMachine < Template one_vm = VCenterDriver::VIHelper.find_by_ref(OpenNebula::VirtualMachinePool, "DEPLOY_ID", vm_ref, - vc_uuid) + vc_uuid, + vm_pool) return nil if !one_vm - return one_vm["ID"] + @one_item_id = one_vm["ID"] + return @one_item_id end def get_vcenter_instance_uuid