Skip to content

Commit dcc16cd

Browse files
fix(cache-metrics): increment/reset logic, use relaxed ordering (#109)
*Issue #, if available:* *Description of changes:* By submitting this pull request, I confirm that my contribution is made under the terms of the Apache 2.0 license.
1 parent 4e08f07 commit dcc16cd

File tree

1 file changed

+24
-32
lines changed
  • aws_secretsmanager_caching/src

1 file changed

+24
-32
lines changed

aws_secretsmanager_caching/src/lib.rs

Lines changed: 24 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -189,18 +189,17 @@ impl SecretsManagerCachingClient {
189189
if refresh_now {
190190
#[cfg(debug_assertions)]
191191
{
192-
let hit_rate = self.get_cache_hit_rate();
193-
let miss_rate = 100.0 - hit_rate;
194-
195192
self.increment_counter(&self.metrics.refreshes);
196193

194+
let (hit_rate, miss_rate) = self.get_cache_rates();
195+
197196
info!(
198-
"METRICS: Bypassing GSV. Refreshing secret '{}' immediately. Total refreshes: {}. \
199-
Total hits: {}. Total misses: {}. Hit rate: {:.2}%. Miss rate: {:.2}%",
197+
"METRICS: Bypassing cache. Refreshing secret '{}' immediately. \
198+
Total hits: {}. Total misses: {}. Total refreshes: {}. Hit rate: {:.2}%. Miss rate: {:.2}%",
200199
secret_id,
201-
self.get_counter_value(&self.metrics.refreshes),
202200
self.get_counter_value(&self.metrics.hits),
203201
self.get_counter_value(&self.metrics.misses),
202+
self.get_counter_value(&self.metrics.refreshes),
204203
hit_rate,
205204
miss_rate
206205
);
@@ -217,11 +216,10 @@ impl SecretsManagerCachingClient {
217216
Ok(r) => {
218217
#[cfg(debug_assertions)]
219218
{
220-
let hit_rate = self.get_cache_hit_rate();
221-
let miss_rate = 100.0 - hit_rate;
222-
223219
self.increment_counter(&self.metrics.hits);
224220

221+
let (hit_rate, miss_rate) = self.get_cache_rates();
222+
225223
info!(
226224
"METRICS: Cache HIT for secret '{}'. Total hits: {}. Total misses: {}. \
227225
Hit rate: {:.2}%. Miss rate: {:.2}%.",
@@ -238,11 +236,9 @@ impl SecretsManagerCachingClient {
238236
Err(SecretStoreError::ResourceNotFound) => {
239237
#[cfg(debug_assertions)]
240238
{
241-
let hit_rate = self.get_cache_hit_rate();
242-
let miss_rate = 100.0 - hit_rate;
243-
244239
self.increment_counter(&self.metrics.misses);
245-
self.increment_counter(&self.metrics.refreshes);
240+
241+
let (hit_rate, miss_rate) = self.get_cache_rates();
246242

247243
info!(
248244
"METRICS: Cache MISS for secret '{}'. Total hits: {}. Total misses: {}. \
@@ -263,18 +259,17 @@ impl SecretsManagerCachingClient {
263259
Err(SecretStoreError::CacheExpired(cached_value)) => {
264260
#[cfg(debug_assertions)]
265261
{
266-
let hit_rate = self.get_cache_hit_rate();
267-
let miss_rate = 100.0 - hit_rate;
262+
self.increment_counter(&self.metrics.misses);
268263

269-
self.increment_counter(&self.metrics.refreshes);
270-
self.reset_counter(&self.metrics.hits);
271-
self.reset_counter(&self.metrics.misses);
264+
let (hit_rate, miss_rate) = self.get_cache_rates();
272265

273266
info!(
274-
"METRICS: Cache expired. Resetting hits and misses. Total hits: {}. Total \
275-
misses: {}. Hit rate: {:.2}%. Miss rate: {:.2}%.",
267+
"METRICS: Cache entry expired for secret '{}'. Total hits: {}. Total \
268+
misses: {}. Total refreshes: {}. Hit rate: {:.2}%. Miss rate: {:.2}%.",
269+
secret_id,
276270
self.get_counter_value(&self.metrics.hits),
277271
self.get_counter_value(&self.metrics.misses),
272+
self.get_counter_value(&self.metrics.refreshes),
278273
hit_rate,
279274
miss_rate
280275
);
@@ -411,31 +406,28 @@ impl SecretsManagerCachingClient {
411406
}
412407

413408
#[cfg(debug_assertions)]
414-
fn get_cache_hit_rate(&self) -> f64 {
415-
let hits = self.metrics.hits.load(Ordering::SeqCst);
416-
let misses = self.metrics.misses.load(Ordering::SeqCst);
409+
fn get_cache_rates(&self) -> (f64, f64) {
410+
let hits = self.metrics.hits.load(Ordering::Relaxed);
411+
let misses = self.metrics.misses.load(Ordering::Relaxed);
417412
let total = hits + misses;
418413

419414
if total == 0 {
420-
return 0.0;
415+
return (0.0, 0.0);
421416
}
422417

423-
(hits as f64 / total as f64) * 100.0
424-
}
418+
let hit_rate = (hits as f64 / total as f64) * 100.0;
425419

426-
#[cfg(debug_assertions)]
427-
fn increment_counter(&self, counter: &AtomicU32) -> () {
428-
counter.fetch_add(1, Ordering::SeqCst);
420+
(hit_rate, 100.0 - hit_rate)
429421
}
430422

431423
#[cfg(debug_assertions)]
432-
fn reset_counter(&self, counter: &AtomicU32) -> () {
433-
counter.store(0, Ordering::SeqCst);
424+
fn increment_counter(&self, counter: &AtomicU32) -> () {
425+
counter.fetch_add(1, Ordering::Relaxed);
434426
}
435427

436428
#[cfg(debug_assertions)]
437429
fn get_counter_value(&self, counter: &AtomicU32) -> u32 {
438-
counter.load(Ordering::SeqCst)
430+
counter.load(Ordering::Relaxed)
439431
}
440432
}
441433

0 commit comments

Comments
 (0)