1 #define HOT_LRU 0
2 #define WARM_LRU 64
3 #define COLD_LRU 128
4 #define TEMP_LRU 192
5 
6 #define CLEAR_LRU(id) (id & ~(3<<6))
7 #define GET_LRU(id) (id & (3<<6))
8 
9 /* See items.c */
10 uint64_t get_cas_id(void);
11 void set_cas_id(uint64_t new_cas);
12 
13 /*@null@*/
14 item *do_item_alloc(const char *key, const size_t nkey, const client_flags_t flags, const rel_time_t exptime, const int nbytes);
15 item_chunk *do_item_alloc_chunk(item_chunk *ch, const size_t bytes_remain);
16 item *do_item_alloc_pull(const size_t ntotal, const unsigned int id);
17 void item_free(item *it);
18 bool item_size_ok(const size_t nkey, const client_flags_t flags, const int nbytes);
19 
20 int  do_item_link(item *it, const uint32_t hv, const uint64_t cas);     /** may fail if transgresses limits */
21 void do_item_unlink(item *it, const uint32_t hv);
22 void do_item_unlink_nolock(item *it, const uint32_t hv);
23 void do_item_remove(item *it);
24 void do_item_update(item *it);   /** update LRU time to current and reposition */
25 void do_item_update_nolock(item *it);
26 int  do_item_replace(item *it, item *new_it, const uint32_t hv, const uint64_t cas);
27 void do_item_link_fixup(item *it);
28 
29 int item_is_flushed(item *it);
30 unsigned int do_get_lru_size(uint32_t id);
31 
32 void do_item_linktail_q(item *it);
33 void do_item_unlinktail_q(item *it);
34 item *do_item_crawl_q(item *it);
35 
36 void *item_lru_bump_buf_create(void);
37 
38 #define LRU_PULL_EVICT 1
39 #define LRU_PULL_CRAWL_BLOCKS 2
40 #define LRU_PULL_RETURN_ITEM 4 /* fill info struct if available */
41 
42 struct lru_pull_tail_return {
43     item *it;
44     uint32_t hv;
45 };
46 
47 int lru_pull_tail(const int orig_id, const int cur_lru,
48         const uint64_t total_bytes, const uint8_t flags, const rel_time_t max_age,
49         struct lru_pull_tail_return *ret_it);
50 void item_flush_expired(void);
51 
52 /*@null@*/
53 char *item_cachedump(const unsigned int slabs_clsid, const unsigned int limit, unsigned int *bytes);
54 void item_stats(ADD_STAT add_stats, void *c);
55 void do_item_stats_add_crawl(const int i, const uint64_t reclaimed,
56         const uint64_t unfetched, const uint64_t checked);
57 void item_stats_totals(ADD_STAT add_stats, void *c);
58 /*@null@*/
59 void item_stats_sizes(ADD_STAT add_stats, void *c);
60 void item_stats_sizes_init(void);
61 void item_stats_sizes_add(item *it);
62 void item_stats_sizes_remove(item *it);
63 bool item_stats_sizes_status(void);
64 
65 /* stats getter for slab automover */
66 typedef struct {
67     int64_t evicted;
68     int64_t outofmemory;
69     uint32_t age;
70 } item_stats_automove;
71 void fill_item_stats_automove(item_stats_automove *am);
72 
73 item *do_item_get(const char *key, const size_t nkey, const uint32_t hv, LIBEVENT_THREAD *t, const bool do_update);
74 item *do_item_touch(const char *key, const size_t nkey, uint32_t exptime, const uint32_t hv, LIBEVENT_THREAD *t);
75 void do_item_bump(LIBEVENT_THREAD *t, item *it, const uint32_t hv);
76 void item_stats_reset(void);
77 extern pthread_mutex_t lru_locks[POWER_LARGEST];
78 
79 int start_lru_maintainer_thread(void *arg);
80 int stop_lru_maintainer_thread(void);
81 void lru_maintainer_pause(void);
82 void lru_maintainer_resume(void);
83 
84 void *lru_bump_buf_create(void);
85