Bug 1824259 - Error and stack trace from find_class_methods.rb:74:in `get_dir_entries'
Summary: Error and stack trace from find_class_methods.rb:74:in `get_dir_entries'
Keywords:
Status: CLOSED CURRENTRELEASE
Alias: None
Product: Red Hat CloudForms Management Engine
Classification: Red Hat
Component: SmartState Analysis
Version: 5.11.5
Hardware: Unspecified
OS: Unspecified
high
urgent
Target Milestone: GA
: 5.11.5
Assignee: Jerry Keselman
QA Contact: Niyaz Akhtar Ansari
Red Hat CloudForms Documentation
URL:
Whiteboard:
: 1825148 1825225 (view as bug list)
Depends On:
Blocks: 1684589 1805467 1810194 1821750 1821933
TreeView+ depends on / blocked
 
Reported: 2020-04-15 16:24 UTC by Peter McGowan
Modified: 2020-07-14 07:00 UTC (History)
6 users (show)

Fixed In Version: 5.11.5.2
Doc Type: If docs needed, set a value
Doc Text:
Clone Of:
Environment:
Last Closed: 2020-05-06 11:50:07 UTC
Category: ---
Cloudforms Team: CFME Core
Target Upstream Version:
Embargoed:
pm-rhel: cfme-5.11.z+


Attachments (Terms of Use)

Description Peter McGowan 2020-04-15 16:24:56 UTC
Description of problem:
When performing the "Scanning [Profile-Files] information" stage of a SmartState Analysis, a stack trace is seen in evm.log, as follows: 

