ctdb_fatal(ctdb, "transport failed to initialise");
}
- /* attach to any existing persistent databases */
- if (ctdb_attach_persistent(ctdb) != 0) {
- ctdb_fatal(ctdb, "Failed to attach to persistent databases\n");
+ /* attach to existing databases */
+ if (ctdb_attach_databases(ctdb) != 0) {
+ ctdb_fatal(ctdb, "Failed to attach to databases\n");
}
/* start frozen, then let the first election sort things out */
}
}
- if (ctdb->db_directory == NULL) {
- ctdb->db_directory = VARDIR "/ctdb";
- }
-
- /* make sure the db directory exists */
- if (mkdir(ctdb->db_directory, 0700) == -1 && errno != EEXIST) {
- DEBUG(DEBUG_CRIT,(__location__ " Unable to create ctdb directory '%s'\n",
- ctdb->db_directory));
- talloc_free(ctdb_db);
- return -1;
- }
-
- if (persistent && mkdir(ctdb->db_directory_persistent, 0700) == -1 && errno != EEXIST) {
- DEBUG(DEBUG_CRIT,(__location__ " Unable to create ctdb persistent directory '%s'\n",
- ctdb->db_directory_persistent));
- talloc_free(ctdb_db);
- return -1;
- }
-
/* open the database */
ctdb_db->db_path = talloc_asprintf(ctdb_db, "%s/%s.%u",
persistent?ctdb->db_directory_persistent:ctdb->db_directory,
/*
attach to all existing persistent databases
*/
-int ctdb_attach_persistent(struct ctdb_context *ctdb)
+static int ctdb_attach_persistent(struct ctdb_context *ctdb)
{
DIR *d;
struct dirent *de;
return 0;
}
+int ctdb_attach_databases(struct ctdb_context *ctdb)
+{
+ int ret;
+
+ if (ctdb->db_directory == NULL) {
+ ctdb->db_directory = VARDIR "/ctdb";
+ }
+ if (ctdb->db_directory_persistent == NULL) {
+ ctdb->db_directory_persistent = VARDIR "/ctdb/persistent";
+ }
+ if (ctdb->db_directory_state == NULL) {
+ ctdb->db_directory_state = VARDIR "/ctdb/state";
+ }
+
+ /* make sure the db directory exists */
+ ret = mkdir(ctdb->db_directory, 0700);
+ if (ret == -1 && errno != EEXIST) {
+ DEBUG(DEBUG_CRIT,(__location__ " Unable to create ctdb directory '%s'\n",
+ ctdb->db_directory));
+ return -1;
+ }
+
+ /* make sure the persistent db directory exists */
+ ret = mkdir(ctdb->db_directory_persistent, 0700);
+ if (ret == -1 && errno != EEXIST) {
+ DEBUG(DEBUG_CRIT,(__location__ " Unable to create ctdb persistent directory '%s'\n",
+ ctdb->db_directory_persistent));
+ return -1;
+ }
+
+ /* make sure the internal state db directory exists */
+ ret = mkdir(ctdb->db_directory_state, 0700);
+ if (ret == -1 && errno != EEXIST) {
+ DEBUG(DEBUG_CRIT,(__location__ " Unable to create ctdb state directory '%s'\n",
+ ctdb->db_directory_state));
+ return -1;
+ }
+
+ ret = ctdb_attach_persistent(ctdb);
+ if (ret != 0) {
+ return ret;
+ }
+
+ return 0;
+}
+
/*
called when a broadcast seqnum update comes in
*/