acl  3.5.3.0
zdb.h
浏览该文件的文档.
1 #ifndef ACL_ZDB_INCLUDE_H
2 #define ACL_ZDB_INCLUDE_H
3 
4 #include "../stdlib/acl_define.h"
5 #include "../stdlib/acl_vstring.h"
6 #include "../stdlib/acl_fhandle.h"
7 
8 #ifndef ACL_CLIENT_ONLY
9 
10 typedef struct ZDB ZDB;
11 typedef struct ZDB_KEY_HDR ZDB_KEY_HDR;
12 typedef struct ZDB_BLK ZDB_BLK;
13 typedef struct ZDB_BLK_OFF ZDB_BLK_OFF;
14 typedef struct ZDB_DAT_HDR ZDB_DAT_HDR;
17 typedef struct ZDB_IO ZDB_IO;
18 
19 /* 偏移量的长度类型 */
20 typedef acl_int64 zdb_off_t;
21 
22 /* 键类型定义 */
23 typedef acl_int64 zdb_key_t;
24 
25 /* 值存储中空闲数据块链接偏移量类型 */
26 typedef int zdb_lnk_t;
27 
28 /* 磁盘分区信息类型 */
29 typedef struct ZDB_DISK {
30  acl_int64 limit; /* 该分区的总数限制 */
31  acl_int64 count; /* 目前该分区已分配数量 */
32  char *path; /* 磁盘分区路径 */
33  int idisk; /* 该磁盘分区号 */
34  int priority; /* 权重优先级 */
35  int *dat_ifiles; /* 当前可用的 dat_ifile 值存储文件索引号 */
36  int dat_ifiles_size; /* dat_ifiles 的大小 */
37 } ZDB_DISK;
38 
39 /* 调用 zdb_open() 时的 ZDB 配置对象 */
40 typedef struct ZDB_CFG {
41  const char *key_path; /* 键存储所在的根目录 */
42  zdb_key_t key_begin; /* 键值的起始值 */
43  zdb_key_t key_limit; /* 每个键存储文件中键的最大个数 */
44  acl_int64 dat_limit; /* 每个值存储文件中数据的最大个数 */
45 
46  int key_cache_max; /* 启用键存储 IO 缓存时的最大缓存数据块个数 */
47  int key_cache_timeout; /* 启用键存储 IO 缓存时每个缓存块的过期时间 */
48  int key_wback_max; /* 启用键存储 IO 缓存时写缓存的最大缓存数据块个数 */
49 
50  int dat_nstep; /* 值存储中增加数据块时的步进值 */
51  int blk_dlen; /* 值存储中数据块中数据部分的长度(等于用户数据长度) */
52  int dat_cache_max; /* 启用值存储 IO 缓存时的最大缓存数据块个数 */
53  int dat_cache_timeout; /* 启用值存储 IO 缓存时每个缓存块的过期时间 */
54  int dat_wback_max; /* 启用值存储 IO 缓存时写缓存的最大缓存数据块个数 */
55 } ZDB_CFG;
56 
57 /* ZDB 结构类型 */
58 struct ZDB {
59  /* public */
60 
61  char *dbname; /* 数据库名 */
62  char *key_path; /* ZDB 的key存储路径 */
63  unsigned int oflags; /* 打开时的标志位 */
64 #define ZDB_FLAG_LINK_BUSY (1 << 0) /* 将值存储中的占用数据块连接起来 */
65 #define ZDB_FLAG_OPEN_LOCK (1 << 1) /* 以加锁模式打开存储句柄 */
66 #define ZDB_FLAG_CACHE_DAT (1 << 2) /* 是否缓存值存储的数据 */
67 #define ZDB_FLAG_CACHE_KEY (1 << 3) /* 是否缓存键存储的数据 */
68 #define ZDB_FLAG_SLICE_KEY (1 << 4) /* 启用值存储时是否采用内存切片方式 */
69 #define ZDB_FLAG_SLICE_DAT (1 << 5) /* 启用键存储时是否采用内存切片方式 */
70 
71  unsigned int status; /* 状态位 */
72 #define ZDB_STAT_KEY_NEW (1 << 0) /* 新键 */
73 
74  /* private */
75 
76  zdb_key_t key_begin; /* 所有键存储的起始值 */
77  zdb_key_t key_limit; /* 每个键存储中键的个数的最大值 */
78  int key_cache_max; /* 启用键存储 IO 缓存时的最大缓存数据块个数 */
79  int key_cache_timeout; /* 启用键存储 IO 缓存时每个缓存块的过期时间 */
80  int key_wback_max; /* 启用键存储 IO 缓存时写缓存的最大缓存数据块个数 */
81 
82  acl_int64 dat_limit; /* 值存储中值对象存储个数限制 */
83  int blk_dlen; /* 值存储中数据块中每个基础块单元长度 */
84  int dat_nstep; /* 值存储中每次增加数据块的个数 */
85  int dat_cache_max; /* 启用值存储 IO 缓存时的最大缓存数据块个数 */
86  int dat_cache_timeout; /* 启用值存储 IO 缓存时每个缓存块的过期时间 */
87  int dat_wback_max; /* 启用值存储 IO 缓存时写缓存的最大缓存数据块个数 */
88 
89  ZDB_DISK *dat_disks; /* 值存储磁盘分区数组 */
90 
92  int (*key_set) (ZDB*, zdb_key_t, const ZDB_BLK_OFF*);
93 
94  ZDB_BLK *(*dat_get)(ZDB*, const ZDB_BLK_OFF*, zdb_key_t*, size_t*);
95  int (*dat_add)(ZDB*, zdb_key_t, const void*, int);
96  int (*dat_update)(ZDB*, zdb_key_t, const ZDB_BLK_OFF*,
97  const void*, size_t);
98 
99  /* private */
100 
101  /* 以下为临时变量 */
102 
103  ACL_VSTRING *path_tmp; /* 临时用的存储文件的全路径, 主要为了参数传递 */
104  int blk_count_tmp; /* 临时用的块数, 主要为了参数传递 */
105  int inode_tmp; /* 临时用的相对路径号,主要为了参数传递 */
106 };
107 
108 /* xxx: 为了保证跨平台性,以下结构定义都是4字节对齐的 */
109 
110 #ifdef ACL_SUNOS5
111 #pragma pack(4)
112 #else
113 #pragma pack(push, 4)
114 #endif
115 
116 /* 值存储头 */
117 struct ZDB_DAT_HDR {
118  acl_int64 limit; /* 值存储中值对象存储个数限制 */
119  acl_int64 size; /* 当前值存储文件已经分配的对象存储的个数 */
120  acl_int64 count; /* 当前值存储中的总数 */
121  acl_int64 reserv1; /* 保留字段 */
122  acl_int64 reserv2; /* 保留字段 */
123  acl_int64 reserv3; /* 保留字段 */
124  acl_int64 reserv4; /* 保留字段 */
125  int nstep; /* 每次增加时值存储文件大小时的步进值大小 */
126  int blk_hdr_dlen; /* 值存储中每块数据的头部长度: ZDB_BLK_HDR.sizeof */
127  int blk_dlen; /* 值存储中数据块中每个基础块单元长度 */
128  int blk_count; /* 该值存储中的数据块中基础块个数 */
129 
130  /* 第一个空闲块的位置的真实具体位置的计算公式为:
131  * zdb_off_t off_head = ZDB_DAT_HDR.sizeof +
132  * ZDB_DAT_HDR.ihead_idle * (ZDB_DAT_HDR.blk_hdr_dlen +
133  * ZDB_DAT_HDR.blk_dlen * ZDB_DAT_HDR.blk_count);
134  */
136 
137  /* 第一个数据块的位置的真实具体位置的计算公式为:
138  * zdb_off_t off_head = ZDB_DAT_HDR.sizeof +
139  * ZDB_DAT_HDR.ihead_busy * (ZDB_DAT_HDR.blk_hdr_dlen +
140  * ZDB_DAT_HDR.blk_dlen * ZDB_DAT_HDR.blk_count);
141  */
144  int dummy; /* 保证8字节对齐 */
145 };
146 
147 /* 键存储的头 */
148 struct ZDB_KEY_HDR {
149  zdb_key_t key_limit; /* 该键存储的最大容量 */
150  zdb_key_t key_count; /* 当前所有键的总数 */
151  zdb_key_t key_begin; /* 键的起始值 */
152  acl_int64 reserv1; /* 保留字段 */
153  acl_int64 reserv2; /* 保留字段 */
154  acl_int64 reserv3; /* 保留字段 */
155  acl_int64 reserv4; /* 保留字段 */
156 };
157 
158 /* 块数据的头结构类型 */
159 typedef struct ZDB_BLK_HDR {
160  zdb_key_t key; /* 对应于键存储中的键 */
161 
162  /* 标识本数据块的索引位置, 校验用, 同时保证了 8 字节对齐 */
164 
165  /* 由 inext_idle 将空闲数据块连接成一个单向链表, 若此值为 -1 则表示
166  * 非空闲块, 后一个空闲块位置, 后一个空闲块的真实具体位置的计算公式为:
167  * zdb_off_t off_next = ZDB_BLK_HDR.sizeof +
168  * ZDB_BLK_HDR.inext_idle * (ZDB_BLK_HDR.blk_hdr_dlen +
169  * ZDB_DAT_HDR.blk_dlen * ZDB_DAT_HDR.blk_count);
170  */
172 
173 #ifdef ZDB_LINK_BUSY
174  /* 由 inext_busy/iprev_busy 将占用数据块连接成一个双向链表, 若此值为 -1
175  * 则表示非占用块, 后一个占用块位置, 后一个占用块的真实具体位置的计算公式为:
176  * zdb_off_t off_next = ZDB_BLK_HDR.sizeof +
177  * ZDB_BLK_HDR.inext_busy * (ZDB_BLK_HDR.blk_hdr_dlen +
178  * ZDB_DAT_HDR.blk_dlen * ZDB_DAT_HDR.blk_count);
179  * zdb_off_t off_prev = ZDB_BLK_HDR.sizeof +
180  * ZDB_BLK_HDR.inext_prev * (ZDB_BLK_HDR.blk_hdr_dlen +
181  * ZDB_DAT_HDR.blk_dlen * ZDB_DAT_HDR.blk_count);
182  */
183  zdb_lnk_t inext_busy;
184  zdb_lnk_t iprev_busy;
185 #endif
186 } ZDB_BLK_HDR;
187 
188 /* 键存储中存储的值存储的偏移量类型 */
189 struct ZDB_BLK_OFF {
190  zdb_off_t offset; /* 偏移量信息 */
191  int inode; /* 路径信息 */
192 };
193 
194 /* 块数据结构类型 */
195 struct ZDB_BLK {
197  char dat[1]; /* 值存储中每块数据的体数据 */
198 };
199 
200 #ifdef ACL_SUNOS5
201 #pragma pack(0) /* 以下取消4字节对齐限制 */
202 #else
203 #pragma pack(pop) /* 以下取消4字节对齐限制 */
204 #endif
205 
206 /* 通用存储句柄结构 */
207 typedef struct ZDB_STORE {
208  ACL_FHANDLE fhandle; /* 文件句柄 */
209  ZDB *db; /* 引用对象 */
210  ZDB_IO *io; /* IO 句柄对象 */
211  int cache_max; /* 启用存储 IO 缓存时的最大缓存数据块个数 */
212  int cache_timeout; /* 启用存储 IO 缓存时每个缓存块的过期时间 */
213  int wback_max; /* 写缓存中数据块的限制 */
214 
215  unsigned int flag; /* 标志位 */
216 #define STORE_FLAG_KEY (1 << 0) /* 表示是键存储 */
217 #define STORE_FLAG_DAT (1 << 1) /* 表示是值存储 */
218 #define STORE_FLAG_IO_SLICE (1 << 2) /* 是否启用 ZDB_IO 的内存切片分配方式 */
219 
220  /* for acl_iterator */
221 
222  /* 取迭代器头函数 */
223  const void *(*iter_head)(ACL_ITER*, struct ZDB_STORE*);
224  /* 取迭代器下一个函数 */
225  const void *(*iter_next)(ACL_ITER*, struct ZDB_STORE*);
226 } ZDB_STORE;
227 
228 /* 键存储 */
231  ZDB_KEY_HDR hdr; /* 键存储头 */
232 };
233 
234 
235 /* 值存储 */
238  ZDB_DAT_HDR hdr; /* 值存储头 */
239 };
240 
241 #ifdef __cplusplus
242 extern "C" {
243 #endif
244 
245 /*------------------------- in zdb_test.c ----------------------------------*/
246 
247 /**
248  * zdb 测试函数
249  */
250 ACL_API void zdb_test(const char *cmd);
251 
252 /*---------------------------- in zdb.c ----------------------------------*/
253 
254 /* in zdb.c */
255 
256 /**
257  * 程序开始运行时需要初始化 zdb
258  */
259 ACL_API void zdb_init(void);
260 
261 /**
262  * 程序退出前需要释放 zdb 内部一些资源
263  */
264 ACL_API void zdb_end(void);
265 
266 /**
267  * 更新ZDB相关信息至磁盘
268  * @param db {ZDB*}
269  */
270 ACL_API void zdb_sync(ZDB *db);
271 
272 /**
273  * 打开或创建一个 ZDB 数据库
274  * @param dbname {const char*} ZDB 数据库名称
275  * @param oflags {unsigned int} 打开 ZDB 库时的标志位
276  * @param cfg {const ZDB_CFG*} 打开 ZDB 时的配置对象
277  * @return {ZDB*} ZDB 数据库句柄
278  */
279 ACL_API ZDB *zdb_open(const char *dbname, unsigned int oflags, const ZDB_CFG *cfg);
280 
281 /**
282  * 关闭 ZDB 数据库句柄
283  * @param db {ZDB*} ZDB 数据库句柄
284  */
285 ACL_API void zdb_close(ZDB *db);
286 
287 /**
288  * 在 ZDB 数据库中查找相应键值的数据
289  * @param db {ZDB*} ZDB 数据库句柄
290  * @param key {zdb_key_t} 键值
291  * @param size {size_t*} 若此指针非空且查询结果也非空则存储查询结果的数据长度,
292  * 即是 ZDB_BLK.dat 中存储数据的长度
293  * @param blk_off_buf {ZDB_BLK_OFF*} 若非空则存储所查值的偏移位置索引号
294  * @return {ZDB_BLK*} NULL: 未找到; !NULL: ZDB_BLK->dat 为用户数据的地址,
295  * 其中 ZDB_BLK 对象可以用 acl_myfree()/1 进行释放
296  * 注意:
297  * 当 size 指针地址非空时,调用者的类型必须是 size_t 类型而非 int 类型,因为在
298  * 64位机上 size_t 为8个字节长度,而 int 为4个字节长度,内部在对 size 地址赋值
299  * 时,编译器会自动按 size_t 的真实空间长度赋值,如果调用者的 size 为 int 类型,
300  * 则就会出现空间越办现象,从而会使整个程序出现莫名其妙的问题,并且用 valgrind
301  * 也查不出这个错误来!
302  */
303 ACL_API ZDB_BLK *zdb_lookup(ZDB *db, zdb_key_t key, size_t *size, ZDB_BLK_OFF *blk_off_buf);
304 
305 /**
306  * 从 ZDB_BLK 中取得用户数据
307  * @param b {ZDB_BLK*}
308  * @return {void*}
309  */
310 #define zdb_blk_data(b) ((b)->dat)
311 
312 /**
313  * 释放由 zdb_lookup()/3 返回的数据空间
314  * @param b {ZDB_BLK*}
315  */
316 #define zdb_blk_free(b) acl_myfree((b))
317 
318 /**
319  * 添加或更新 ZDB 数据库中的数据
320  * @param db {ZDB*} ZDB 数据库句柄
321  * @param key {zdb_key_t} 键值
322  * @param blk_off_saved {const ZDB_BLK_OFF*} 上次调用 zdb_lookup()/4 时的返回结果,
323  * 从而通过重复利用查询结果来提高效率, 如果在调用 zdb_lookup()/4 时返回结果为空,
324  * 则调用 zdb_update()/5 时必须将此值置 NULL
325  * @param dat {const void*} 键 key 所对应的数据地址
326  * @param len {size_t} dat 数据长度
327  * @return {int} 0: 未更新或添加; -1: 出错; 1: 成功
328  */
329 ACL_API int zdb_update(ZDB *db, zdb_key_t key, const ZDB_BLK_OFF *blk_off_saved,
330  const void *dat, size_t len);
331 
332 /*--------------------------------- in zdb_key.c -----------------------------*/
333 
334 /**
335  * 同步键存储头至磁盘
336  * @param store {ZDB_KEY_STORE*} 值存储句柄
337  * @return {int} -1: error, > 0 ok
338  */
339 ACL_API int key_store_header_sync(ZDB_KEY_STORE *store);
340 
341 /**
342  * 根据键值打开键存储
343  * @param db {ZDB*}
344  * @param key {zdb_key_t} 键值
345  * @return {ZDB_KEY_STORE*} !NULL: ok; NULL: error
346  */
347 ACL_API ZDB_KEY_STORE *zdb_key_store_open(ZDB *db, zdb_key_t key);
348 
349 /**
350  * 根据文件名打开键存储
351  * @param db {ZDB*}
352  * @param filepath {const char*} 文件名
353  * @return {ZDB_KEY_STORE*} !NULL: ok; NULL: error
354  */
355 ACL_API ZDB_KEY_STORE *zdb_key_store_open2(ZDB *db, const char *filepath);
356 
357 /**
358  * 关闭键存储
359  * @param store {ZDB_KEY_STORE*} 键存储句柄
360  */
361 ACL_API void zdb_key_store_close(ZDB_KEY_STORE *store);
362 
363 /**
364  * 设置键存储中键位置的值位置值
365  * @param db {ZDB*}
366  * @param key {zdb_key_t}
367  * @param blk_off {const ZDB_BLK_OFF*}
368  * @return {int} 0: ok; -1: error
369  */
370 ACL_API int zdb_key_set(ZDB *db, zdb_key_t key, const ZDB_BLK_OFF *blk_off);
371 
372 /**
373  * 根据键值从键存储中取得该键所对应的数据索引位置
374  * @param db {ZDB*}
375  * @param key {zdb_key_t} 键值
376  * @param blk_off {ZDB_BLK_OFF*} 存储结果的对象
377  * @return {int} 1: 表示查到, 0: 表示未查到, -1: 表示出错
378  */
379 ACL_API int zdb_key_get(ZDB *db, zdb_key_t key, ZDB_BLK_OFF *blk_off);
380 
381 /**
382  * 查询键存储头的状态
383  * @param db {ZDB*}
384  * @param filepath {const char*} 键存储文件全路径
385  * @param key_hdr {ZDB_KEY_HDR*} 用来存放键存储头信息的内存地址
386  * @return {int} 0: ok; -1: error
387  */
388 ACL_API int zdb_key_status(ZDB *db, const char *filepath, ZDB_KEY_HDR *key_hdr);
389 
390 /**
391  * 遍历键存储中的键的状态
392  * @param db {ZDB*}
393  * @param filepath {const char*} 键存储文件全路径
394  * @param key_hdr {ZDB_KEY_HDR*} 若非空则用来存放键存储头信息的内存地址
395  * @return {int} 0: ok; -1: error
396  */
397 ACL_API int zdb_key_check3(ZDB *db, const char *filepath, ZDB_KEY_HDR *key_hdr);
398 ACL_API int zdb_key_check(ZDB_KEY_STORE *store, ZDB_KEY_HDR *key_hdr);
399 
400 /**
401  * 初始化键存储
402  * @param db {ZDB*}
403  * @param key_begin {zdb_key_t} 起始键值
404  * @param key_end {zdb_key_t} 结束键值
405  * @return {int} 0: ok; -1: error
406  */
407 ACL_API int zdb_key_init(ZDB *db, zdb_key_t key_begin, zdb_key_t key_end);
408 /*--------------------------------- in zdb_dat.c -----------------------------*/
409 
410 /**
411  * 同步值存储头至磁盘
412  * @param store {ZDB_DAT_STORE*} 值存储句柄
413  * @return {int} -1: error, > 0 ok
414  */
415 ACL_API int dat_store_header_sync(ZDB_DAT_STORE *store);
416 
417 /**
418  * 关闭值存储
419  * @param store {ZDB_DAT_STORE*} 值存储句柄
420  */
421 ACL_API void zdb_dat_store_close(ZDB_DAT_STORE *store);
422 
423 /**
424  * 打开或创建值存储
425  * @param filepath {const char*} 值存储文件全路径
426  * @return {ZDB_DAT_STORE*} !NULL: ok; NULL: error
427  */
428 ACL_API ZDB_DAT_STORE *zdb_dat_store_open(ZDB *db, const char *filepath);
429 
430 /**
431  * 从值存储中取得对应的数据
432  * @param db {ZDB*}
433  * @param blk_off {const ZDB_BLK_OFF*}
434  * @param key {zdb_key_t*} 存储键的值
435  * @param size {size_t*} 存储数据的长度
436  * @return {void*} 数据地址,若找到则不为空,找不到或出错则为空, 若不为空,
437  * 则需要用 zdb_blk_free()/1 进行释放
438  * 注意:
439  * 当 size 指针地址非空时,调用者的类型必须是 size_t 类型而非 int 类型,因为在
440  * 64位机上 size_t 为8个字节长度,而 int 为4个字节长度,内部在对 size 地址赋值
441  * 时,编译器会自动按 size_t 的真实空间长度赋值,如果调用者的 size 为 int 类型,
442  * 则就会出现空间越办现象,从而会使整个程序出现莫名其妙的问题,并且用 valgrind
443  * 也查不出这个错误来!
444  */
445 ACL_API ZDB_BLK *zdb_dat_get(ZDB *db, const ZDB_BLK_OFF *blk_off,
446  zdb_key_t *key, size_t *size);
447 
448 /**
449  * 向值存储中添加新数据
450  * @param db {ZDB*}
451  * @param key {zdb_key_t} 键值
452  * @param dat {const void*} 数据地址
453  * @param len {size_t} dat 数据长度
454  * @return {int} 0: 数据没有更新; 1: 数据更新; -1: 出错
455  */
456 ACL_API int zdb_dat_add(ZDB *db, zdb_key_t key, const void *dat, int len);
457 
458 /**
459  * 更新值存储中的数据信息
460  * @param db {ZDB*}
461  * @param key {zdb_key_t} 键
462  * @param blk_off {const ZDB_BLK_OFF*} 存储于键存储中相应值的位置信息
463  * @param dat {const void*} 数据地址
464  * @param len {size_t} dat 数据长度
465  * @return {int} 0: 数据没有更新; 1: 数据更新; -1: 出错
466  */
467 ACL_API int zdb_dat_update(ZDB *db, zdb_key_t key, const ZDB_BLK_OFF *blk_off,
468  const void *dat, size_t len);
469 
470 /**
471  * 读取值存储的头信息
472  * @param db {ZDB*}
473  * @param filepath {const char*} 值存储文件名
474  * @param dat_hdr {ZDB_DAT_HDR*} 存储结果
475  * @retur {int} 0: ok; -1: error
476  */
477 ACL_API int zdb_dat_stat(ZDB *db, const char *filepath, ZDB_DAT_HDR *dat_hdr);
478 
479 /**
480  * 检查值存储中的数据块的正确性
481  * @param db {ZDB*}
482  * @param filepath {const char*} 值存储文件名
483  * @param dat_hdr {ZDB_DAT_HDR*} 若非空则存储值存储头信息
484  * @return {int} 0: ok; -1: error
485  */
486 ACL_API int zdb_dat_check3(ZDB *db, const char *filepath, ZDB_DAT_HDR *dat_hdr);
487 ACL_API int zdb_dat_check(ZDB_DAT_STORE *store, ZDB_DAT_HDR *dat_hdr);
488 
489 /*-------------------- in zdb_key_walk.c -----------------------------------*/
490 ACL_API int zdb_key_walk(ZDB *db, int (*walk_fn)(ZDB_KEY_STORE *store));
491 
492 /*-------------------- in zdb_dat_walk.c -----------------------------------*/
493 ACL_API int zdb_dat_walk(ZDB *db, int (*walk_fn)(ZDB_DAT_STORE *store));
494 
495 /*-------------------- in zdb_key_iter.c -----------------------------------*/
496 
497 /*-------------------- in zdb_dat_iter.c -----------------------------------*/
498 /**
499  * 设置值存储的迭代器
500  * @param store {ZDB_DAT_STORE*}
501  * @param read_data {int} 是否需要读取数据块中的数据部分, !0: 表示读取数据块中的
502  * 数据部分; 0: 仅读取数据块中的头
503  */
504 ACL_API void zdb_dat_iter_set(ZDB_DAT_STORE *store, int read_data);
505 
506 #ifdef __cplusplus
507 }
508 #endif
509 
510 #endif /* ACL_CLIENT_ONLY */
511 #endif
ZDB_IO * io
Definition: zdb.h:210
acl_int64 count
Definition: zdb.h:120
ACL_API ZDB * zdb_open(const char *dbname, unsigned int oflags, const ZDB_CFG *cfg)
zdb_key_t key_limit
Definition: zdb.h:149
ACL_API int zdb_key_status(ZDB *db, const char *filepath, ZDB_KEY_HDR *key_hdr)
ACL_API int zdb_key_check3(ZDB *db, const char *filepath, ZDB_KEY_HDR *key_hdr)
ACL_API int zdb_update(ZDB *db, zdb_key_t key, const ZDB_BLK_OFF *blk_off_saved, const void *dat, size_t len)
char * key_path
Definition: zdb.h:62
int dat_cache_timeout
Definition: zdb.h:53
struct ZDB_DISK ZDB_DISK
Definition: zdb.h:58
int key_cache_timeout
Definition: zdb.h:79
zdb_key_t key_begin
Definition: zdb.h:76
ZDB_STORE store
Definition: zdb.h:237
acl_int64 zdb_key_t
Definition: zdb.h:23
acl_int64 zdb_off_t
Definition: zdb.h:20
ZDB_DAT_HDR hdr
Definition: zdb.h:238
ZDB_STORE store
Definition: zdb.h:230
int(* dat_add)(ZDB *, zdb_key_t, const void *, int)
Definition: zdb.h:95
int nstep
Definition: zdb.h:125
int zdb_lnk_t
Definition: zdb.h:26
Definition: zdb.h:195
acl_int64 dat_limit
Definition: zdb.h:44
acl_int64 dat_limit
Definition: zdb.h:82
ACL_API ZDB_BLK * zdb_dat_get(ZDB *db, const ZDB_BLK_OFF *blk_off, zdb_key_t *key, size_t *size)
struct ZDB_IO ZDB_IO
Definition: zdb.h:17
ACL_API void zdb_close(ZDB *db)
unsigned int flag
Definition: zdb.h:215
int dummy
Definition: zdb.h:144
struct ZDB_CFG ZDB_CFG
ACL_API int zdb_dat_update(ZDB *db, zdb_key_t key, const ZDB_BLK_OFF *blk_off, const void *dat, size_t len)
int dat_ifiles_size
Definition: zdb.h:36
ACL_API int zdb_key_check(ZDB_KEY_STORE *store, ZDB_KEY_HDR *key_hdr)
int dat_nstep
Definition: zdb.h:84
acl_int64 size
Definition: zdb.h:119
int blk_hdr_dlen
Definition: zdb.h:126
int cache_max
Definition: zdb.h:211
zdb_lnk_t itail_busy
Definition: zdb.h:143
ZDB_BLK_HDR hdr
Definition: zdb.h:196
int dat_cache_max
Definition: zdb.h:85
zdb_lnk_t ihead_busy
Definition: zdb.h:142
zdb_lnk_t ihead_idle
Definition: zdb.h:135
int dat_nstep
Definition: zdb.h:50
zdb_key_t key_limit
Definition: zdb.h:77
int inode_tmp
Definition: zdb.h:105
ACL_API int zdb_key_walk(ZDB *db, int(*walk_fn)(ZDB_KEY_STORE *store))
zdb_key_t key_limit
Definition: zdb.h:43
int * dat_ifiles
Definition: zdb.h:35
ACL_API int zdb_dat_add(ZDB *db, zdb_key_t key, const void *dat, int len)
unsigned int oflags
Definition: zdb.h:63
ACL_API int zdb_dat_stat(ZDB *db, const char *filepath, ZDB_DAT_HDR *dat_hdr)
ACL_API int zdb_key_get(ZDB *db, zdb_key_t key, ZDB_BLK_OFF *blk_off)
ACL_API ZDB_BLK * zdb_lookup(ZDB *db, zdb_key_t key, size_t *size, ZDB_BLK_OFF *blk_off_buf)
acl_int64 reserv3
Definition: zdb.h:123
acl_int64 count
Definition: zdb.h:31
int blk_dlen
Definition: zdb.h:127
char * path
Definition: zdb.h:32
int blk_dlen
Definition: zdb.h:51
acl_int64 reserv2
Definition: zdb.h:122
int key_wback_max
Definition: zdb.h:80
zdb_key_t key
Definition: zdb.h:160
ACL_VSTRING * path_tmp
Definition: zdb.h:103
ACL_API void zdb_sync(ZDB *db)
int dat_cache_timeout
Definition: zdb.h:86
int(* key_get)(ZDB *, zdb_key_t, ZDB_BLK_OFF *)
Definition: zdb.h:91
ACL_API void zdb_init(void)
ACL_API void zdb_test(const char *cmd)
ZDB * db
Definition: zdb.h:209
ZDB_KEY_HDR hdr
Definition: zdb.h:231
int key_cache_timeout
Definition: zdb.h:47
ACL_API int zdb_dat_check3(ZDB *db, const char *filepath, ZDB_DAT_HDR *dat_hdr)
int inode
Definition: zdb.h:191
zdb_off_t offset
Definition: zdb.h:190
ACL_FHANDLE fhandle
Definition: zdb.h:208
unsigned int status
Definition: zdb.h:71
int(* key_set)(ZDB *, zdb_key_t, const ZDB_BLK_OFF *)
Definition: zdb.h:92
int dat_wback_max
Definition: zdb.h:54
struct ZDB_STORE ZDB_STORE
ACL_API void zdb_key_store_close(ZDB_KEY_STORE *store)
acl_int64 reserv1
Definition: zdb.h:152
ACL_API int zdb_key_init(ZDB *db, zdb_key_t key_begin, zdb_key_t key_end)
int wback_max
Definition: zdb.h:213
int blk_count
Definition: zdb.h:128
Definition: zdb.h:207
ACL_API ZDB_KEY_STORE * zdb_key_store_open2(ZDB *db, const char *filepath)
int dat_wback_max
Definition: zdb.h:87
struct ZDB_BLK_HDR ZDB_BLK_HDR
ACL_API void zdb_end(void)
int blk_count_tmp
Definition: zdb.h:104
char * dbname
Definition: zdb.h:61
zdb_key_t key_begin
Definition: zdb.h:42
zdb_key_t key_begin
Definition: zdb.h:151
ACL_API int zdb_dat_walk(ZDB *db, int(*walk_fn)(ZDB_DAT_STORE *store))
acl_int64 reserv4
Definition: zdb.h:155
ACL_API int dat_store_header_sync(ZDB_DAT_STORE *store)
ZDB_DISK * dat_disks
Definition: zdb.h:89
zdb_lnk_t inext_idle
Definition: zdb.h:171
ACL_API void zdb_dat_iter_set(ZDB_DAT_STORE *store, int read_data)
acl_int64 limit
Definition: zdb.h:118
int cache_timeout
Definition: zdb.h:212
acl_int64 limit
Definition: zdb.h:30
ACL_API int key_store_header_sync(ZDB_KEY_STORE *store)
acl_int64 reserv2
Definition: zdb.h:153
int key_wback_max
Definition: zdb.h:48
int idisk
Definition: zdb.h:33
ACL_API ZDB_DAT_STORE * zdb_dat_store_open(ZDB *db, const char *filepath)
char dat[1]
Definition: zdb.h:197
Definition: zdb.h:40
const char * key_path
Definition: zdb.h:41
acl_int64 reserv1
Definition: zdb.h:121
acl_int64 reserv4
Definition: zdb.h:124
ACL_API int zdb_key_set(ZDB *db, zdb_key_t key, const ZDB_BLK_OFF *blk_off)
zdb_lnk_t blk_ilnk
Definition: zdb.h:163
int(* dat_update)(ZDB *, zdb_key_t, const ZDB_BLK_OFF *, const void *, size_t)
Definition: zdb.h:96
acl_int64 reserv3
Definition: zdb.h:154
ACL_API void zdb_dat_store_close(ZDB_DAT_STORE *store)
int priority
Definition: zdb.h:34
int key_cache_max
Definition: zdb.h:78
zdb_key_t key_count
Definition: zdb.h:150
int blk_dlen
Definition: zdb.h:83
ACL_API int zdb_dat_check(ZDB_DAT_STORE *store, ZDB_DAT_HDR *dat_hdr)
Definition: zdb.h:29
int key_cache_max
Definition: zdb.h:46
int dat_cache_max
Definition: zdb.h:52
ACL_API ZDB_KEY_STORE * zdb_key_store_open(ZDB *db, zdb_key_t key)