3030
3131#include " tscore/hugepages.h"
3232#include " tscore/Random.h"
33+ #include " ts/ats_probe.h"
3334
3435#ifdef LOOP_CHECK_MODE
3536#define DIR_LOOP_THRESHOLD 1000
@@ -327,6 +328,9 @@ dir_delete_entry(Dir *e, Dir *p, int s, Directory *directory)
327328 } else {
328329 Dir *n = next_dir (e, seg);
329330 if (n) {
331+ // "Shuffle" here means that we're copying the second entry's data to the head entry's location, and removing the second entry
332+ // - because the head entry can't be moved.
333+ ATS_PROBE3 (cache_dir_shuffle, s, dir_to_offset (e, seg), dir_to_offset (n, seg));
330334 dir_assign (e, n);
331335 dir_delete_entry (n, e, s, directory);
332336 return e;
@@ -339,7 +343,7 @@ dir_delete_entry(Dir *e, Dir *p, int s, Directory *directory)
339343}
340344
341345inline void
342- dir_clean_bucket (Dir *b, int s, Stripe *stripe)
346+ dir_clean_bucket (Dir *b, int s, StripeSM *stripe)
343347{
344348 Dir *e = b, *p = nullptr ;
345349 Dir *seg = stripe->directory .get_segment (s);
@@ -363,6 +367,8 @@ dir_clean_bucket(Dir *b, int s, Stripe *stripe)
363367 ts::Metrics::Gauge::decrement (cache_rsb.direntries_used );
364368 ts::Metrics::Gauge::decrement (stripe->cache_vol ->vol_rsb .direntries_used );
365369 }
370+ // Match cache_dir_remove arguments
371+ ATS_PROBE7 (cache_dir_remove_clean_bucket, stripe->fd , s, dir_to_offset (e, seg), dir_offset (e), dir_approx_size (e), 0 , 0 );
366372 e = dir_delete_entry (e, p, s, &stripe->directory );
367373 continue ;
368374 }
@@ -372,7 +378,7 @@ dir_clean_bucket(Dir *b, int s, Stripe *stripe)
372378}
373379
374380void
375- Directory::clean_segment (int s, Stripe *stripe)
381+ Directory::clean_segment (int s, StripeSM *stripe)
376382{
377383 Dir *seg = this ->get_segment (s);
378384 for (int64_t i = 0 ; i < this ->buckets ; i++) {
@@ -382,7 +388,7 @@ Directory::clean_segment(int s, Stripe *stripe)
382388}
383389
384390void
385- Directory::cleanup (Stripe *stripe)
391+ Directory::cleanup (StripeSM *stripe)
386392{
387393 for (int64_t i = 0 ; i < this ->segments ; i++) {
388394 this ->clean_segment (i, stripe);
@@ -391,7 +397,7 @@ Directory::cleanup(Stripe *stripe)
391397}
392398
393399void
394- Directory::clear_range (off_t start, off_t end, Stripe *stripe)
400+ Directory::clear_range (off_t start, off_t end, StripeSM *stripe)
395401{
396402 for (off_t i = 0 ; i < this ->entries (); i++) {
397403 Dir *e = dir_index (stripe, i);
@@ -522,6 +528,8 @@ Directory::probe(const CacheKey *key, StripeSM *stripe, Dir *result, Dir **last_
522528 } else { // delete the invalid entry
523529 ts::Metrics::Gauge::decrement (cache_rsb.direntries_used );
524530 ts::Metrics::Gauge::decrement (stripe->cache_vol ->vol_rsb .direntries_used );
531+ ATS_PROBE7 (cache_dir_remove_invalid, stripe->fd , s, dir_to_offset (e, seg), dir_offset (e), dir_approx_size (e),
532+ key->slice64 (0 ), key->slice64 (1 ));
525533 e = dir_delete_entry (e, p, s, this );
526534 continue ;
527535 }
@@ -605,6 +613,8 @@ Directory::insert(const CacheKey *key, StripeSM *stripe, Dir *to_part)
605613 ink_assert (stripe->vol_offset (e) < (stripe->skip + stripe->len ));
606614 DDbg (dbg_ctl_dir_insert, " insert %p %X into vol %d bucket %d at %p tag %X %X boffset %" PRId64 " " , e, key->slice32 (0 ), stripe->fd ,
607615 bi, e, key->slice32 (1 ), dir_tag (e), dir_offset (e));
616+ ATS_PROBE7 (cache_dir_insert, stripe->fd , s, dir_to_offset (e, seg), dir_offset (e), dir_approx_size (e), key->slice64 (0 ),
617+ key->slice64 (1 ));
608618 CHECK_DIR (d);
609619 stripe->directory .header ->dirty = 1 ;
610620 ts::Metrics::Gauge::increment (cache_rsb.direntries_used );
@@ -724,9 +734,12 @@ Directory::remove(const CacheKey *key, StripeSM *stripe, Dir *del)
724734 return 0 ;
725735 }
726736#endif
727- if (dir_compare_tag (e, key) && dir_offset (e) == dir_offset (del)) {
737+ int64_t offset = dir_offset (e);
738+ if (dir_compare_tag (e, key) && offset == dir_offset (del)) {
728739 ts::Metrics::Gauge::decrement (cache_rsb.direntries_used );
729740 ts::Metrics::Gauge::decrement (stripe->cache_vol ->vol_rsb .direntries_used );
741+ ATS_PROBE7 (cache_dir_remove, stripe->fd , s, dir_to_offset (e, seg), offset, dir_approx_size (e), key->slice64 (0 ),
742+ key->slice64 (1 ));
730743 dir_delete_entry (e, p, s, this );
731744 CHECK_DIR (d);
732745 return 1 ;
0 commit comments