summaryrefslogtreecommitdiff
path: root/source4/dsdb/repl
diff options
context:
space:
mode:
authorGarming Sam <garming@catalyst.net.nz>2017-11-22 12:34:01 +1300
committerAndrew Bartlett <abartlet@samba.org>2017-11-24 01:13:14 +0100
commit17f1c6f9f4c6d14c69d0d7030fcd919fbc0f6231 (patch)
tree5b57e63ba795358f2911835bbcde9d456dbdf9f8 /source4/dsdb/repl
parent84a7baeef30a41d51eff8e6486ed67ed3318b115 (diff)
downloadsamba-17f1c6f9f4c6d14c69d0d7030fcd919fbc0f6231.tar.gz
schema: Make writing indices flag an enum for a new state
In schema_load_init, we find that the writing of indices is not locked in any way. This leads to race conditions. To resolve this, we need to have a new state (SCHEMA_COMPARE) which can report to the caller that we need to open a transaction to write the indices. Signed-off-by: Garming Sam <garming@catalyst.net.nz> Reviewed-by: Andrew Bartlett <abartlet@samba.org>
Diffstat (limited to 'source4/dsdb/repl')
-rw-r--r--source4/dsdb/repl/replicated_objects.c14
1 files changed, 7 insertions, 7 deletions
diff --git a/source4/dsdb/repl/replicated_objects.c b/source4/dsdb/repl/replicated_objects.c
index d9365ae5553..0c44960cf5f 100644
--- a/source4/dsdb/repl/replicated_objects.c
+++ b/source4/dsdb/repl/replicated_objects.c
@@ -867,7 +867,7 @@ WERROR dsdb_replicated_objects_commit(struct ldb_context *ldb,
cur_schema = dsdb_get_schema(ldb, tmp_ctx);
used_global_schema = dsdb_uses_global_schema(ldb);
- ret = dsdb_reference_schema(ldb, working_schema, false);
+ ret = dsdb_reference_schema(ldb, working_schema, SCHEMA_MEMORY_ONLY);
if (ret != LDB_SUCCESS) {
DEBUG(0,(__location__ "Failed to reference working schema - %s\n",
ldb_strerror(ret)));
@@ -884,7 +884,7 @@ WERROR dsdb_replicated_objects_commit(struct ldb_context *ldb,
if (used_global_schema) {
dsdb_set_global_schema(ldb);
} else if (cur_schema) {
- dsdb_reference_schema(ldb, cur_schema, false);
+ dsdb_reference_schema(ldb, cur_schema, SCHEMA_MEMORY_ONLY);
}
if (W_ERROR_EQUAL(objects->error, WERR_DS_DRA_RECYCLED_TARGET)) {
@@ -917,7 +917,7 @@ WERROR dsdb_replicated_objects_commit(struct ldb_context *ldb,
if (used_global_schema) {
dsdb_set_global_schema(ldb);
} else if (cur_schema ) {
- dsdb_reference_schema(ldb, cur_schema, false);
+ dsdb_reference_schema(ldb, cur_schema, SCHEMA_MEMORY_ONLY);
}
DEBUG(0,("Failed to save updated prefixMap: %s\n",
win_errstr(werr)));
@@ -932,7 +932,7 @@ WERROR dsdb_replicated_objects_commit(struct ldb_context *ldb,
if (used_global_schema) {
dsdb_set_global_schema(ldb);
} else if (cur_schema ) {
- dsdb_reference_schema(ldb, cur_schema, false);
+ dsdb_reference_schema(ldb, cur_schema, SCHEMA_MEMORY_ONLY);
}
DEBUG(0,(__location__ " Failed to prepare commit of transaction: %s\n",
ldb_errstring(ldb)));
@@ -946,7 +946,7 @@ WERROR dsdb_replicated_objects_commit(struct ldb_context *ldb,
if (used_global_schema) {
dsdb_set_global_schema(ldb);
} else if (cur_schema ) {
- dsdb_reference_schema(ldb, cur_schema, false);
+ dsdb_reference_schema(ldb, cur_schema, SCHEMA_MEMORY_ONLY);
}
DEBUG(0,(__location__ " Failed to load partition uSN\n"));
ldb_transaction_cancel(ldb);
@@ -960,7 +960,7 @@ WERROR dsdb_replicated_objects_commit(struct ldb_context *ldb,
if (used_global_schema) {
dsdb_set_global_schema(ldb);
} else if (cur_schema ) {
- dsdb_reference_schema(ldb, cur_schema, false);
+ dsdb_reference_schema(ldb, cur_schema, SCHEMA_MEMORY_ONLY);
}
DEBUG(0,(__location__ " Failed to commit transaction\n"));
TALLOC_FREE(tmp_ctx);
@@ -1005,7 +1005,7 @@ WERROR dsdb_replicated_objects_commit(struct ldb_context *ldb,
new_schema != NULL ?
new_schema->metadata_usn : 0,
working_schema, working_schema->metadata_usn);
- dsdb_reference_schema(ldb, cur_schema, false);
+ dsdb_reference_schema(ldb, cur_schema, SCHEMA_MEMORY_ONLY);
if (used_global_schema) {
dsdb_set_global_schema(ldb);
}