Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Investigate stalled tests on Ruby 3.1 #3543

Closed
wants to merge 4 commits into from

Conversation

ashie
Copy link
Member

@ashie ashie commented Nov 1, 2021

Signed-off-by: Takuro Ashie ashie@clear-code.com

Which issue(s) this PR fixes:
Fixes #

What this PR does / why we need it:

Docs Changes:

Release Note:

@ashie
Copy link
Member Author

ashie commented Nov 2, 2021

CI is timed out here on both Ubuntu & macOS:

BufferedOutputSecondaryTest: 
  secondary plugin feature for buffered output with exponential backoff: 
    test: exponential backoff interval will be initialized when switched to secondary:	.: (12.035936)
Error: The operation was canceled.

@ashie
Copy link
Member Author

ashie commented Nov 2, 2021

And succeded case:

2021-11-01T09:29:13.2415194Z BufferedOutputSecondaryTest: 
2021-11-01T09:29:13.2416203Z   secondary plugin feature for buffered output with exponential backoff: 
2021-11-01T09:29:25.2740973Z     test: exponential backoff interval will be initialized when switched to secondary:	.: (12.032247)
2021-11-01T09:29:33.4177822Z     test: primary plugin will emit event streams to secondary after retries for time of retry_timeout * retry_secondary_threshold:	.: (8.143558)
...

Probably it's stalled in test: primary plugin will emit event streams to secondary after retries for time of retry_timeout * retry_secondary_threshold

@ashie
Copy link
Member Author

ashie commented Nov 2, 2021

It can be reproduced with rbenv's 3.1.0-dev.

It's reproduced only when running whole tests:

bundle exec rake test TESTOPTS="-v"

can't be reproduced when I specify the test file:

bundle exec rake test TEST=test/plugin/test_output_as_buffered_secondary.rb TESTOPTS="-v"

I'm not sure why but the following assert is stalled:

assert{ @i.log.out.logs.any?{|l| l.include?("[warn]: retry succeeded by secondary.") } }

@ashie ashie force-pushed the investigate-test-timeout-on-ruby-head branch 2 times, most recently from d382873 to 2e09aae Compare November 9, 2021 02:35
@ashie ashie changed the title GitHub Actions: Add TESTOPTS=-v to investigate timeout on Ruby Head GitHub Actions: Investigate stalled tests on Ruby Head Nov 9, 2021
@ashie ashie force-pushed the investigate-test-timeout-on-ruby-head branch from aef1e3c to 26351a5 Compare November 9, 2021 06:04
@ashie ashie changed the title GitHub Actions: Investigate stalled tests on Ruby Head Investigate stalled tests on Ruby Head Nov 30, 2021
@ashie ashie changed the title Investigate stalled tests on Ruby Head Investigate stalled tests on Ruby 3.1 Nov 30, 2021
@ashie ashie force-pushed the investigate-test-timeout-on-ruby-head branch from 26351a5 to b17020f Compare December 15, 2021 02:17
@ashie
Copy link
Member Author

ashie commented Dec 20, 2021

BufferedOutputSecondaryTest: 
  secondary plugin feature for buffered output with exponential backoff: 
    test: exponential backoff interval will be initialized when switched to secondary:	.: (12.035936)
Error: The operation was canceled.

e.g.) stack trace for it by sigdump:

