|
Packit |
4e8bc4 |
#define HOT_LRU 0
|
|
Packit |
4e8bc4 |
#define WARM_LRU 64
|
|
Packit |
4e8bc4 |
#define COLD_LRU 128
|
|
Packit |
4e8bc4 |
#define TEMP_LRU 192
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
#define CLEAR_LRU(id) (id & ~(3<<6))
|
|
Packit |
4e8bc4 |
#define GET_LRU(id) (id & (3<<6))
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
/* See items.c */
|
|
Packit |
4e8bc4 |
uint64_t get_cas_id(void);
|
|
Packit |
4e8bc4 |
void set_cas_id(uint64_t new_cas);
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
/*@null@*/
|
|
Packit |
4e8bc4 |
item *do_item_alloc(char *key, const size_t nkey, const unsigned int flags, const rel_time_t exptime, const int nbytes);
|
|
Packit |
4e8bc4 |
item_chunk *do_item_alloc_chunk(item_chunk *ch, const size_t bytes_remain);
|
|
Packit |
4e8bc4 |
item *do_item_alloc_pull(const size_t ntotal, const unsigned int id);
|
|
Packit |
4e8bc4 |
void item_free(item *it);
|
|
Packit |
4e8bc4 |
bool item_size_ok(const size_t nkey, const int flags, const int nbytes);
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
int do_item_link(item *it, const uint32_t hv); /** may fail if transgresses limits */
|
|
Packit |
4e8bc4 |
void do_item_unlink(item *it, const uint32_t hv);
|
|
Packit |
4e8bc4 |
void do_item_unlink_nolock(item *it, const uint32_t hv);
|
|
Packit |
4e8bc4 |
void do_item_remove(item *it);
|
|
Packit |
4e8bc4 |
void do_item_update(item *it); /** update LRU time to current and reposition */
|
|
Packit |
4e8bc4 |
void do_item_update_nolock(item *it);
|
|
Packit |
4e8bc4 |
int do_item_replace(item *it, item *new_it, const uint32_t hv);
|
|
Packit |
4e8bc4 |
void do_item_link_fixup(item *it);
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
int item_is_flushed(item *it);
|
|
Packit |
4e8bc4 |
unsigned int do_get_lru_size(uint32_t id);
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
void do_item_linktail_q(item *it);
|
|
Packit |
4e8bc4 |
void do_item_unlinktail_q(item *it);
|
|
Packit |
4e8bc4 |
item *do_item_crawl_q(item *it);
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
void *item_lru_bump_buf_create(void);
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
#define LRU_PULL_EVICT 1
|
|
Packit |
4e8bc4 |
#define LRU_PULL_CRAWL_BLOCKS 2
|
|
Packit |
4e8bc4 |
#define LRU_PULL_RETURN_ITEM 4 /* fill info struct if available */
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
struct lru_pull_tail_return {
|
|
Packit |
4e8bc4 |
item *it;
|
|
Packit |
4e8bc4 |
uint32_t hv;
|
|
Packit |
4e8bc4 |
};
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
int lru_pull_tail(const int orig_id, const int cur_lru,
|
|
Packit |
4e8bc4 |
const uint64_t total_bytes, const uint8_t flags, const rel_time_t max_age,
|
|
Packit |
4e8bc4 |
struct lru_pull_tail_return *ret_it);
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
/*@null@*/
|
|
Packit |
4e8bc4 |
char *item_cachedump(const unsigned int slabs_clsid, const unsigned int limit, unsigned int *bytes);
|
|
Packit |
4e8bc4 |
void item_stats(ADD_STAT add_stats, void *c);
|
|
Packit |
4e8bc4 |
void do_item_stats_add_crawl(const int i, const uint64_t reclaimed,
|
|
Packit |
4e8bc4 |
const uint64_t unfetched, const uint64_t checked);
|
|
Packit |
4e8bc4 |
void item_stats_totals(ADD_STAT add_stats, void *c);
|
|
Packit |
4e8bc4 |
/*@null@*/
|
|
Packit |
4e8bc4 |
void item_stats_sizes(ADD_STAT add_stats, void *c);
|
|
Packit |
4e8bc4 |
void item_stats_sizes_init(void);
|
|
Packit |
4e8bc4 |
void item_stats_sizes_enable(ADD_STAT add_stats, void *c);
|
|
Packit |
4e8bc4 |
void item_stats_sizes_disable(ADD_STAT add_stats, void *c);
|
|
Packit |
4e8bc4 |
void item_stats_sizes_add(item *it);
|
|
Packit |
4e8bc4 |
void item_stats_sizes_remove(item *it);
|
|
Packit |
4e8bc4 |
bool item_stats_sizes_status(void);
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
/* stats getter for slab automover */
|
|
Packit |
4e8bc4 |
typedef struct {
|
|
Packit |
4e8bc4 |
int64_t evicted;
|
|
Packit |
4e8bc4 |
int64_t outofmemory;
|
|
Packit |
4e8bc4 |
uint32_t age;
|
|
Packit |
4e8bc4 |
} item_stats_automove;
|
|
Packit |
4e8bc4 |
void fill_item_stats_automove(item_stats_automove *am);
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
item *do_item_get(const char *key, const size_t nkey, const uint32_t hv, conn *c, const bool do_update);
|
|
Packit |
4e8bc4 |
item *do_item_touch(const char *key, const size_t nkey, uint32_t exptime, const uint32_t hv, conn *c);
|
|
Packit |
4e8bc4 |
void do_item_bump(conn *c, item *it, const uint32_t hv);
|
|
Packit |
4e8bc4 |
void item_stats_reset(void);
|
|
Packit |
4e8bc4 |
extern pthread_mutex_t lru_locks[POWER_LARGEST];
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
int start_lru_maintainer_thread(void *arg);
|
|
Packit |
4e8bc4 |
int stop_lru_maintainer_thread(void);
|
|
Packit |
4e8bc4 |
int init_lru_maintainer(void);
|
|
Packit |
4e8bc4 |
void lru_maintainer_pause(void);
|
|
Packit |
4e8bc4 |
void lru_maintainer_resume(void);
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
void *lru_bump_buf_create(void);
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
#ifdef EXTSTORE
|
|
Packit |
4e8bc4 |
#define STORAGE_delete(e, it) \
|
|
Packit |
4e8bc4 |
do { \
|
|
Packit |
4e8bc4 |
if (it->it_flags & ITEM_HDR) { \
|
|
Packit |
4e8bc4 |
item_hdr *hdr = (item_hdr *)ITEM_data(it); \
|
|
Packit |
4e8bc4 |
extstore_delete(e, hdr->page_id, hdr->page_version, \
|
|
Packit |
4e8bc4 |
1, ITEM_ntotal(it)); \
|
|
Packit |
4e8bc4 |
} \
|
|
Packit |
4e8bc4 |
} while (0)
|
|
Packit |
4e8bc4 |
#else
|
|
Packit |
4e8bc4 |
#define STORAGE_delete(...)
|
|
Packit |
4e8bc4 |
#endif
|