netatalk  4.4.0dev
Free and Open Source Apple Filing Protocol (AFP) Server
Loading...
Searching...
No Matches
dbif.h
Go to the documentation of this file.
1/*
2 Copyright (C) Joerg Lenneis 2003
3 Copyright (C) Frank Lahm 2009
4 All Rights Reserved. See COPYING.
5
6
7 API usage
8 =========
9
10 Initialisation
11 --------------
12 1. Provide storage for a DBD * handle
13 DBD *dbd;
14 2. Call dbif_init with a filename to receive a DBD handle:
15 dbd = dbif_init("cnid2.db");
16 Pass NULL to create an in-memory db.
17 Note: the DBD type is NOT from BerkeleyDB ! We've defined it.
18 3. Call dbif_env_open to open an dbd environment if you called dbif_init
19 with a filename. Pass a db_param here for on-disk databases.
20 4. Call dbif_open to finally open the CNID database itself. Pass db_param
21 here for in-memory database.
22
23 Querying the CNID database
24 --------------------------
25 Call dbif_[get|pget|put|del]. They map to the corresponding BerkeleyDB calls
26 with the same names.
27
28 Transactions
29 ------------
30 We use AUTO_COMMIT for the BDB database accesses. This avoids explicit transactions
31 for every bdb access which speeds up reads. But in order to be able to rollback
32 in case of errors we start a transaction once we encounter the first write from
33 dbif_put or dbif_del.
34 Thus you shouldn't call dbif_txn_[begin|abort|commit], they're used internally.
35
36 Checkpoiting
37 ------------
38 Call dbif_txn_checkpoint.
39
40 Closing
41 -------
42 Call dbif_close.
43
44 Silent Upgrade Support
45 ----------------------
46
47 On cnid_dbd shutdown we reopen the environment with recovery, close and then
48 remove it. This enables an upgraded netatalk installation possibly linked against
49 a newer bdb lib to succesfully open/create an environment and then silently
50 upgrade the database itself. How nice!
51*/
52
53#ifndef CNID_DBD_DBIF_H
54#define CNID_DBD_DBIF_H 1
55
56#include <db.h>
57
58#include <atalk/adouble.h>
59
60#include "db_param.h"
61
62#define DBIF_DB_CNT 4
63
64#define DBIF_CNID 0
65#define DBIF_IDX_DEVINO 1
66#define DBIF_IDX_DIDNAME 2
67#define DBIF_IDX_NAME 3
68
69#define LOCKFILENAME "lock"
70#define LOCK_FREE 0
71#define LOCK_UNLOCK 1
72#define LOCK_EXCL 2
73#define LOCK_SHRD 3
74
75/* Structures */
76typedef struct {
77 char *name;
78 DB *db;
79 uint32_t flags;
80 uint32_t openflags;
81 DBTYPE type;
82} db_table;
83
84typedef struct {
85 DB_ENV *db_env;
87 DB_TXN *db_txn;
88 DBC *db_cur; /* for dbif_walk */
91 FILE *db_errlog;
93} DBD;
94
95DBD *dbif_init(const char *envhome, const char *dbname);
96int dbif_env_open(DBD *dbd, struct db_param *dbp, uint32_t dbenv_oflags);
97int dbif_open(DBD *dbd, struct db_param *dbp, int reindex);
98int dbif_close(DBD *dbd);
99int dbif_env_remove(const char *path);
100
101int dbif_get(DBD *, const int, DBT *, DBT *, uint32_t);
102int dbif_pget(DBD *, const int, DBT *, DBT *, DBT *, uint32_t);
103int dbif_put(DBD *, const int, DBT *, DBT *, uint32_t);
104int dbif_del(DBD *, const int, DBT *, uint32_t);
105int dbif_count(DBD *, const int, uint32_t *);
106int dbif_search(DBD *dbd, DBT *key, char *resbuf);
107int dbif_copy_rootinfokey(DBD *srcdbd, DBD *destdbd);
108int dbif_txn_begin(DBD *);
109int dbif_txn_commit(DBD *);
110int dbif_txn_abort(DBD *);
111int dbif_txn_close(DBD *dbd, int ret); /* Switch between commit+abort */
112int dbif_txn_checkpoint(DBD *, uint32_t, uint32_t, uint32_t);
113
114int dbif_dump(DBD *dbd, int dumpindexes);
115int dbif_idwalk(DBD *dbd, cnid_t *cnid, int close);
116#endif
Part of Netatalk's AppleDouble implementatation.
uint32_t cnid_t
Definition adouble.h:156
int dbif_dump(DBD *dbd, int dumpindexes)
Definition dbif.c:1193
int dbif_env_open(DBD *dbd, struct db_param *dbp, uint32_t dbenv_oflags)
Definition dbif.c:413
int dbif_txn_commit(DBD *)
Definition dbif.c:1054
int dbif_txn_close(DBD *dbd, int ret)
Definition dbif.c:1111
int dbif_idwalk(DBD *dbd, cnid_t *cnid, int close)
Definition dbif.c:1378
int dbif_env_remove(const char *path)
Definition dbif.c:798
int dbif_del(DBD *, const int, DBT *, uint32_t)
Definition dbif.c:932
int dbif_count(DBD *, const int, uint32_t *)
Definition dbif.c:1147
int dbif_copy_rootinfokey(DBD *srcdbd, DBD *destdbd)
Definition dbif.c:1165
int dbif_close(DBD *dbd)
Definition dbif.c:763
int dbif_search(DBD *dbd, DBT *key, char *resbuf)
Definition dbif.c:978
int dbif_pget(DBD *, const int, DBT *, DBT *, DBT *, uint32_t)
int dbif_put(DBD *, const int, DBT *, DBT *, uint32_t)
Definition dbif.c:903
int dbif_txn_abort(DBD *)
Definition dbif.c:1079
DBD * dbif_init(const char *envhome, const char *dbname)
Definition dbif.c:360
int dbif_txn_begin(DBD *)
Definition dbif.c:1029
int dbif_get(DBD *, const int, DBT *, DBT *, uint32_t)
Definition dbif.c:881
int dbif_open(DBD *dbd, struct db_param *dbp, int reindex)
Definition dbif.c:547
#define DBIF_DB_CNT
Definition dbif.h:62
int dbif_txn_checkpoint(DBD *, uint32_t, uint32_t, uint32_t)
Definition dbif.c:1132
static DBD * dbd
Definition etc/cnid_dbd/main.c:45
static struct db_param * dbp
Definition etc/cnid_dbd/main.c:49
#define key
Definition hash.c:36
Definition dbif.h:84
DB_TXN * db_txn
Definition dbif.h:87
FILE * db_errlog
Definition dbif.h:91
DB_ENV * db_env
Definition dbif.h:85
struct db_param db_param
Definition dbif.h:86
DBC * db_cur
Definition dbif.h:88
char * db_envhome
Definition dbif.h:89
db_table db_table[DBIF_DB_CNT]
Definition dbif.h:92
char * db_filename
Definition dbif.h:90
Definition db_param.h:22
Definition dbif.h:76
uint32_t openflags
Definition dbif.h:80
DBTYPE type
Definition dbif.h:81
uint32_t flags
Definition dbif.h:79
char * name
Definition dbif.h:77
DB * db
Definition dbif.h:78
Definition include/atalk/directory.h:97