diff --git a/lib/data_fabric/connection_proxy.rb b/lib/data_fabric/connection_proxy.rb index fa1dea1..afcbac7 100644 --- a/lib/data_fabric/connection_proxy.rb +++ b/lib/data_fabric/connection_proxy.rb @@ -99,10 +99,6 @@ def respond_to?(method) super || connection.respond_to?(method) end - def locks - Thread.current["#{@model_class}_locks"] ||= [] - end - def method_missing(method, *args, &block) DataFabric.logger.debug { "Calling #{method} on #{connection}" } connection.send(method, *args, &block) @@ -153,25 +149,15 @@ def current_pool private - def fixed_role - Thread.current["#{@model_class}_fixed_role"] - end - - def fixed_role=(arg) - Thread.current["#{@model_class}_fixed_role"] = arg - end - def with_fixed_role(new_role, &block) - # Allow nesting of with_master. + old_fixed_state = fixed_role self.fixed_role = true - locks << true old_role = current_role set_role(new_role) yield ensure - locks.pop set_role(old_role) - self.fixed_role = false if locks.empty? + self.fixed_role = old_fixed_state end def spec_for(config) @@ -215,6 +201,14 @@ def current_role Thread.current["#{@model_class}_role"] || 'slave' end + def fixed_role=(arg) + Thread.current["#{@model_class}_fixed_role"] = arg + end + + def fixed_role + Thread.current["#{@model_class}_fixed_role"] || false + end + def master with_master { return connection } end