Skip to content

Commit

Permalink
[miq_provision_virt_workflow.rb] Avoid respond_to?
Browse files Browse the repository at this point in the history
respond_to? calls in mass are slow since they require some object
introspection, where doing a simple `nil` check is much quicker.

By including just the `cloud_tenant_id` in the SELECT clause, it allows
for the swapping of `respond_to?` with an `nil` check, with the
functionality that existed preserved.

Benchmark
---------

**Before**

|     ms | queries | query (ms) |   rows |
|   ---: |    ---: |       ---: |   ---: |
|  28440 |      33 |     1929.5 | 243133 |
|  28491 |      33 |     1933.6 | 243133 |
|  28858 |      33 |     2631.9 | 243133 |

**After**

|     ms | queries | query (ms) |   rows |
|   ---: |    ---: |       ---: |   ---: |
|  27107 |      33 |     1958.5 | 243133 |
|  26803 |      33 |     1944.2 | 243133 |
|  27642 |      33 |     1965.5 | 243133 |
  • Loading branch information
NickLaMuro committed Aug 19, 2019
1 parent 69c94ad commit f83c69f
Showing 1 changed file with 2 additions and 2 deletions.
4 changes: 2 additions & 2 deletions app/models/miq_provision_virt_workflow.rb
Original file line number Diff line number Diff line change
Expand Up @@ -340,7 +340,7 @@ def allowed_templates(options = {})
end

# Only select the colums we need
vms = vms.select(:id, :name, :guid, :uid_ems, :ems_id)
vms = vms.select(:id, :name, :guid, :uid_ems, :ems_id, :cloud_tenant_id)

allowed_templates_list = source_vm_rbac_filter(vms, condition, VM_OR_TEMPLATE_EXTRA_COLS).to_a
@allowed_templates_filter = filter_id
Expand Down Expand Up @@ -1046,7 +1046,7 @@ def create_hash_struct_from_vm_or_template(vm_or_template, options)
:allocated_disk_storage => vm_or_template.allocated_disk_storage,
:v_total_snapshots => vm_or_template.v_total_snapshots,
:evm_object_class => :Vm}
data_hash[:cloud_tenant] = vm_or_template.cloud_tenant if vm_or_template.respond_to?(:cloud_tenant)
data_hash[:cloud_tenant] = vm_or_template.cloud_tenant if vm_or_template.cloud_tenant_id
if vm_or_template.operating_system
data_hash[:operating_system] = MiqHashStruct.new(:product_name => vm_or_template.operating_system.product_name)
end
Expand Down

0 comments on commit f83c69f

Please sign in to comment.