Bug 1824259

Summary: Error and stack trace from find_class_methods.rb:74:in `get_dir_entries'
Product: Red Hat CloudForms Management Engine Reporter: Peter McGowan <pmcgowan>
Component: SmartState AnalysisAssignee: Jerry Keselman <jkeselma>
Status: CLOSED CURRENTRELEASE QA Contact: Niyaz Akhtar Ansari <nansari>
Severity: urgent Docs Contact: Red Hat CloudForms Documentation <cloudforms-docs>
Priority: high    
Version: 5.11.5CC: akarol, bthurber, dmetzger, nansari, obarenbo, simaishi
Target Milestone: GAKeywords: TestOnly, ZStream
Target Release: 5.11.5Flags: pm-rhel: cfme-5.11.z+
Hardware: Unspecified   
OS: Unspecified   
Whiteboard:
Fixed In Version: 5.11.5.2 Doc Type: If docs needed, set a value
Doc Text:
Story Points: ---
Clone Of: Environment:
Last Closed: 2020-05-06 11:50:07 UTC Type: Bug
Regression: --- Mount Type: ---
Documentation: --- CRM:
Verified Versions: Category: ---
oVirt Team: --- RHEL 7.3 requirements from Atomic Host:
Cloudforms Team: CFME Core Target Upstream Version:
Embargoed:
Bug Depends On:    
Bug Blocks: 1684589, 1805467, 1810194, 1821750, 1821933    

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