Project

General

Profile

Actions

Bug #17553

closed

Rails CI shows infinite loop of method_missing since f4ce78d5c139a8825ee2d09f39aef03ef762dfc6

Bug #17553: Rails CI shows infinite loop of method_missing since f4ce78d5c139a8825ee2d09f39aef03ef762dfc6

Added by yahonda (Yasuo Honda) almost 5 years ago. Updated over 4 years ago.

Status:
Closed
Target version:
-
ruby -v:
ruby 3.1.0dev (2021-01-14T00:06:39Z master f4ce78d5c1) [x86_64-linux]
[ruby-core:102136]

Description

Steps to reproduce

git clone https://github.com/rails/rails.git cd rails/activerecord bundle install bin/test test/cases/relations_test.rb test/cases/callbacks_test.rb test/cases/finder_test.rb -n "/^(?:RelationTest#(?:test_dynamic_find er)|CallbacksTest#(?:test_before_destroy_throwing_abort)|FinderTest#(?:test_find_by_id_with_hash))$/" --seed 64098 

Expected results

It should pass.

Actual Results

:0 Using sqlite3 Run options: -n "/^(?:RelationTest#(?:test_dynamic_finder)|CallbacksTest#(?:test_before_destroy_throwing_abort)|FinderTest#(?:test_find_by_id_with_hash))$/" --seed 64098 # Running: ..E Error: FinderTest#test_find_by_id_with_hash: SystemStackError: stack level too deep /home/yahonda/src/github.com/rails/rails/activerecord/lib/active_record/dynamic_matchers.rb:33:in `block in match' /home/yahonda/src/github.com/rails/rails/activerecord/lib/active_record/dynamic_matchers.rb:33:in `each' /home/yahonda/src/github.com/rails/rails/activerecord/lib/active_record/dynamic_matchers.rb:33:in `find' /home/yahonda/src/github.com/rails/rails/activerecord/lib/active_record/dynamic_matchers.rb:33:in `match' /home/yahonda/src/github.com/rails/rails/activerecord/lib/active_record/dynamic_matchers.rb:16:in `method_missing' ... repeat about 8700 times ... /home/yahonda/src/github.com/rails/rails/activerecord/lib/active_record/dynamic_matchers.rb:20:in `method_missing' /home/yahonda/src/github.com/rails/rails/activerecord/test/cases/finder_test.rb:33:in `block in test_find_by_id_with_hash' /home/yahonda/src/github.com/rails/rails/activesupport/lib/active_support/testing/assertions.rb:34:in `assert_nothing_raised' /home/yahonda/src/github.com/rails/rails/activerecord/test/cases/finder_test.rb:32:in `test_find_by_id_with_hash' bin/test test/cases/finder_test.rb:31 Finished in 0.203552s, 14.7383 runs/s, 39.3020 assertions/s. 3 runs, 8 assertions, 0 failures, 1 errors, 0 skips 

Updated by ko1 (Koichi Sasada) over 4 years ago Actions #1 [ruby-core:102516]

  • Status changed from Open to Assigned
  • Assignee set to ko1 (Koichi Sasada)

Updated by yahonda (Yasuo Honda) over 4 years ago Actions #2

The steps to reproduce provided does not reproduce the error anymore with "minitest-5.14.2 requires ruby version >= 2.2, < 3.1, which is incompatible with the current version, ruby 3.1.0p-1" message. This message itself is Rails matter then let me provide another steps to reproduce.

git clone https://github.com/rails/rails.git cd rails/activerecord bundle update bin/test test/cases/finder_respond_to_test.rb test/cases/finder_test.rb -n "/^(?:FinderRespondToTest#(?:test_should_respond_to_find_by_with_bang)|FinderTest#(?:test_find_by_one_attribute_bang_with_blank_defined|test_find_by_one_attribute_bang))$/" --seed 18085 

Updated by ko1 (Koichi Sasada) over 4 years ago Actions #3

Thank you!

The small repro-script:

 c0 = Class.new{} c1 = Class.new(c0){} c0.new.foo rescue nil c1.new.foo rescue nil c1.module_eval{ def foo = :c1 } c0.module_eval{ def foo = :c0 } c0.new.foo # should return :c0, but raise 

patch: https://github.com/ruby/ruby/pull/4201

Updated by ko1 (Koichi Sasada) over 4 years ago Actions #4

  • Status changed from Assigned to Closed

Applied in changeset git|9c769575bfa2a5c9e7078eb2840bba640dc46077.


invalidate negative cache any time.

negative cache on a class which does not have subclasses was not
invalidated, but it should be invalidated because other classes
can cache this negative cache.
[Bug #17553]

Updated by yahonda (Yasuo Honda) over 4 years ago Actions #5

Thanks for the fix. I also have confirmed this issue has been fixed.

$ ruby -v ruby 3.1.0dev (2021-02-19T08:27:53Z master a319c04818) [x86_64-linux] $ bin/test test/cases/finder_respond_to_test.rb test/cases/finder_test.rb -n "/^(?:FinderRespondToTest#(?:test_should_respond_to_find_by_with_bang)|FinderTest#(?:test_find_by_one_attribute_bang_with_blank_defined|test_find_by_one_attribute_bang))$/" --seed 18085 Using sqlite3 Run options: -n "/^(?:FinderRespondToTest#(?:test_should_respond_to_find_by_with_bang)|FinderTest#(?:test_find_by_one_attribute_bang_with_blank_defined|test_find_by_one_attribute_bang))$/" --seed 18085 # Running: ... Finished in 0.047764s, 62.8084 runs/s, 125.6168 assertions/s. 3 runs, 6 assertions, 0 failures, 0 errors, 0 skips $ 
Actions

Also available in: PDF Atom