2 common commandline code to ctdb test tools
4 Copyright (C) Andrew Tridgell 2007
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.
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.
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
22 #include "lib/events/events.h"
23 #include "system/filesys.h"
25 #include "../include/ctdb.h"
26 #include "../include/ctdb_private.h"
28 /* Handle common command line options for ctdb test progs
33 const char *transport;
34 const char *myaddress;
35 const char *socketname;
44 .socketname = CTDB_PATH,
52 struct poptOption popt_ctdb_cmdline[] = {
53 { "nlist", 0, POPT_ARG_STRING, &ctdb_cmdline.nlist, 0, "node list file", "filename" },
54 { "listen", 0, POPT_ARG_STRING, &ctdb_cmdline.myaddress, 0, "address to listen on", "address" },
55 { "socket", 0, POPT_ARG_STRING, &ctdb_cmdline.socketname, 0, "local socket name", "filename" },
56 { "transport", 0, POPT_ARG_STRING, &ctdb_cmdline.transport, 0, "protocol transport", NULL },
57 { "self-connect", 0, POPT_ARG_NONE, &ctdb_cmdline.self_connect, 0, "enable self connect", "boolean" },
58 { "debug", 'd', POPT_ARG_INT, &LogLevel, 0, "debug level"},
59 { "dbdir", 0, POPT_ARG_STRING, &ctdb_cmdline.db_dir, 0, "directory for the tdb files", NULL },
60 { "torture", 0, POPT_ARG_NONE, &ctdb_cmdline.torture, 0, "enable nastiness in library", NULL },
61 { "logfile", 0, POPT_ARG_STRING, &ctdb_cmdline.logfile, 0, "log file location", "filename" },
67 startup daemon side of ctdb according to command line options
69 struct ctdb_context *ctdb_cmdline_init(struct event_context *ev)
71 struct ctdb_context *ctdb;
74 if (ctdb_cmdline.nlist == NULL) {
75 printf("You must provide a node list with --nlist\n");
82 printf("Failed to init ctdb\n");
86 ret = ctdb_set_logfile(ctdb, ctdb_cmdline.logfile);
88 printf("ctdb_set_logfile failed - %s\n", ctdb_errstr(ctdb));
92 if (ctdb_cmdline.self_connect) {
93 ctdb_set_flags(ctdb, CTDB_FLAG_SELF_CONNECT);
95 if (ctdb_cmdline.torture) {
96 ctdb_set_flags(ctdb, CTDB_FLAG_TORTURE);
99 ret = ctdb_set_transport(ctdb, ctdb_cmdline.transport);
101 printf("ctdb_set_transport failed - %s\n", ctdb_errstr(ctdb));
105 /* tell ctdb what address to listen on */
106 if (ctdb_cmdline.myaddress) {
107 ret = ctdb_set_address(ctdb, ctdb_cmdline.myaddress);
109 printf("ctdb_set_address failed - %s\n", ctdb_errstr(ctdb));
114 /* tell ctdb the socket address */
115 ret = ctdb_set_socketname(ctdb, ctdb_cmdline.socketname);
117 printf("ctdb_set_socketname failed - %s\n", ctdb_errstr(ctdb));
121 /* tell ctdb what nodes are available */
122 ret = ctdb_set_nlist(ctdb, ctdb_cmdline.nlist);
124 printf("ctdb_set_nlist failed - %s\n", ctdb_errstr(ctdb));
128 if (ctdb_cmdline.db_dir) {
129 ret = ctdb_set_tdb_dir(ctdb, ctdb_cmdline.db_dir);
131 printf("ctdb_set_tdb_dir failed - %s\n", ctdb_errstr(ctdb));
136 /* initialize the vnn mapping table */
138 XXX we currently initialize it to the maximum number of nodes to
139 XXX make it behave the same way as previously.
140 XXX Once we have recovery working we should initialize this always to
141 XXX generation==0 (==invalid) and let the recovery tool populate this
142 XXX table for the daemons.
144 ctdb->vnn_map = talloc_zero(ctdb, struct ctdb_vnn_map);
145 if (ctdb->vnn_map == NULL) {
146 DEBUG(0,(__location__ " Unable to allocate vnn_map structure\n"));
149 ctdb->vnn_map->generation = 1;
150 ctdb->vnn_map->size = 1024;
151 ctdb->vnn_map->map = talloc_array(ctdb->vnn_map, uint32_t, ctdb->vnn_map->size);
152 if (ctdb->vnn_map->map == NULL) {
153 DEBUG(0,(__location__ " Unable to allocate vnn_map->map structure\n"));
156 for(i=0;i<ctdb->vnn_map->size;i++){
157 ctdb->vnn_map->map[i] = i%ctdb->num_nodes;
166 startup a client only ctdb context
168 struct ctdb_context *ctdb_cmdline_client(struct event_context *ev)
170 struct ctdb_context *ctdb;
173 /* initialise ctdb */
174 ctdb = ctdb_init(ev);
176 printf("Failed to init ctdb\n");
180 /* tell ctdb the socket address */
181 ret = ctdb_set_socketname(ctdb, ctdb_cmdline.socketname);
183 printf("ctdb_set_socketname failed - %s\n", ctdb_errstr(ctdb));
187 ret = ctdb_socket_connect(ctdb);
189 DEBUG(0,(__location__ " Failed to connect to daemon\n"));
195 ret = ctdb_get_config(ctdb);
197 DEBUG(0,(__location__ " Failed to get ctdb config\n"));