Sigdump at 2016-04-13 18:34:19 -0700 process 3939856 (/home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/rake-13.0.6/lib/rake/rake_test_loader.rb)
  Thread #<Thread:0x00007fa72b60d018 run> status=run priority=0
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/sigdump-0.2.4/lib/sigdump.rb:52:in `backtrace'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/sigdump-0.2.4/lib/sigdump.rb:52:in `dump_backtrace'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/sigdump-0.2.4/lib/sigdump.rb:34:in `block in dump_all_thread_backtrace'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/sigdump-0.2.4/lib/sigdump.rb:33:in `each'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/sigdump-0.2.4/lib/sigdump.rb:33:in `dump_all_thread_backtrace'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/sigdump-0.2.4/lib/sigdump.rb:16:in `block in dump'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/sigdump-0.2.4/lib/sigdump.rb:136:in `open'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/sigdump-0.2.4/lib/sigdump.rb:136:in `_open_dump_path'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/sigdump-0.2.4/lib/sigdump.rb:14:in `dump'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/sigdump-0.2.4/lib/sigdump.rb:7:in `block in setup'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/power_assert-2.0.1/lib/power_assert/inspector.rb:22:in `inspect'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/power_assert-2.0.1/lib/power_assert/inspector.rb:22:in `inspect'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/power_assert-2.0.1/lib/power_assert/inspector.rb:22:in `inspect'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/power_assert-2.0.1/lib/power_assert/inspector.rb:22:in `inspect'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/power_assert-2.0.1/lib/power_assert/inspector.rb:22:in `inspect'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/power_assert-2.0.1/lib/power_assert/inspector.rb:22:in `inspect'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/power_assert-2.0.1/lib/power_assert/inspector.rb:22:in `inspect'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/power_assert-2.0.1/lib/power_assert/inspector.rb:22:in `inspect'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/power_assert-2.0.1/lib/power_assert/inspector.rb:22:in `inspect'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/power_assert-2.0.1/lib/power_assert/inspector.rb:22:in `inspect'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/power_assert-2.0.1/lib/power_assert/inspector.rb:22:in `inspect'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/power_assert-2.0.1/lib/power_assert/inspector.rb:22:in `inspect'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/power_assert-2.0.1/lib/power_assert/inspector.rb:22:in `inspect'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/power_assert-2.0.1/lib/power_assert/inspector.rb:22:in `inspect'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/power_assert-2.0.1/lib/power_assert/inspector.rb:22:in `inspect'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/power_assert-2.0.1/lib/power_assert/inspector.rb:22:in `inspect'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/power_assert-2.0.1/lib/power_assert/inspector.rb:22:in `inspect'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/power_assert-2.0.1/lib/power_assert/inspector.rb:22:in `inspect'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/power_assert-2.0.1/lib/power_assert/inspector.rb:22:in `inspect'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/power_assert-2.0.1/lib/power_assert/inspector.rb:22:in `inspect'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/power_assert-2.0.1/lib/power_assert/inspector.rb:22:in `inspect'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/power_assert-2.0.1/lib/power_assert/inspector.rb:22:in `inspect'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/power_assert-2.0.1/lib/power_assert/inspector.rb:22:in `inspect'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/power_assert-2.0.1/lib/power_assert/inspector.rb:22:in `inspect'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/power_assert-2.0.1/lib/power_assert/inspector.rb:22:in `inspect'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/power_assert-2.0.1/lib/power_assert/inspector.rb:22:in `inspect'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/power_assert-2.0.1/lib/power_assert/inspector.rb:22:in `inspect'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/power_assert-2.0.1/lib/power_assert/inspector.rb:22:in `inspect'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/power_assert-2.0.1/lib/power_assert/inspector.rb:22:in `inspect'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/power_assert-2.0.1/lib/power_assert/inspector.rb:22:in `inspect'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/power_assert-2.0.1/lib/power_assert/inspector.rb:22:in `inspect'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/power_assert-2.0.1/lib/power_assert/inspector.rb:22:in `inspect'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/power_assert-2.0.1/lib/power_assert/inspector.rb:22:in `inspect'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/power_assert-2.0.1/lib/power_assert/inspector.rb:22:in `inspect'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/power_assert-2.0.1/lib/power_assert/inspector.rb:22:in `inspect'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/power_assert-2.0.1/lib/power_assert/inspector.rb:22:in `inspect'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/power_assert-2.0.1/lib/power_assert/inspector.rb:22:in `inspect'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/power_assert-2.0.1/lib/power_assert/inspector.rb:22:in `inspect'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/power_assert-2.0.1/lib/power_assert/inspector.rb:22:in `inspect'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/power_assert-2.0.1/lib/power_assert/inspector.rb:22:in `inspect'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/power_assert-2.0.1/lib/power_assert/inspector.rb:22:in `inspect'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/power_assert-2.0.1/lib/power_assert/inspector.rb:22:in `inspect'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/power_assert-2.0.1/lib/power_assert/inspector.rb:22:in `inspect'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/power_assert-2.0.1/lib/power_assert/inspector.rb:22:in `inspect'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/power_assert-2.0.1/lib/power_assert/inspector.rb:22:in `inspect'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/power_assert-2.0.1/lib/power_assert/inspector.rb:22:in `inspect'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/power_assert-2.0.1/lib/power_assert/inspector.rb:22:in `inspect'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/power_assert-2.0.1/lib/power_assert/inspector.rb:22:in `inspect'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/power_assert-2.0.1/lib/power_assert/inspector.rb:22:in `inspect'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/power_assert-2.0.1/lib/power_assert/inspector.rb:22:in `inspect'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/power_assert-2.0.1/lib/power_assert/inspector.rb:22:in `inspect'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/power_assert-2.0.1/lib/power_assert/inspector.rb:22:in `inspect'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/power_assert-2.0.1/lib/power_assert/inspector.rb:22:in `inspect'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/power_assert-2.0.1/lib/power_assert/inspector.rb:22:in `inspect'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/power_assert-2.0.1/lib/power_assert/inspector.rb:22:in `inspect'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/power_assert-2.0.1/lib/power_assert/inspector.rb:22:in `inspect'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/power_assert-2.0.1/lib/power_assert/inspector.rb:22:in `inspect'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/power_assert-2.0.1/lib/power_assert/inspector.rb:22:in `inspect'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/power_assert-2.0.1/lib/power_assert/inspector.rb:22:in `inspect'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/power_assert-2.0.1/lib/power_assert/inspector.rb:22:in `inspect'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/power_assert-2.0.1/lib/power_assert/inspector.rb:22:in `inspect'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/power_assert-2.0.1/lib/power_assert/inspector.rb:22:in `inspect'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/power_assert-2.0.1/lib/power_assert/inspector.rb:22:in `inspect'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/power_assert-2.0.1/lib/power_assert/inspector.rb:22:in `inspect'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/power_assert-2.0.1/lib/power_assert/inspector.rb:22:in `inspect'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/power_assert-2.0.1/lib/power_assert/inspector.rb:22:in `inspect'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/power_assert-2.0.1/lib/power_assert/inspector.rb:22:in `inspect'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/power_assert-2.0.1/lib/power_assert/inspector.rb:22:in `inspect'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/power_assert-2.0.1/lib/power_assert/inspector.rb:22:in `inspect'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/power_assert-2.0.1/lib/power_assert/inspector.rb:22:in `inspect'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/power_assert-2.0.1/lib/power_assert/inspector.rb:22:in `inspect'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/power_assert-2.0.1/lib/power_assert/inspector.rb:22:in `inspect'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/power_assert-2.0.1/lib/power_assert/inspector.rb:22:in `inspect'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/power_assert-2.0.1/lib/power_assert/inspector.rb:22:in `inspect'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/power_assert-2.0.1/lib/power_assert/inspector.rb:22:in `inspect'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/power_assert-2.0.1/lib/power_assert/inspector.rb:22:in `inspect'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/power_assert-2.0.1/lib/power_assert/inspector.rb:22:in `inspect'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/power_assert-2.0.1/lib/power_assert/inspector.rb:22:in `inspect'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/power_assert-2.0.1/lib/power_assert/inspector.rb:22:in `inspect'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/power_assert-2.0.1/lib/power_assert/inspector.rb:22:in `inspect'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/power_assert-2.0.1/lib/power_assert/inspector.rb:22:in `inspect'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/power_assert-2.0.1/lib/power_assert/inspector.rb:22:in `inspect'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/power_assert-2.0.1/lib/power_assert/inspector.rb:22:in `inspect'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/power_assert-2.0.1/lib/power_assert/inspector.rb:22:in `inspect'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/power_assert-2.0.1/lib/power_assert/inspector.rb:22:in `inspect'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/power_assert-2.0.1/lib/power_assert/inspector.rb:22:in `inspect'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/power_assert-2.0.1/lib/power_assert/inspector.rb:22:in `inspect'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/power_assert-2.0.1/lib/power_assert/inspector.rb:22:in `inspect'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/power_assert-2.0.1/lib/power_assert/inspector.rb:22:in `inspect'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/power_assert-2.0.1/lib/power_assert/inspector.rb:22:in `inspect'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/power_assert-2.0.1/lib/power_assert/inspector.rb:22:in `inspect'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/power_assert-2.0.1/lib/power_assert/inspector.rb:22:in `inspect'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/power_assert-2.0.1/lib/power_assert/inspector.rb:22:in `inspect'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/power_assert-2.0.1/lib/power_assert/inspector.rb:22:in `inspect'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/power_assert-2.0.1/lib/power_assert/inspector.rb:22:in `inspect'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/power_assert-2.0.1/lib/power_assert/inspector.rb:22:in `inspect'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/power_assert-2.0.1/lib/power_assert/inspector.rb:22:in `inspect'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/power_assert-2.0.1/lib/power_assert/inspector.rb:22:in `inspect'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/power_assert-2.0.1/lib/power_assert/inspector.rb:22:in `inspect'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/power_assert-2.0.1/lib/power_assert/inspector.rb:22:in `inspect'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/power_assert-2.0.1/lib/power_assert/inspector.rb:22:in `inspect'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/power_assert-2.0.1/lib/power_assert/inspector.rb:22:in `inspect'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/power_assert-2.0.1/lib/power_assert/inspector.rb:22:in `inspect'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/power_assert-2.0.1/lib/power_assert/inspector.rb:22:in `inspect'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/power_assert-2.0.1/lib/power_assert/inspector.rb:22:in `inspect'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/power_assert-2.0.1/lib/power_assert/inspector.rb:22:in `inspect'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/power_assert-2.0.1/lib/power_assert/inspector.rb:22:in `inspect'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/power_assert-2.0.1/lib/power_assert/inspector.rb:22:in `inspect'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/power_assert-2.0.1/lib/power_assert/inspector.rb:22:in `inspect'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/power_assert-2.0.1/lib/power_assert/inspector.rb:22:in `inspect'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/power_assert-2.0.1/lib/power_assert/inspector.rb:22:in `inspect'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/power_assert-2.0.1/lib/power_assert/inspector.rb:22:in `inspect'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/power_assert-2.0.1/lib/power_assert/inspector.rb:22:in `inspect'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/power_assert-2.0.1/lib/power_assert/inspector.rb:22:in `inspect'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/power_assert-2.0.1/lib/power_assert/inspector.rb:22:in `inspect'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/power_assert-2.0.1/lib/power_assert/inspector.rb:22:in `inspect'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/power_assert-2.0.1/lib/power_assert/inspector.rb:22:in `inspect'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/power_assert-2.0.1/lib/power_assert/inspector.rb:22:in `inspect'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/power_assert-2.0.1/lib/power_assert/inspector.rb:22:in `inspect'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/power_assert-2.0.1/lib/power_assert/inspector.rb:22:in `inspect'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/power_assert-2.0.1/lib/power_assert/inspector.rb:22:in `inspect'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/power_assert-2.0.1/lib/power_assert/inspector.rb:22:in `inspect'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/power_assert-2.0.1/lib/power_assert/inspector.rb:22:in `inspect'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/power_assert-2.0.1/lib/power_assert/inspector.rb:22:in `inspect'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/power_assert-2.0.1/lib/power_assert/inspector.rb:22:in `inspect'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/power_assert-2.0.1/lib/power_assert/inspector.rb:22:in `inspect'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/power_assert-2.0.1/lib/power_assert/inspector.rb:22:in `inspect'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/power_assert-2.0.1/lib/power_assert/inspector.rb:22:in `inspect'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/power_assert-2.0.1/lib/power_assert/inspector.rb:22:in `inspect'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/power_assert-2.0.1/lib/power_assert/inspector.rb:22:in `inspect'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/power_assert-2.0.1/lib/power_assert/inspector.rb:22:in `inspect'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/power_assert-2.0.1/lib/power_assert/inspector.rb:22:in `inspect'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/power_assert-2.0.1/lib/power_assert/inspector.rb:22:in `inspect'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/power_assert-2.0.1/lib/power_assert/inspector.rb:22:in `inspect'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/power_assert-2.0.1/lib/power_assert/inspector.rb:22:in `inspect'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/power_assert-2.0.1/lib/power_assert/inspector.rb:22:in `inspect'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/power_assert-2.0.1/lib/power_assert/inspector.rb:22:in `inspect'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/power_assert-2.0.1/lib/power_assert/inspector.rb:22:in `inspect'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/power_assert-2.0.1/lib/power_assert/inspector.rb:22:in `inspect'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/power_assert-2.0.1/lib/power_assert/inspector.rb:22:in `inspect'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/power_assert-2.0.1/lib/power_assert/inspector.rb:22:in `inspect'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/power_assert-2.0.1/lib/power_assert/inspector.rb:22:in `inspect'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/power_assert-2.0.1/lib/power_assert/inspector.rb:22:in `inspect'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/power_assert-2.0.1/lib/power_assert/inspector.rb:22:in `inspect'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/power_assert-2.0.1/lib/power_assert/inspector.rb:22:in `inspect'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/power_assert-2.0.1/lib/power_assert/inspector.rb:22:in `inspect'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/power_assert-2.0.1/lib/power_assert/inspector.rb:22:in `inspect'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/power_assert-2.0.1/lib/power_assert/inspector.rb:22:in `inspect'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/power_assert-2.0.1/lib/power_assert/inspector.rb:22:in `inspect'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/power_assert-2.0.1/lib/power_assert/inspector.rb:22:in `inspect'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/power_assert-2.0.1/lib/power_assert/inspector.rb:22:in `inspect'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/power_assert-2.0.1/lib/power_assert/inspector.rb:22:in `inspect'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/power_assert-2.0.1/lib/power_assert/inspector.rb:22:in `inspect'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/power_assert-2.0.1/lib/power_assert/inspector.rb:22:in `inspect'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/power_assert-2.0.1/lib/power_assert/inspector.rb:22:in `inspect'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/power_assert-2.0.1/lib/power_assert/inspector.rb:22:in `inspect'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/power_assert-2.0.1/lib/power_assert/inspector.rb:22:in `inspect'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/power_assert-2.0.1/lib/power_assert/inspector.rb:22:in `inspect'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/power_assert-2.0.1/lib/power_assert/inspector.rb:22:in `inspect'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/power_assert-2.0.1/lib/power_assert/inspector.rb:22:in `inspect'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/power_assert-2.0.1/lib/power_assert/inspector.rb:22:in `inspect'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/power_assert-2.0.1/lib/power_assert/inspector.rb:22:in `inspect'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/power_assert-2.0.1/lib/power_assert/inspector.rb:22:in `inspect'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/power_assert-2.0.1/lib/power_assert/inspector.rb:22:in `inspect'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/power_assert-2.0.1/lib/power_assert/inspector.rb:22:in `inspect'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/power_assert-2.0.1/lib/power_assert/inspector.rb:22:in `inspect'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/power_assert-2.0.1/lib/power_assert/inspector.rb:22:in `inspect'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/power_assert-2.0.1/lib/power_assert/inspector.rb:22:in `inspect'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/power_assert-2.0.1/lib/power_assert/inspector.rb:22:in `inspect'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/power_assert-2.0.1/lib/power_assert/inspector.rb:22:in `inspect'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/power_assert-2.0.1/lib/power_assert/inspector.rb:22:in `inspect'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/power_assert-2.0.1/lib/power_assert/inspector.rb:22:in `inspect'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/power_assert-2.0.1/lib/power_assert/inspector.rb:22:in `inspect'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/power_assert-2.0.1/lib/power_assert/inspector.rb:22:in `inspect'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/power_assert-2.0.1/lib/power_assert/inspector.rb:22:in `inspect'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/power_assert-2.0.1/lib/power_assert/inspector.rb:22:in `inspect'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/power_assert-2.0.1/lib/power_assert/inspector.rb:22:in `inspect'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/power_assert-2.0.1/lib/power_assert/inspector.rb:22:in `inspect'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/power_assert-2.0.1/lib/power_assert/inspector.rb:22:in `inspect'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/power_assert-2.0.1/lib/power_assert/inspector.rb:22:in `inspect'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/power_assert-2.0.1/lib/power_assert/inspector.rb:22:in `inspect'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/power_assert-2.0.1/lib/power_assert/inspector.rb:22:in `inspect'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/power_assert-2.0.1/lib/power_assert/inspector.rb:22:in `inspect'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/power_assert-2.0.1/lib/power_assert/inspector.rb:22:in `inspect'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/power_assert-2.0.1/lib/power_assert/inspector.rb:22:in `inspect'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/power_assert-2.0.1/lib/power_assert/inspector.rb:22:in `inspect'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/power_assert-2.0.1/lib/power_assert/inspector.rb:22:in `inspect'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/power_assert-2.0.1/lib/power_assert/inspector.rb:22:in `inspect'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/power_assert-2.0.1/lib/power_assert/inspector.rb:22:in `inspect'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/power_assert-2.0.1/lib/power_assert/inspector.rb:22:in `inspect'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/power_assert-2.0.1/lib/power_assert/inspector.rb:22:in `inspect'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/power_assert-2.0.1/lib/power_assert/inspector.rb:22:in `inspect'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/power_assert-2.0.1/lib/power_assert/inspector.rb:22:in `inspect'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/power_assert-2.0.1/lib/power_assert/inspector.rb:22:in `inspect'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/power_assert-2.0.1/lib/power_assert/inspector.rb:22:in `inspect'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/power_assert-2.0.1/lib/power_assert/inspector.rb:22:in `inspect'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/power_assert-2.0.1/lib/power_assert/inspector.rb:22:in `inspect'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/power_assert-2.0.1/lib/power_assert/inspector.rb:22:in `inspect'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/power_assert-2.0.1/lib/power_assert/inspector.rb:22:in `inspect'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/power_assert-2.0.1/lib/power_assert/inspector.rb:22:in `inspect'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/power_assert-2.0.1/lib/power_assert/inspector.rb:22:in `inspect'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/power_assert-2.0.1/lib/power_assert/inspector.rb:22:in `inspect'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/power_assert-2.0.1/lib/power_assert/inspector.rb:22:in `inspect'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/power_assert-2.0.1/lib/power_assert/inspector.rb:22:in `inspect'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/power_assert-2.0.1/lib/power_assert/inspector.rb:22:in `inspect'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/power_assert-2.0.1/lib/power_assert/inspector.rb:22:in `inspect'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/power_assert-2.0.1/lib/power_assert/inspector.rb:22:in `inspect'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/power_assert-2.0.1/lib/power_assert/inspector.rb:22:in `inspect'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/power_assert-2.0.1/lib/power_assert/inspector.rb:22:in `inspect'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/power_assert-2.0.1/lib/power_assert/inspector.rb:22:in `inspect'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/power_assert-2.0.1/lib/power_assert/inspector.rb:22:in `inspect'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/power_assert-2.0.1/lib/power_assert/inspector.rb:22:in `inspect'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/power_assert-2.0.1/lib/power_assert/inspector.rb:22:in `inspect'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/power_assert-2.0.1/lib/power_assert/inspector.rb:22:in `inspect'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/power_assert-2.0.1/lib/power_assert/inspector.rb:22:in `inspect'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/power_assert-2.0.1/lib/power_assert/inspector.rb:22:in `inspect'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/power_assert-2.0.1/lib/power_assert/inspector.rb:22:in `inspect'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/power_assert-2.0.1/lib/power_assert/inspector.rb:22:in `inspect'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/power_assert-2.0.1/lib/power_assert/inspector.rb:22:in `inspect'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/power_assert-2.0.1/lib/power_assert/inspector.rb:22:in `inspect'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/power_assert-2.0.1/lib/power_assert/inspector.rb:22:in `inspect'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/power_assert-2.0.1/lib/power_assert/context.rb:31:in `block in initialize'
      /home/aho/Projects/Fluentd/fluentd/test/plugin/test_output_as_buffered_secondary.rb:778:in `block (3 levels) in <class:BufferedOutputSecondaryTest>'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/power_assert-2.0.1/lib/power_assert/context.rb:198:in `block (2 levels) in invoke_yield'
      <internal:trace_point>:194:in `enable'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/power_assert-2.0.1/lib/power_assert/context.rb:197:in `block in invoke_yield'
      <internal:trace_point>:194:in `enable'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/power_assert-2.0.1/lib/power_assert/context.rb:196:in `invoke_yield'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/power_assert-2.0.1/lib/power_assert/context.rb:190:in `yield'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/test-unit-3.4.8/lib/test/unit/assertions.rb:144:in `block (3 levels) in assert'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/test-unit-3.4.8/lib/test/unit/assertions.rb:55:in `block in assert_block'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/test-unit-3.4.8/lib/test/unit/assertions.rb:1821:in `_wrap_assertion'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/test-unit-3.4.8/lib/test/unit/assertions.rb:54:in `assert_block'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/test-unit-3.4.8/lib/test/unit/assertions.rb:143:in `block (2 levels) in assert'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/power_assert-2.0.1/lib/power_assert.rb:34:in `start'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/test-unit-3.4.8/lib/test/unit/assertions.rb:140:in `block in assert'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/test-unit-3.4.8/lib/test/unit/assertions.rb:1826:in `_wrap_assertion'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/test-unit-3.4.8/lib/test/unit/assertions.rb:135:in `assert'
      /home/aho/Projects/Fluentd/fluentd/test/plugin/test_output_as_buffered_secondary.rb:778:in `block (2 levels) in <class:BufferedOutputSecondaryTest>'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/test-unit-3.4.8/lib/test/unit/testcase.rb:866:in `run_test'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/test-unit-3.4.8/lib/test/unit/testcase.rb:561:in `block (2 levels) in run'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/test-unit-3.4.8/lib/test/unit/fixture.rb:276:in `block in create_fixtures_runner'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/test-unit-3.4.8/lib/test/unit/fixture.rb:276:in `block in create_fixtures_runner'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/test-unit-3.4.8/lib/test/unit/fixture.rb:276:in `block in create_fixtures_runner'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/test-unit-3.4.8/lib/test/unit/fixture.rb:276:in `block in create_fixtures_runner'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/test-unit-3.4.8/lib/test/unit/fixture.rb:276:in `block in create_fixtures_runner'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/test-unit-3.4.8/lib/test/unit/fixture.rb:257:in `run_fixture'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/test-unit-3.4.8/lib/test/unit/fixture.rb:292:in `run_setup'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/test-unit-3.4.8/lib/test/unit/testcase.rb:559:in `block in run'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/test-unit-3.4.8/lib/test/unit/testcase.rb:558:in `catch'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/test-unit-3.4.8/lib/test/unit/testcase.rb:558:in `run'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/test-unit-3.4.8/lib/test/unit/testsuite.rb:124:in `run_test'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/test-unit-3.4.8/lib/test/unit/testsuite.rb:53:in `run'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/test-unit-3.4.8/lib/test/unit/testsuite.rb:124:in `run_test'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/test-unit-3.4.8/lib/test/unit/testsuite.rb:53:in `run'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/test-unit-3.4.8/lib/test/unit/testsuite.rb:124:in `run_test'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/test-unit-3.4.8/lib/test/unit/testsuite.rb:53:in `run'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/test-unit-3.4.8/lib/test/unit/ui/testrunnermediator.rb:67:in `run_suite'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/test-unit-3.4.8/lib/test/unit/ui/testrunnermediator.rb:45:in `block (2 levels) in run'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/test-unit-3.4.8/lib/test/unit/ui/testrunnermediator.rb:102:in `with_listener'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/test-unit-3.4.8/lib/test/unit/ui/testrunnermediator.rb:41:in `block in run'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/test-unit-3.4.8/lib/test/unit/ui/testrunnermediator.rb:39:in `catch'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/test-unit-3.4.8/lib/test/unit/ui/testrunnermediator.rb:39:in `run'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/test-unit-3.4.8/lib/test/unit/ui/testrunner.rb:40:in `start_mediator'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/test-unit-3.4.8/lib/test/unit/ui/testrunner.rb:25:in `start'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/test-unit-3.4.8/lib/test/unit/ui/testrunnerutilities.rb:24:in `run'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/test-unit-3.4.8/lib/test/unit/autorunner.rb:458:in `block in run'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/test-unit-3.4.8/lib/test/unit/autorunner.rb:514:in `change_work_directory'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/test-unit-3.4.8/lib/test/unit/autorunner.rb:457:in `run'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/test-unit-3.4.8/lib/test/unit/autorunner.rb:66:in `run'
      /home/aho/Projects/Fluentd/fluentd/vendor/bundle/ruby/3.1.0/gems/test-unit-3.4.8/lib/test/unit.rb:518:in `block (2 levels) in <top (required)>'
  Thread #<Thread:0x00007fa72668e550@flush_thread_0 /home/aho/Projects/Fluentd/fluentd/lib/fluent/plugin_helper/thread.rb:70 sleep> status=sleep priority=0
      /home/aho/Projects/Fluentd/fluentd/lib/fluent/plugin/output.rb:1514:in `sleep'
      /home/aho/Projects/Fluentd/fluentd/lib/fluent/plugin/output.rb:1514:in `wait'
      /home/aho/Projects/Fluentd/fluentd/lib/fluent/plugin/output.rb:1514:in `flush_thread_run'
      /home/aho/Projects/Fluentd/fluentd/lib/fluent/plugin/output.rb:499:in `block (2 levels) in start'
      /home/aho/Projects/Fluentd/fluentd/lib/fluent/plugin_helper/thread.rb:78:in `block in thread_create'
  Thread #<Thread:0x00007fa72668e0a0@enqueue_thread /home/aho/Projects/Fluentd/fluentd/lib/fluent/plugin_helper/thread.rb:70 sleep> status=sleep priority=0
      /home/aho/Projects/Fluentd/fluentd/lib/fluent/plugin/output.rb:1453:in `sleep'
      /home/aho/Projects/Fluentd/fluentd/lib/fluent/plugin/output.rb:1453:in `enqueue_thread_run'
      /home/aho/Projects/Fluentd/fluentd/lib/fluent/plugin_helper/thread.rb:78:in `block in thread_create'
  GC stat:
      count: 147130
      heap_allocated_pages: 946
      heap_sorted_length: 946
      heap_allocatable_pages: 0
      heap_available_slots: 386537
      heap_live_slots: 223001
      heap_free_slots: 163536
      heap_final_slots: 0
      heap_marked_slots: 222333
      heap_eden_pages: 946
      heap_tomb_pages: 0
      total_allocated_pages: 946
      total_freed_pages: 0
      total_allocated_objects: 3033429774
      total_freed_objects: 3033206773
      malloc_increase_bytes: 137888
      malloc_increase_bytes_limit: 33554432
      minor_gc_count: 124442
      major_gc_count: 22688
      compact_count: 0
      read_barrier_faults: 0
      total_moved_objects: 0
      remembered_wb_unprotected_objects: 582
      remembered_wb_unprotected_objects_limit: 1164
      old_objects: 221649
      old_objects_limit: 443298
      oldmalloc_increase_bytes: 199138496
      oldmalloc_increase_bytes_limit: 134217728
  Built-in objects:
   386,537: TOTAL
   163,446: FREE
    78,126: T_STRING
    72,193: T_IMEMO
    26,683: T_ARRAY
    16,055: T_HASH
    12,419: T_OBJECT
     7,593: T_CLASS
     6,274: T_DATA
     1,150: T_ICLASS
     1,060: T_REGEXP
       573: T_MODULE
       503: T_SYMBOL
       427: T_STRUCT
        12: T_BIGNUM
         9: T_FLOAT
         9: T_FILE
         2: T_MATCH
         2: T_RATIONAL
         1: T_COMPLEX

@ashie
Copy link
Member Author

ashie commented Dec 20, 2021

I've searched the problematic commit of Ruby by git bisect. Here is the commit:

ruby/ruby@2d98593

$ git bisect bad
2d98593bf54a37397c6e4886ccc7e3654c2eaf85 is the first bad commit
commit 2d98593bf54a37397c6e4886ccc7e3654c2eaf85
Author: Jeremy Evans <code@jeremyevans.net>
Date:   Mon Aug 23 15:22:14 2021 -0700

    Support tracing of attr_reader and attr_writer
    
    In vm_call_method_each_type, check for c_call and c_return events before
    dispatching to vm_call_ivar and vm_call_attrset.  With this approach, the
    call cache will still dispatch directly to those functions, so this
    change will only decrease performance for the first (uncached) call, and
    even then, the performance decrease is very minimal.
    
    This approach requires that we clear the call caches when tracing is
    enabled or disabled.  The approach currently switches all vm_call_ivar
    and vm_call_attrset call caches to vm_call_general any time tracing is
    enabled or disabled. So it could theoretically result in a slowdown for
    code that constantly enables or disables tracing.
    
    This approach does not handle targeted tracepoints, but from my testing,
    c_call and c_return events are not supported for targeted tracepoints,
    so that shouldn't matter.
    
    This includes a benchmark showing the performance decrease is minimal
    if detectable at all.
    
    Fixes [Bug #16383]
    Fixes [Bug #10470]
    
    Co-authored-by: Takashi Kokubun <takashikkbn@gmail.com>

 benchmark/attr_accessor.yml    | 29 ++++++++++++++++++++++++
 iseq.c                         | 29 ++++++++++++++++++++++++
 test/ruby/test_settracefunc.rb | 50 ++++++++++++++++++++++++++++++++++++++++++
 vm_eval.c                      | 22 +++++++++++++++++--
 vm_insnhelper.c                | 47 +++++++++++++++++++++++++++++++++++----
 vm_trace.c                     |  5 +++++
 6 files changed, 176 insertions(+), 6 deletions(-)
 create mode 100644 benchmark/attr_accessor.yml

Signed-off-by: Takuro Ashie <ashie@clear-code.com>
I don't know why yet but "test: has plugin logger" are stalled on
Ruby 3.1.0

  test/plugin/test_filter.rb:147:    test 'has plugin logger' do
  test/plugin/test_bare_output.rb:77:  test 'has plugin logger' do
  test/plugin/test_input.rb:67:  test 'has plugin logger' do

Signed-off-by: Takuro Ashie <ashie@clear-code.com>
Signed-off-by: Takuro Ashie <ashie@clear-code.com>
The following test in test/plugin_helper/test_timer.rb is also stalled
on Ruby 3.1:

  * test: aborts timer which raises exceptions

Signed-off-by: Takuro Ashie <ashie@clear-code.com>
@ashie ashie force-pushed the investigate-test-timeout-on-ruby-head branch from b17020f to 0f7b012 Compare December 21, 2021 00:39
@ashie
Copy link
Member Author

ashie commented Dec 21, 2021

I've found a simplified test case.

test_stall.rb:

require 'fluent/test'
require 'fluent/plugin/bare_output'

class StallTest < Test::Unit::TestCase
  class DummyPlugin < Fluent::Plugin::BareOutput
  end

  setup do
    Fluent::Test.setup
  end

  20.times do |i|
    test "stall #{i}" do
      p = DummyPlugin.new
      assert { p.log }
    end
  end
end

When I run it, duration of later tests are exponentially increased.
When I replace the assertion with assert(p.log), it's not reproduced.

@ashie
Copy link
Member Author

ashie commented Dec 21, 2021

More simplified test case:

require 'fluent/test'

class StallTest < Test::Unit::TestCase
  class Stall
    attr_reader :log
    def initialize
      @log = $log # https://github.com/fluent/fluentd/blob/c7a2cf0d21976a907055864b9638803179ef43c2/lib/fluent/log.rb#L651
    end
  end

  setup do
    Fluent::Test.setup
  end

  20.times do |i|
    test "stall #{i}" do
      assert { Stall.new.log }
    end
  end
end

Fluent::Test.setup is needed to reproduce the issue.

ashie added a commit that referenced this pull request Dec 21, 2021
Several tests are stalled since Ruby 3.1, I found that it's caused by
the followig Ruby's change:

  ruby/ruby@2d98593

It seems that there are some conditions to reproduce it:

  * `attr_reader` is defined in a class
  * `$log` is accessed by it
  * `assert` is called with a block
  * `assert` refers the `$log` via the `attr_reader`
  * ... (some other conditions seem needed but not clarified yet)

Here is the sample test case to reproduce it:

```
require 'fluent/test'

