[#106355] [Ruby master Bug#18373] RBS build failure: '/include/x86_64-linux/ruby/config.h', needed by 'constants.o'. — "vo.x (Vit Ondruch)" <noreply@...>
Issue #18373 has been reported by vo.x (Vit Ondruch).
28 messages
2021/12/01
[ruby-core:106923] [Ruby master Bug#18453] YJIT breaks Rails collection caching
From:
"georgeclaghorn (George Claghorn)" <noreply@...>
Date:
2021-12-30 17:54:12 UTC
List:
ruby-core #106923
Issue #18453 has been reported by georgeclaghorn (George Claghorn).
----------------------------------------
Bug #18453: YJIT breaks Rails collection caching
https://bugs.ruby-lang.org/issues/18453
* Author: georgeclaghorn (George Claghorn)
* Status: Open
* Priority: Normal
* ruby -v: ruby 3.1.0p0 (2021-12-25 revision fb4df44d16) +YJIT [x86_64-linux]
* Backport: 2.6: UNKNOWN, 2.7: UNKNOWN, 3.0: UNKNOWN, 3.1: UNKNOWN
----------------------------------------
A minimal app that demonstrates this issue is available [on GitHub](https://github.com/georgeclaghorn/yjit-rails-collection-caching-bug). It has:
* One model, `Post`, with a string `title` attribute.
* One controller action, `posts#index`, which fetches `Post`s in reverse order of creation into `@posts`.
* A root route to `posts#index`.
* One view, `app/views/posts/index.html.erb`, which uses Rails collection rendering and caching as follows:
```erb
<ul>
<li><%= render partial: "posts/post", collection: @posts, cached: true %></li>
</ul>
```
* A partial, `app/views/posts/_post.html.erb` as follows:
```erb
<% cache post do %>
<li><%= post.title %></li>
<% end %>
```
I deployed this app to Heroku [here](https://yjit-rails-caching-bug.herokuapp.com). I configured it to use a Redis cache store.
I added 100 posts like so:
```ruby
$ heroku run rails c
> 100.times do |i|
* Post.create! title: "Post ##{i + 1}"
* end
```
All requests to the app index, `/`, show the posts in reverse chronological order as expected, with cold and warm cache:
```
* Post #100
* Post #99
* Post #98
* Post #97
* Post #96
* Post #95
...
```
I enabled YJIT by setting the `RUBYOPT` environment variable to `--yjit --yjit-exec-mem-size=32` and restarted the app server. I cleared the Redis cache with `heroku run rails r 'Rails.cache.redis.flushall`.
The first request to `/` with cold cache begins repeating Post #1 after #92:
```
* Post #100
* Post #99
* Post #98
* Post #97
* Post #96
* Post #95
* Post #94
* Post #93
* Post #92
* Post #1
* Post #1
* Post #1
* Post #1
* Post #1
* Post #1
...
```
All subsequent requests repeat Post #1 100 times:
```
* Post #1
* Post #1
* Post #1
* Post #1
* Post #1
* Post #1
* Post #1
* Post #1
* Post #1
...
```
On restart, Post #1 is repeated after #92 for the first request (as in the second-to-last example). Post #1 is repeated 100 times for subsequent requests (as in the last example).
Disabling YJIT and flushing the Redis cache restores the correct behavior.
**Rails version:** GitHub `rails/rails`, `7-0-stable` branch, revision `499f12f6c03a4114eb649310e65200fe5d894db0`
--
https://bugs.ruby-lang.org/
Unsubscribe: <mailto:ruby-core-request@ruby-lang.org?subject=unsubscribe>
<http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>