incrdecr_cached_counts 0.5.0 → 0.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/incrdecr_cached_counts.gemspec +1 -0
- data/lib/cached_counts/version.rb +1 -1
- data/lib/cached_counts.rb +12 -19
- metadata +17 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 65f000f6f11bec569b0c22d96041b54a76c7ae97fa8cad585f9652e1ccc298ea
|
4
|
+
data.tar.gz: 1f16dee9e6cef13c66c96de022a894461769ee09fc47871ee6c68645d7efee22
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 44a2889f0308a275bac293e526106ddedeffd947224737613a7dec6c050d07e4b9e8a2c3ab2326a6cdc321fad3bbbc8bd3078a0c6d240fab6cd5427968d5ea01
|
7
|
+
data.tar.gz: 8beafe928a06926c652e3130e41aab35fc5f362b1fa56189c0d04bda9cf52904eadc9b741f48d664f331b6aa2a5ec7ad0bbe1513fd387af292119217de904dff
|
data/lib/cached_counts.rb
CHANGED
@@ -156,19 +156,9 @@ module CachedCounts
|
|
156
156
|
end
|
157
157
|
|
158
158
|
def default_race_condition_fallback_proc(key, relation, options)
|
159
|
-
fallback = Rails.cache.read(key)
|
159
|
+
fallback = Rails.cache.read(key, raw: true)
|
160
160
|
fallback = fallback.value if fallback.is_a?(ActiveSupport::Cache::Entry)
|
161
161
|
|
162
|
-
if fallback.nil?
|
163
|
-
begin
|
164
|
-
fallback = relation.count
|
165
|
-
rescue ActiveRecord::StatementInvalid => e
|
166
|
-
fallback = 0
|
167
|
-
end
|
168
|
-
|
169
|
-
Rails.cache.write key, fallback, expires_in: options.fetch(:expires_in, 1.week), raw: true
|
170
|
-
end
|
171
|
-
|
172
162
|
-> { fallback }
|
173
163
|
end
|
174
164
|
|
@@ -186,7 +176,7 @@ module CachedCounts
|
|
186
176
|
|
187
177
|
# Try to fetch values for ids from the cache. If it's a miss return the default value
|
188
178
|
define_singleton_method "try_#{attr_name}_counts_for" do |ids, default=nil|
|
189
|
-
raw_result = Rails.cache.read_multi(*ids.map{|id| association_count_key(id, attribute_name, version)})
|
179
|
+
raw_result = Rails.cache.read_multi(*ids.map{|id| association_count_key(id, attribute_name, version)}, raw: true)
|
190
180
|
|
191
181
|
result = {}
|
192
182
|
ids.each do |id|
|
@@ -253,13 +243,16 @@ module CachedCounts
|
|
253
243
|
# Ensure that other reads find something in the cache, but
|
254
244
|
# continue calculating here because the default is likely inaccurate.
|
255
245
|
fallback_value = instance_exec &race_condition_fallback
|
256
|
-
|
257
|
-
|
258
|
-
send(key_method)
|
259
|
-
|
260
|
-
|
261
|
-
|
262
|
-
|
246
|
+
|
247
|
+
if fallback_value
|
248
|
+
CachedCounts.logger.warn "Setting #{fallback_value} as race_condition_fallback for #{send(key_method)}"
|
249
|
+
Rails.cache.write(
|
250
|
+
send(key_method),
|
251
|
+
fallback_value.to_i,
|
252
|
+
expires_in: 30.seconds,
|
253
|
+
raw: true
|
254
|
+
)
|
255
|
+
end
|
263
256
|
end
|
264
257
|
|
265
258
|
relation = instance_exec(&relation_getter)
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: incrdecr_cached_counts
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.7.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- David Judd
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2025-03-14 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
@@ -38,6 +38,20 @@ dependencies:
|
|
38
38
|
- - ">="
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: concurrent-ruby
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - '='
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: 1.3.4
|
48
|
+
type: :runtime
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - '='
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: 1.3.4
|
41
55
|
- !ruby/object:Gem::Dependency
|
42
56
|
name: sqlite3
|
43
57
|
requirement: !ruby/object:Gem::Requirement
|
@@ -143,7 +157,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
143
157
|
- !ruby/object:Gem::Version
|
144
158
|
version: '0'
|
145
159
|
requirements: []
|
146
|
-
rubygems_version: 3.
|
160
|
+
rubygems_version: 3.4.10
|
147
161
|
signing_key:
|
148
162
|
specification_version: 4
|
149
163
|
summary: A replacement for Rails' counter caches using memcached (via Dalli)
|