summaryrefslogtreecommitdiff
path: root/source4/dsdb/samdb/ldb_modules/partition_metadata.c
diff options
context:
space:
mode:
authorMatthieu Patou <mat@matws.net>2012-05-30 10:43:27 -0700
committerMatthieu Patou <mat@matws.net>2012-06-22 23:22:04 -0700
commit6f3a8b41f5b43c35263a401b2bddbe4e49812b85 (patch)
treebd0da53909e07e60f2592c028cbacb28029b1320 /source4/dsdb/samdb/ldb_modules/partition_metadata.c
parent9f1213d954c72a46ac1f30e936e4004b1ed9ff76 (diff)
downloadsamba-6f3a8b41f5b43c35263a401b2bddbe4e49812b85.tar.gz
samba-6f3a8b41f5b43c35263a401b2bddbe4e49812b85.tar.bz2
samba-6f3a8b41f5b43c35263a401b2bddbe4e49812b85.zip
s4-dsdb: Add/Update SCHEMA_SEQ_NUM key in the metadata.tdb after schemaUpdateNow
The idea is to signal to other process accessing the database that the schema was forced to be reloaded and so they should reload as well.
Diffstat (limited to 'source4/dsdb/samdb/ldb_modules/partition_metadata.c')
-rw-r--r--source4/dsdb/samdb/ldb_modules/partition_metadata.c32
1 files changed, 32 insertions, 0 deletions
diff --git a/source4/dsdb/samdb/ldb_modules/partition_metadata.c b/source4/dsdb/samdb/ldb_modules/partition_metadata.c
index 8e97b52802..0bf7a40640 100644
--- a/source4/dsdb/samdb/ldb_modules/partition_metadata.c
+++ b/source4/dsdb/samdb/ldb_modules/partition_metadata.c
@@ -139,6 +139,38 @@ static int partition_metadata_set_uint64(struct ldb_module *module,
return LDB_SUCCESS;
}
+int partition_metadata_inc_schema_sequence(struct ldb_module *module)
+{
+ struct partition_private_data *data;
+ int ret;
+ uint64_t value;
+
+ data = talloc_get_type_abort(ldb_module_get_private(module),
+ struct partition_private_data);
+ if (!data || !data->metadata) {
+ return ldb_module_error(module, LDB_ERR_OPERATIONS_ERROR,
+ "partition_metadata: metadata not initialized");
+ }
+
+ if (data->metadata->in_transaction == 0) {
+ return ldb_module_error(module, LDB_ERR_OPERATIONS_ERROR,
+ "partition_metadata: increment sequence number without transaction");
+ }
+ ret = partition_metadata_get_uint64(module, DSDB_METADATA_SCHEMA_SEQ_NUM, &value, 0);
+ if (ret != LDB_SUCCESS) {
+ return ret;
+ }
+
+ value++;
+ ret = partition_metadata_set_uint64(module, DSDB_METADATA_SCHEMA_SEQ_NUM, value, false);
+ if (ret == LDB_ERR_OPERATIONS_ERROR) {
+ /* Modify failed, let's try the add */
+ ret = partition_metadata_set_uint64(module, DSDB_METADATA_SCHEMA_SEQ_NUM, value, true);
+ }
+ return ret;
+}
+
+
/*
* Open sam.ldb.d/metadata.tdb.