diff options
author | Garming Sam <garming@catalyst.net.nz> | 2017-11-22 12:34:01 +1300 |
---|---|---|
committer | Andrew Bartlett <abartlet@samba.org> | 2017-11-24 01:13:14 +0100 |
commit | 17f1c6f9f4c6d14c69d0d7030fcd919fbc0f6231 (patch) | |
tree | 5b57e63ba795358f2911835bbcde9d456dbdf9f8 /source4/dsdb/repl | |
parent | 84a7baeef30a41d51eff8e6486ed67ed3318b115 (diff) | |
download | samba-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.c | 14 |
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); } |