Backport ActiveRecord query cache feature from 6.x to 5.2

Hello!

TLDR: I would like to backport https://github.com/rails/rails/pull/35089 (“Invalidate all query caches for current thread”) to 5.2-stable branch. The issue comes from this patch which enables query cache for all connection pools - https://github.com/rails/rails/pull/28869.

Longer text: I’m using active_record_slave to read some records from slave database. It uses special abstract model which connects to slave database using establish_connection and all reads go through this model by default.

My case (consider this happens inside http request/response cycle):

  1. fetch some record - it will be read from slave and this query will be cached
  2. delete that record - this query will go through AR::Base.connection_pool to master database and this will clear the cache for this connection pool but not for connection pool of the model for slave database.
  3. fetch the same record from step №1 using the same query - this will return the record from cache, because all reads go to slave by default. AR.uncached cannot be used because it works only for AR::Base.connection_pool.

Can I make a backport?

Hello!

With the release of Rails 6.0.0, Rails 5.2 became a security only release. No bug fixes or new features are going to be added to 5.2 unless it is for security reasons.

See https://edgeguides.rubyonrails.org/maintenance_policy.html#bug-fixes

Ok, thanks for reply.