manageiq: SystemStackError (infinite loop) with check_compliance
How to reproduce:
- Create a compliance policy with an action of check_compliance.
- Assign that policy to a VM
- Run check_compliance on that VM (can be done in Rails console or via a schedule or anything)
What happens:
MIQ(MiqGenericWorker::Runner#get_message_via_drb) Message id: [10000103363811], MiqWorker id: [10000000112678], Zone: [default], Role: [], Server: [], MiqTask id: [], Ident: [generic], Target id: [], Instance id: [], Task id: [], Command: [Compliance.check_compliance], Timeout: [600], Priority: [100], State: [dequeue], Deliver On: [], Data: [], Args: [["ManageIQ::Providers::Azure::CloudManager::Vm", 10000000000662], {}], Dequeued in: [48.478148] seconds
[----] I, [2020-07-31T14:01:03.133868 #17037:3fd068432010] INFO -- : MIQ(MiqQueue#deliver) Message id: [10000103363811], Delivering...
[----] I, [2020-07-31T14:01:03.145557 #16073:3ff862432020] INFO -- : MIQ(Compliance.check_compliance) Checking compliance...
** THOUSANDS OF THESE "Checking compliance..." LINES **
[----] I, [2020-07-31T14:01:37.260131 #17037:3fd068432010] INFO -- : MIQ(Compliance.check_compliance) Checking compliance...
[----] I, [2020-07-31T14:01:37.283983 #17037:3fd068432010] INFO -- : Deleting worker record for MiqGenericWorker, id 10000000112678
/Users/jfrey/.gem/ruby/2.6.5/gems/arel-9.0.0/lib/arel/visitors/to_sql.rb:809:in `quote_column_name': stack level too deep (SystemStackError)
from /Users/jfrey/.gem/ruby/2.6.5/gems/arel-9.0.0/lib/arel/visitors/to_sql.rb:729:in `visit_Arel_Attributes_Attribute'
from /Users/jfrey/.gem/ruby/2.6.5/gems/arel-9.0.0/lib/arel/visitors/reduce.rb:15:in `visit'
from /Users/jfrey/.gem/ruby/2.6.5/gems/arel-9.0.0/lib/arel/visitors/to_sql.rb:664:in `visit_Arel_Nodes_Equality'
from /Users/jfrey/.gem/ruby/2.6.5/gems/arel-9.0.0/lib/arel/visitors/reduce.rb:15:in `visit'
from /Users/jfrey/.gem/ruby/2.6.5/gems/arel-9.0.0/lib/arel/visitors/to_sql.rb:822:in `block in inject_join'
from /Users/jfrey/.gem/ruby/2.6.5/gems/arel-9.0.0/lib/arel/visitors/to_sql.rb:820:in `each'
from /Users/jfrey/.gem/ruby/2.6.5/gems/arel-9.0.0/lib/arel/visitors/to_sql.rb:820:in `each_with_index'
from /Users/jfrey/.gem/ruby/2.6.5/gems/arel-9.0.0/lib/arel/visitors/to_sql.rb:820:in `each'
... 8524 levels...
from /Users/jfrey/dev/manageiq/app/models/miq_worker/runner.rb:253:in `do_work_loop'
from /Users/jfrey/dev/manageiq/app/models/miq_worker/runner.rb:113:in `run'
from /Users/jfrey/dev/manageiq/app/models/miq_worker/runner.rb:95:in `start'
from /Users/jfrey/dev/manageiq/lib/workers/bin/run_single_worker.rb:113:in `<main>'
Code analysis:
Compliance.check_compliance(target) =>
^ MiqPolicy.enforce_policy(target, "vm_compliance_check") =>
| MiqAction.invoke_actions(target) =>
| MiqAction#action_check_compliance ---\
\---------------------------------------/
@gtanzillo Please review
About this issue
- Original URL
- State: closed
- Created 4 years ago
- Comments: 19 (19 by maintainers)
Commits related to this issue
- Add check to action_check_compliance to avoid infinite loop. Fixes https://github.com/ManageIQ/manageiq/issues/20405 — committed to lfu/manageiq by lfu 4 years ago
- Add helper method MiqAction.allowed_for_policies. https://github.com/ManageIQ/manageiq/issues/20405 — committed to lfu/manageiq by lfu 4 years ago
- Add check to action_check_compliance to avoid infinite loop. Fixes https://github.com/ManageIQ/manageiq/issues/20405 — committed to lfu/manageiq by lfu 4 years ago
- Add helper method MiqAction.allowed_for_policies. https://github.com/ManageIQ/manageiq/issues/20405 — committed to lfu/manageiq by lfu 4 years ago
@lfu Please take a look