1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130
|
/*
+----------------------------------------------------------------------+
| Yet Another Cache |
+----------------------------------------------------------------------+
| Copyright (c) 2013-2013 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
| available through the world-wide-web at the following url: |
| http://www.php.net/license/3_01.txt |
| If you did not receive a copy of the PHP license and are unable to |
| obtain it through the world-wide-web, please send a note to |
| license@php.net so we can mail you a copy immediately. |
+----------------------------------------------------------------------+
| Author: Xinchen Hui <laruence@php.net> |
+----------------------------------------------------------------------+
*/
/* $Id$ */
#ifndef YAC_STORAGE_H
#define YAC_STORAGE_H
#define YAC_STORAGE_MAX_ENTRY_LEN (1 << 20)
#define YAC_STORAGE_MAX_KEY_LEN (48)
#define YAC_STORAGE_FACTOR (1.25)
#define YAC_KEY_KLEN_MASK (255)
#define YAC_KEY_VLEN_BITS (8)
#define YAC_KEY_KLEN(k) ((k).len & YAC_KEY_KLEN_MASK)
#define YAC_KEY_VLEN(k) ((k).len >> YAC_KEY_VLEN_BITS)
#define YAC_KEY_SET_LEN(k, kl, vl) ((k).len = (vl << YAC_KEY_VLEN_BITS) | (kl & YAC_KEY_KLEN_MASK))
#define YAC_FULL_CRC_THRESHOLD 256
#define USER_ALLOC emalloc
#define USER_FREE efree
typedef struct {
unsigned long atime;
unsigned int len;
char data[1];
} yac_kv_val;
typedef struct {
unsigned long h;
unsigned int crc;
unsigned int ttl;
unsigned int len;
unsigned int flag;
unsigned int size;
unsigned int mutex;
yac_kv_val *val;
unsigned char key[YAC_STORAGE_MAX_KEY_LEN];
} yac_kv_key;
typedef struct _yac_item_list {
unsigned int index;
unsigned long h;
unsigned long crc;
unsigned int ttl;
unsigned int k_len;
unsigned int v_len;
unsigned int flag;
unsigned int size;
unsigned char key[YAC_STORAGE_MAX_KEY_LEN];
struct _yac_item_list *next;
} yac_item_list;
typedef struct {
volatile unsigned int pos;
unsigned int size;
void *p;
} yac_shared_segment;
typedef struct {
unsigned long k_msize;
unsigned long v_msize;
unsigned int segments_num;
unsigned int segment_size;
unsigned int slots_num;
unsigned int slots_size;
unsigned int miss;
unsigned int fails;
unsigned int kicks;
unsigned int recycles;
unsigned long hits;
} yac_storage_info;
typedef struct {
yac_kv_key *slots;
unsigned int slots_mask;
unsigned int slots_num;
unsigned int slots_size;
unsigned int miss;
unsigned int fails;
unsigned int kicks;
unsigned int recycles;
unsigned long hits;
yac_shared_segment **segments;
unsigned int segments_num;
unsigned int segments_num_mask;
yac_shared_segment first_seg;
} yac_storage_globals;
extern yac_storage_globals *yac_storage;
#define YAC_SG(element) (yac_storage->element)
int yac_storage_startup(unsigned long first_size, unsigned long size, char **err);
void yac_storage_shutdown(void);
int yac_storage_find(const char *key, unsigned int len, char **data, unsigned int *size, unsigned int *flag, int *cas, unsigned long tv);
int yac_storage_update(const char *key, unsigned int len, char *data, unsigned int size, unsigned int falg, int ttl, int add, unsigned long tv);
int yac_storage_delete(const char *key, unsigned int len, int ttl, unsigned long tv);
void yac_storage_flush(void);
const char * yac_storage_shared_memory_name(void);
yac_storage_info * yac_storage_get_info(void);
void yac_storage_free_info(yac_storage_info *info);
yac_item_list * yac_storage_dump(unsigned int limit);
void yac_storage_free_list(yac_item_list *list);
#define yac_storage_exists(ht, key, len) yac_storage_find(ht, key, len, NULL)
#endif /* YAC_STORAGE_H */
/*
* Local variables:
* tab-width: 4
* c-basic-offset: 4
* End:
* vim600: noet sw=4 ts=4 fdm=marker
* vim<600: noet sw=4 ts=4
*/
|