00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018 #pragma once
00019
00020 enum flush_type
00021 {
00022 FLUSH_KEEP,
00023 FLUSH_RELEASE,
00024 FLUSH_IGNORE_CHANGED,
00025
00026
00027
00028
00029 FLUSH_FORCE_WRITE
00030 };
00031
00032
00033
00034
00035 struct st_block_link;
00036 typedef struct st_block_link BLOCK_LINK;
00037 struct st_keycache_page;
00038 typedef struct st_keycache_page KEYCACHE_PAGE;
00039 struct st_hash_link;
00040 typedef struct st_hash_link HASH_LINK;
00041
00042 namespace drizzled
00043 {
00044 namespace internal
00045 {
00046 typedef uint64_t my_off_t;
00047 struct st_my_thread_var;
00048 }
00049
00050
00051 typedef struct st_keycache_wqueue
00052 {
00053 drizzled::internal::st_my_thread_var *last_thread;
00054 } KEYCACHE_WQUEUE;
00055
00056 #define CHANGED_BLOCKS_HASH 128
00057
00058
00059
00060
00061
00062
00063 typedef struct st_key_cache
00064 {
00065 bool key_cache_inited;
00066 bool can_be_used;
00067
00068 uint32_t key_cache_block_size;
00069
00070 int blocks;
00071
00072 bool in_init;
00073
00074 st_key_cache():
00075 key_cache_inited(false),
00076 can_be_used(false),
00077 key_cache_block_size(0),
00078 blocks(0),
00079 in_init(0)
00080 { }
00081
00082 } KEY_CACHE;
00083
00084 }
00085
00086
00087 extern int init_key_cache(drizzled::KEY_CACHE *keycache, uint32_t key_cache_block_size,
00088 size_t use_mem, uint32_t division_limit,
00089 uint32_t age_threshold);
00090 extern unsigned char *key_cache_read(drizzled::KEY_CACHE *keycache,
00091 int file, drizzled::internal::my_off_t filepos, int level,
00092 unsigned char *buff, uint32_t length,
00093 uint32_t block_length,int return_buffer);
00094 extern int key_cache_insert(drizzled::KEY_CACHE *keycache,
00095 int file, drizzled::internal::my_off_t filepos, int level,
00096 unsigned char *buff, uint32_t length);
00097 extern int key_cache_write(drizzled::KEY_CACHE *keycache,
00098 int file, drizzled::internal::my_off_t filepos, int level,
00099 unsigned char *buff, uint32_t length,
00100 uint32_t block_length,int force_write);
00101 extern int flush_key_blocks(drizzled::KEY_CACHE *keycache,
00102 int file, enum flush_type type);
00103 extern void end_key_cache(drizzled::KEY_CACHE *keycache, bool cleanup);
00104
00105
00106
00107
00108
00109
00110
00111
00112
00113
00114
00115
00116
00117
00118
00119
00120
00121
00122
00123
00124 static inline uint32_t my_round_up_to_next_power(uint32_t v)
00125 {
00126 v--;
00127 v|= v >> 1;
00128 v|= v >> 2;
00129 v|= v >> 4;
00130 v|= v >> 8;
00131 v|= v >> 16;
00132 return v+1;
00133 }
00134
00135