aboutsummaryrefslogtreecommitdiffstats
path: root/activesupport/lib/active_support/cache
diff options
context:
space:
mode:
authorEugene Kenny <elkenny@gmail.com>2017-05-14 23:24:37 +0100
committerEugene Kenny <elkenny@gmail.com>2017-05-14 23:24:37 +0100
commitdb9ae5f1e1449b09c08d55a8a3a21ff61d904bd3 (patch)
treecd25726d1aca26bb5de9cebca7c0728635e9645c /activesupport/lib/active_support/cache
parentd48008f16438c2c9c9c7295f550568b82b95ef9e (diff)
downloadrails-db9ae5f1e1449b09c08d55a8a3a21ff61d904bd3.tar.gz
rails-db9ae5f1e1449b09c08d55a8a3a21ff61d904bd3.tar.bz2
rails-db9ae5f1e1449b09c08d55a8a3a21ff61d904bd3.zip
Don't cache locally if unless_exist was passed
Some cache backends support the `unless_exist` option, which tells them not to overwrite an existing entry. The local cache currently always stores the new value, even though the backend may have rejected it. Since we can't tell which value will end up in the backend cache, we should delete the key from the local cache, so that the next read for that key will go to the backend and pick up the correct value.
Diffstat (limited to 'activesupport/lib/active_support/cache')
-rw-r--r--activesupport/lib/active_support/cache/strategy/local_cache.rb7
1 files changed, 6 insertions, 1 deletions
diff --git a/activesupport/lib/active_support/cache/strategy/local_cache.rb b/activesupport/lib/active_support/cache/strategy/local_cache.rb
index 672eb2bb80..91875a56f5 100644
--- a/activesupport/lib/active_support/cache/strategy/local_cache.rb
+++ b/activesupport/lib/active_support/cache/strategy/local_cache.rb
@@ -115,7 +115,12 @@ module ActiveSupport
end
def write_entry(key, entry, options)
- local_cache.write_entry(key, entry, options) if local_cache
+ if options[:unless_exist]
+ local_cache.delete_entry(key, options) if local_cache
+ else
+ local_cache.write_entry(key, entry, options) if local_cache
+ end
+
super
end