なるようになるブログ

読書感想文かrailsについてかrubyについてか

rails commit log流し読み(2024/08/16)

2024/08/16分のコミットです。

CHANGELOGにのったコミットは以下の通りです。

actionpack/CHANGELOG.md

activerecord/CHANGELOG.md


Merge pull request #52610 from Shopify/no_more_racc

Action Packの修正です。

journeyで使用するparserを生成するのにraccを使用していたのを、独自にparserを作成し、そちらを使用するよう修正しています。速度的には今とのころ特に変わらないのですが、raccを使用することなく最適化も出来そうなため、とのことです。


Merge pull request #52605 from Shopify/scope_with_keywords

actionpack/lib/action_dispatch/routing/mapper.rbの修正です。

Mapper with keywordsと同様に、scopesresourcesメソッド等で、メソッドの引数にkeyword引数を使用するよう修正しています。


Allow to eager load nested nil associations

activerecord/lib/active_record/associations/join_dependency.rbの修正です。

nil associationをeager loadした際にエラーになってしまうバグがあったのを修正しています。


Fix a typo in Application#name doc

railties/lib/rails/application.rbのdocの修正です。

Application#nameメソッドのdoc内のタイポを修正しています。


Remove unused require

actionpack/test/controller/resources_test.rbの修正です。

使用していないrequireを削除しています。


Merge pull request #52378 from fatkodima/fix-batches-error_on_ignore

activerecord/lib/active_record/relation/batches.rbの修正です。

BatchEnumeratorを使用してのbatch処理を行う際に、error_on_ignoreオプションが無視されてしまうバグがあったのを修正しています。


Store query caches in IsolatedExecutionState to avoid memory bloat

activerecord/lib/active_record/connection_adapters/abstract/connection_pool.rbactiverecord/lib/active_record/connection_adapters/abstract/query_cache.rbの修正です。

query cachesを格納するのにActiveSupport::IsolatedExecutionStateを使用するよう修正しています。元々はConcurrent::Mapを使用していたのですが、IsolatedExecutionStateにfiberを使用している場合にメモリが肥大化してしまう(cacheをクリアするタイミングが遅い)という問題があった為、ActiveSupport::IsolatedExecutionStateで管理するよう修正しています。


Don't hold on connection pools from the query cache

activerecord/lib/active_record/connection_adapters/abstract/query_cache.rbの修正です。

先のquey cahcesの改善により、ActiveRecord::ConnectionAdapters::QueryCache::Storeでconnection poolを保持するようになった(query cacheのversionを参照するよう)のですが、それだとconnection poolが解放されずRailsのCIでエラーになる、という問題が発生した為、connection poolは保持しないよう修正しています。


Translate SQLite3::BusyException into ActiveRecord::StatementTimeout

activerecord/lib/active_record/connection_adapters/sqlite3_adapter.rbの修正です。

SQLite3 adapterでSQLite3::BusyExceptionが発生した場合、ActiveRecord::StatementTimeoutに変換するよう修正しています。他のtimeout系のexceptionと挙動を合わせる為。


Add Rails 7.2 release date

guides/source/documents.yamlの修正です。

Rails 7.2のリリース日を追加しています。


Hold query caches in a WeakKeyMap

activerecord/lib/active_record/connection_adapters/abstract/connection_pool.rbactiverecord/lib/active_record/connection_adapters/abstract/query_cache.rbの修正です。

query cachesを保持するのにWeakKeyMapを使用するよう修正しています。元の実装だとConnectionPoolGCされた際にquery cachesがGCされず残ってしまうという問題があった為。


Use the new SQLite3::Database#busy_handler_timeout= method for a non-GVL-blocking, fair retry interval busy handler implementation

activerecord/lib/active_record/connection_adapters/sqlite3_adapter.rbの修正です。

SQLite3 adapterで、timeoutの指定にSQLite3::Database#busy_timeoutを使用していたのを、#busy_handler_timeout=を使用するよう修正しています。busy_handler_timeoutの方はnon-GVL-blocking、公平な再試行間隔が行われるビジーハンドラーが実装されているため、との事です。合わせて、busy_handler_timeoutでは指定が出来なくなっているretriesオプションをdeprecatedにしています。

参考:Add a busy_handler_timeout setter


Remove Rubocop offense in config/initializers/assets.rb

railties/lib/rails/generators/rails/app/templates/config/initializers/assets.rb.ttの修正です。

Rubocopのチェックでエラーになるコードがあったのを修正しています。