summaryrefslogtreecommitdiffstats
path: root/ctdb/server/ctdb_ltdb_server.c
diff options
context:
space:
mode:
authorRonnie Sahlberg <ronniesahlberg@gmail.com>2011-07-20 13:15:48 +1000
committerRonnie Sahlberg <ronniesahlberg@gmail.com>2011-08-23 10:24:26 +1000
commit1441b77ccee11d243f475f5c07fb7dd222286409 (patch)
tree91e9e2730f0cd627c0b28d5eadeb7439d8e6fbf7 /ctdb/server/ctdb_ltdb_server.c
parent6ff039d44461cb131d98faf0c55758675ba8a51f (diff)
downloadsamba-1441b77ccee11d243f475f5c07fb7dd222286409.tar.gz
samba-1441b77ccee11d243f475f5c07fb7dd222286409.tar.xz
samba-1441b77ccee11d243f475f5c07fb7dd222286409.zip
ReadOnly: Add "readonly" flag to the ctdb_db_context to indicate if this database supports readonly operations or not. Add a private lock-less tdb file to the ctdb_db_context to use for tracking delegarions for records
Assume all databases will support readonly mode for now and se thte flag for all databases. At later stage we will add support to control on a per database level whether delegations will be supported or not. (This used to be ctdb commit 502f86f79944df4bac9094f716e54110c511dc24)
Diffstat (limited to 'ctdb/server/ctdb_ltdb_server.c')
-rw-r--r--ctdb/server/ctdb_ltdb_server.c27
1 files changed, 27 insertions, 0 deletions
diff --git a/ctdb/server/ctdb_ltdb_server.c b/ctdb/server/ctdb_ltdb_server.c
index f04b7de4a3a..82ed0f2b7c0 100644
--- a/ctdb/server/ctdb_ltdb_server.c
+++ b/ctdb/server/ctdb_ltdb_server.c
@@ -926,6 +926,33 @@ again:
}
}
+ /* Assume all non-persistent databases support read only delegations */
+ if (!ctdb_db->persistent) {
+ ctdb_db->readonly = true;
+ }
+
+ if (ctdb_db->readonly) {
+ char *ropath;
+
+ ropath = talloc_asprintf(ctdb_db, "%s.RO", ctdb_db->db_path);
+ if (ropath == NULL) {
+ DEBUG(DEBUG_CRIT,("Failed to asprintf the tracking database\n"));
+ talloc_free(ctdb_db);
+ return -1;
+ }
+ ctdb_db->rottdb = tdb_open(ropath,
+ ctdb->tunable.database_hash_size,
+ TDB_NOLOCK|TDB_CLEAR_IF_FIRST|TDB_NOSYNC,
+ O_CREAT|O_RDWR, 0);
+ if (ctdb_db->rottdb == NULL) {
+ DEBUG(DEBUG_CRIT,("Failed to open/create the tracking database '%s'\n", ropath));
+ talloc_free(ctdb_db);
+ return -1;
+ }
+ DEBUG(DEBUG_NOTICE,("OPENED tracking database : '%s'\n", ropath));
+ }
+
+
DLIST_ADD(ctdb->db_list, ctdb_db);
/* setting this can help some high churn databases */