1
0
mirror of https://github.com/samba-team/samba.git synced 2025-01-24 02:04:21 +03:00

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)
This commit is contained in:
Ronnie Sahlberg 2011-07-20 13:15:48 +10:00
parent 6ff039d444
commit 1441b77cce
2 changed files with 29 additions and 0 deletions

View File

@ -502,9 +502,11 @@ struct ctdb_db_context {
uint32_t db_id;
uint32_t priority;
bool persistent;
bool readonly; /* Do we support read-only delegations ? */
const char *db_name;
const char *db_path;
struct tdb_wrap *ltdb;
struct tdb_context *rottdb; /* ReadOnly tracking TDB */
struct ctdb_registered_call *calls; /* list of registered calls */
uint32_t seqnum;
struct timed_event *seqnum_update;

View File

@ -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 */