class StallTest < Test::Unit::TestCase
  class Stall
    attr_reader :log
    def initialize
      @log = $log
    end
  end

  setup do
    Fluent::Test.setup
  end

  20.times do |i|
    test "stall #{i}" do
      assert { Stall.new.log }
    end
  end
end
```

Becasue all stalled tests don't need to use block, I remove these blocks
to avoid this issue.

Fix #3543

Signed-off-by: Takuro Ashie <ashie@clear-code.com>
ashie added a commit that referenced this pull request Dec 21, 2021
Several tests are stalled since Ruby 3.1, I found that it's caused by
the followig Ruby's change:

  ruby/ruby@2d98593

It seems that there are some conditions to reproduce it:

  * `attr_reader` is defined in a class
  * `$log` is accessed by it
  * `assert` is called with a block
  * `assert` refers the `$log` via the `attr_reader`
  * ... (some other conditions seem needed but not clarified yet)

Here is the sample test case to reproduce it:

```ruby
require 'fluent/test'

class StallTest < Test::Unit::TestCase
  class Stall
    attr_reader :log
    def initialize
      @log = $log
    end
  end

  setup do
    Fluent::Test.setup
  end

  20.times do |i|
    test "stall #{i}" do
      assert { Stall.new.log }
    end
  end
end
```

Becasue all stalled tests don't need to use block, I remove these blocks
to avoid this issue.

Fix #3543

Signed-off-by: Takuro Ashie <ashie@clear-code.com>
@ashie ashie closed this in #3577 Dec 21, 2021
@ashie
Copy link
Member Author

ashie commented Dec 21, 2021

As I mentioned in #3577, there are some conditions to reproduce it:

  • attr_reader is defined in a class
  • $log is accessed by it
  • assert is called with a block
  • assert refers the $log via the attr_reader
  • ... (some other conditions seem needed but not clarified yet)

@ashie ashie deleted the investigate-test-timeout-on-ruby-head branch December 21, 2021 04:31
@ashie
Copy link
Member Author

ashie commented Dec 21, 2021

More simplified test case:

require 'fluent/test'

class StallTest < Test::Unit::TestCase
  class Stall
    attr_reader :log
    def initialize
      @log = $log # https://github.com/fluent/fluentd/blob/c7a2cf0d21976a907055864b9638803179ef43c2/lib/fluent/log.rb#L651
    end
  end

  setup do
    Fluent::Test.setup
  end

  20.times do |i|
    test "stall #{i}" do
      assert { Stall.new.log }
    end
  end
end

I've found that this test case increases test duration on Ruby 2.7 too, but Ruby 3.1 is 2 times longer than it.

Ruby 2.7

Finished in 497.747541577 seconds.

Ruby 3.1

Finished in 938.883227709 seconds.

@ashie
Copy link
Member Author

ashie commented Dec 21, 2021

I've created a more simplified test case that doesn't require Fluentd's code.

require 'test/unit'

module Fluent
  class EventRouter
    def initialize(default_collector)
      @default_collector = default_collector
    end
  end

  class NoMatchMatch
    def initialize(log)
      @log = log
    end
  end

  class Agent
    def initialize(log:)
      @log = log
      @event_router = Fluent::EventRouter.new(Fluent::NoMatchMatch.new(log))
    end
  end

  class EngineClass
    def initialize
      @agent = Fluent::Agent.new(log: $log)
    end
  end

  class Log
    def initialize
      @engine = Fluent.const_get('Engine')
    end
  end

  Engine = EngineClass.new
end

class StallTest < Test::Unit::TestCase
  class Stall
    attr_reader :log
    def initialize
      @log = $log
    end
  end

  setup do
    $log = Fluent::Log.new
    Fluent.__send__(:remove_const, :Engine)
    engine = Fluent.const_set(:Engine, Fluent::EngineClass.new)
  end

  23.times do |i|
    test "stall #{i}" do
      assert { Stall.new.log }
    end
  end
end

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

1 participant