[----] E, [2020-04-15T12:04:44.691853 #5584:2abf39d245c4] ERROR -- : Q-task_id([job_dispatcher]) process_each_glob_file: Exception undefined method `difference' for #<Array:0x0000557e87f6e608> rescued
[----] D, [2020-04-15T12:04:44.692014 #5584:2abf39d245c4] DEBUG -- : Q-task_id([job_dispatcher]) /opt/rh/cfme-gemset/gems/manageiq-smartstate-0.3.7/lib/metadata/util/find_class_methods.rb:74:in `get_dir_entries'
/opt/rh/cfme-gemset/gems/manageiq-smartstate-0.3.7/lib/metadata/util/find_class_methods.rb:62:in `find'
/opt/rh/cfme-gemset/gems/manageiq-smartstate-0.3.7/lib/metadata/util/find_class_methods.rb:17:in `glob'
/opt/rh/cfme-gemset/gems/manageiq-smartstate-0.3.7/lib/metadata/util/md5deep.rb:74:in `process_each_glob_file'
/opt/rh/cfme-gemset/gems/manageiq-smartstate-0.3.7/lib/metadata/util/md5deep.rb:68:in `scan_glob'
/opt/rh/cfme-gemset/gems/manageiq-smartstate-0.3.7/lib/metadata/util/md5deep.rb:52:in `scan_glob'
/opt/rh/cfme-gemset/gems/manageiq-smartstate-0.3.7/lib/metadata/ScanProfile/modules/VmScanItemFile.rb:32:in `block in parse_data'
/opt/rh/cfme-gemset/gems/manageiq-smartstate-0.3.7/lib/metadata/ScanProfile/modules/VmScanItemFile.rb:27:in `each'
/opt/rh/cfme-gemset/gems/manageiq-smartstate-0.3.7/lib/metadata/ScanProfile/modules/VmScanItemFile.rb:27:in `parse_data'
/opt/rh/cfme-gemset/gems/manageiq-smartstate-0.3.7/lib/metadata/ScanProfile/ScanProfilesBase.rb:43:in `block in parse_data'
/opt/rh/cfme-gemset/gems/manageiq-smartstate-0.3.7/lib/metadata/ScanProfile/ScanProfileBase.rb:30:in `block in each_scan_item'
/opt/rh/cfme-gemset/gems/manageiq-smartstate-0.3.7/lib/metadata/ScanProfile/ScanProfileBase.rb:30:in `each'
/opt/rh/cfme-gemset/gems/manageiq-smartstate-0.3.7/lib/metadata/ScanProfile/ScanProfileBase.rb:30:in `each_scan_item'
/opt/rh/cfme-gemset/gems/manageiq-smartstate-0.3.7/lib/metadata/ScanProfile/ScanProfilesBase.rb:39:in `block in each_scan_item'
/opt/rh/cfme-gemset/gems/manageiq-smartstate-0.3.7/lib/metadata/ScanProfile/ScanProfilesBase.rb:39:in `each'
/opt/rh/cfme-gemset/gems/manageiq-smartstate-0.3.7/lib/metadata/ScanProfile/ScanProfilesBase.rb:39:in `each_scan_item'
/opt/rh/cfme-gemset/gems/manageiq-smartstate-0.3.7/lib/metadata/ScanProfile/ScanProfilesBase.rb:43:in `parse_data'
/opt/rh/cfme-gemset/gems/manageiq-smartstate-0.3.7/lib/metadata/MIQExtract/MIQExtract.rb:123:in `getProfileData'
/opt/rh/cfme-gemset/gems/manageiq-smartstate-0.3.7/lib/metadata/MIQExtract/MIQExtract.rb:141:in `block in extract'
/opt/rh/cfme-gemset/gems/manageiq-smartstate-0.3.7/lib/metadata/MIQExtract/MIQExtract.rb:130:in `each'
/opt/rh/cfme-gemset/gems/manageiq-smartstate-0.3.7/lib/metadata/MIQExtract/MIQExtract.rb:130:in `extract'
/var/www/miq/vmdb/app/models/mixins/scanning_mixin.rb:252:in `block in scan_via_miq_vm'
/var/www/miq/vmdb/app/models/mixins/scanning_mixin.rb:248:in `each'
/var/www/miq/vmdb/app/models/mixins/scanning_mixin.rb:248:in `scan_via_miq_vm'
/opt/rh/cfme-gemset/bundler/gems/cfme-providers-vmware-d03136548933/app/models/manageiq/providers/vmware/infra_manager/vm_or_template_shared/scanning.rb:29:in `perform_metadata_scan'
/var/www/miq/vmdb/app/models/miq_server/server_smart_proxy.rb:125:in `scan_metadata'
/var/www/miq/vmdb/app/models/miq_queue.rb:479:in `block in dispatch_method'
/usr/share/ruby/timeout.rb:93:in `block in timeout'
/usr/share/ruby/timeout.rb:33:in `block in catch'
/usr/share/ruby/timeout.rb:33:in `catch'
/usr/share/ruby/timeout.rb:33:in `catch'
/usr/share/ruby/timeout.rb:108:in `timeout'
/var/www/miq/vmdb/app/models/miq_queue.rb:477:in `dispatch_method'
/var/www/miq/vmdb/app/models/miq_queue.rb:454:in `block in deliver'
/var/www/miq/vmdb/app/models/user.rb:290:in `with_user_group'
/var/www/miq/vmdb/app/models/miq_queue.rb:454:in `deliver'
/var/www/miq/vmdb/app/models/miq_queue_worker_base/runner.rb:104:in `deliver_queue_message'
/var/www/miq/vmdb/app/models/miq_queue_worker_base/runner.rb:137:in `deliver_message'
/var/www/miq/vmdb/app/models/miq_queue_worker_base/runner.rb:155:in `block in do_work'
/var/www/miq/vmdb/app/models/miq_queue_worker_base/runner.rb:149:in `loop'
/var/www/miq/vmdb/app/models/miq_queue_worker_base/runner.rb:149:in `do_work'
/var/www/miq/vmdb/app/models/miq_smart_proxy_worker/runner.rb:71:in `do_work'
/var/www/miq/vmdb/app/models/miq_worker/runner.rb:329:in `block in do_work_loop'
/var/www/miq/vmdb/app/models/miq_worker/runner.rb:326:in `loop'
/var/www/miq/vmdb/app/models/miq_worker/runner.rb:326:in `do_work_loop'
/var/www/miq/vmdb/app/models/miq_worker/runner.rb:153:in `run'
/var/www/miq/vmdb/app/models/miq_worker/runner.rb:127:in `start'
/var/www/miq/vmdb/app/models/miq_worker/runner.rb:22:in `start_worker'
/var/www/miq/vmdb/app/models/miq_worker.rb:398:in `block in start_runner_via_fork'
/opt/rh/cfme-gemset/gems/nakayoshi_fork-0.0.4/lib/nakayoshi_fork.rb:23:in `fork'
/opt/rh/cfme-gemset/gems/nakayoshi_fork-0.0.4/lib/nakayoshi_fork.rb:23:in `fork'
/var/www/miq/vmdb/app/models/miq_worker.rb:396:in `start_runner_via_fork'
/var/www/miq/vmdb/app/models/miq_worker.rb:386:in `start_runner'
/var/www/miq/vmdb/app/models/miq_worker.rb:437:in `start'
/var/www/miq/vmdb/app/models/miq_worker.rb:269:in `start_worker'
/var/www/miq/vmdb/app/models/miq_worker.rb:147:in `block in sync_workers'
/var/www/miq/vmdb/app/models/miq_worker.rb:147:in `times'
/var/www/miq/vmdb/app/models/miq_worker.rb:147:in `sync_workers'
/var/www/miq/vmdb/app/models/miq_server/worker_management/monitor.rb:54:in `block in sync_workers'
/var/www/miq/vmdb/app/models/miq_server/worker_management/monitor.rb:50:in `each'
/var/www/miq/vmdb/app/models/miq_server/worker_management/monitor.rb:50:in `sync_workers'
/var/www/miq/vmdb/app/models/miq_server.rb:156:in `start'
/var/www/miq/vmdb/app/models/miq_server.rb:247:in `start'
/var/www/miq/vmdb/lib/workers/evm_server.rb:27:in `start'
/var/www/miq/vmdb/lib/workers/evm_server.rb:48:in `start'
/var/www/miq/vmdb/lib/workers/bin/evm_server.rb:4:in `<main>'


Version-Release number of selected component (if applicable):
5.11.5.0

How reproducible:
Every time


Steps to Reproduce:
1. Perform a SmartState Analysis of a small VM
2. Examine evm.log for the stack trace

Actual results:
See the stack trace and error

Expected results:
No error

Additional info:

This seems to be related to the new glob processing in a directory path. If I add an entry '/home/*/.bash_profile' to the analysis profile, I see a similar stack trace that shows that the directories /home/{nags,pemcg,sjames} have been discovered, i.e.

[----] I, [2020-04-15T11:58:28.280355 #5584:2abf39d245c4]  INFO -- : Q-task_id([job_dispatcher]) Directory '/home/*' not found
[----] E, [2020-04-15T11:58:28.283845 #5584:2abf39d245c4] ERROR -- : Q-task_id([job_dispatcher]) process_each_glob_file: Exception undefined method `difference' for [".", "..", "nagios", "pemcg", "sjames"]:Array rescued
[----] D, [2020-04-15T11:58:28.284013 #5584:2abf39d245c4] DEBUG -- : Q-task_id([job_dispatcher]) /opt/rh/cfme-gemset/gems/manageiq-smartstate-0.3.7/lib/metadata/util/find_class_methods.rb:74:in `get_dir_entries'
...

Comment 3 Jerry Keselman 2020-04-16 14:11:00 UTC
Array#difference is a new Ruby 2.6 construct that is a synonym for Array#-, but does not exist on Ruby 2.5.
Replacing with Array#-.

Comment 4 Jerry Keselman 2020-04-16 15:27:48 UTC
PR https://github.com/ManageIQ/manageiq-smartstate/pull/121 addresses this issue.

Comment 5 Jerry Keselman 2020-04-17 17:41:26 UTC
*** Bug 1825225 has been marked as a duplicate of this bug. ***

Comment 6 Jerry Keselman 2020-04-21 12:53:24 UTC
*** Bug 1825148 has been marked as a duplicate of this bug. ***

Comment 7 dmetzger 2020-04-21 19:03:42 UTC
Also requires PR https://github.com/ManageIQ/manageiq-smartstate/pull/122

Comment 8 Satoe Imaishi 2020-04-22 14:51:16 UTC
Ivanchuk PR to bump manageiq-smartstate gem version: https://github.com/ManageIQ/manageiq/pull/20090


Note You need to log in before you can comment on or make changes to this bug.