mirror of
https://github.com/discourse/discourse.git
synced 2024-11-30 06:23:44 +08:00
28 lines
800 B
Ruby
28 lines
800 B
Ruby
|
# frozen_string_literal: true
|
||
|
#
|
||
|
# Rails has a circular dependency in SchemaCache.
|
||
|
# In certain situation SchemaCache can carry a @connection
|
||
|
# from a different thread. This causes potential concurrency bugs
|
||
|
# in Sidekiq.
|
||
|
#
|
||
|
# This patches it so it is less flexible (theoretically) but always bound to the current connection
|
||
|
|
||
|
# This patch needs to be reviewed in future versions of Rails.
|
||
|
# We should consider upstreaming this optionally.
|
||
|
|
||
|
module ActiveRecord
|
||
|
module ConnectionAdapters
|
||
|
class SchemaCache
|
||
|
|
||
|
def connection=(connection)
|
||
|
# AbstractPool get_schema_cache does schema_cache.connection = connection
|
||
|
Thread.current["schema_cached_connection"] = connection
|
||
|
end
|
||
|
|
||
|
def connection
|
||
|
Thread.current["schema_cached_connection"]
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
end
|