initial version
[vlendec/samba-autobuild/.git] / ctdb / ctdb.h
1 /* 
2    ctdb database library
3
4    Copyright (C) Andrew Tridgell  2006
5
6    This library is free software; you can redistribute it and/or
7    modify it under the terms of the GNU Lesser General Public
8    License as published by the Free Software Foundation; either
9    version 2 of the License, or (at your option) any later version.
10
11    This library is distributed in the hope that it will be useful,
12    but WITHOUT ANY WARRANTY; without even the implied warranty of
13    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14    Lesser General Public License for more details.
15
16    You should have received a copy of the GNU Lesser General Public
17    License along with this library; if not, write to the Free Software
18    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
19 */
20
21
22 /*
23   structure passed to a ctdb call function
24 */
25 struct ctdb_call {
26         TDB_DATA key;          /* record key */
27         TDB_DATA record_data;  /* current data in the record */
28         TDB_DATA *new_data;    /* optionally updated record data */
29         TDB_DATA *call_data;   /* optionally passed from caller */
30         TDB_DATA *reply_data;  /* optionally returned by function */
31 };
32
33 #define CTDB_ERR_INVALID 1
34 #define CTDB_ERR_NOMEM 2
35
36
37 /*
38   initialise ctdb subsystem
39 */
40 struct ctdb_context *ctdb_init(TALLOC_CTX *mem_ctx);
41
42 /*
43   tell ctdb what nodes are available. This takes a filename, which will contain
44   1 node address per line, in a transport specific format
45 */
46 int ctdb_set_nlist(struct ctdb_context *ctdb, const char *nlist);
47
48
49 /*
50   error string for last ctdb error
51 */
52 const char *ctdb_errstr(struct ctdb_context *);
53
54 /* a ctdb call function */
55 typedef int (*ctdb_fn_t)(struct ctdb_call *);
56
57 /*
58   setup a ctdb call function
59 */
60 int ctdb_set_call(struct ctdb_context *ctdb, ctdb_fn_t fn, int id);
61
62 /*
63   attach to a ctdb database
64 */
65 int ctdb_attach(struct ctdb_context *ctdb, const char *name, int tdb_flags, 
66                 int open_flags, mode_t mode);
67
68
69 /*
70   make a ctdb call. The associated ctdb call function will be called on the DMASTER
71   for the given record
72 */
73 int ctdb_call(struct ctdb_context *ctdb, TDB_DATA key, int call_id, 
74               TDB_DATA *call_data, TDB_DATA *reply_data);