mirror of
https://github.com/samba-team/samba.git
synced 2024-12-25 23:21:54 +03:00
replmd: Avoid redundant dsdb_get_deleted_objects_dn() checks
Quite a bit of time was spent in dsdb_get_deleted_objects_dn() processing during either a join (~9%) or a full-sync (~28%). The problem is we're *always* doing the dsdb_get_deleted_objects_dn() call for each object, regardless of whether it's actually deleted or not. i.e. we were doing an expensive query and a lot of the time just ignoring the query result. If it's not a deleted object we're dealing with, we can just return early and skip the unnecessary processing. Signed-off-by: Tim Beale <timbeale@catalyst.net.nz> Reviewed-by: Andrew Bartlett <abartlet@samba.org>
This commit is contained in:
parent
698cf271f4
commit
05147d25e7
@ -6807,9 +6807,18 @@ static int replmd_replicated_apply_isDeleted(struct replmd_replicated_request *a
|
||||
{
|
||||
struct ldb_dn *deleted_objects_dn;
|
||||
struct ldb_message *msg = ar->objs->objects[ar->index_current].msg;
|
||||
int ret = dsdb_get_deleted_objects_dn(ldb_module_get_ctx(ar->module), msg, msg->dn,
|
||||
&deleted_objects_dn);
|
||||
if (ar->isDeleted && (ret != LDB_SUCCESS || ldb_dn_compare(msg->dn, deleted_objects_dn) != 0)) {
|
||||
int ret;
|
||||
|
||||
if (!ar->isDeleted) {
|
||||
|
||||
/* not a deleted object, so nothing to do */
|
||||
ar->index_current++;
|
||||
return replmd_replicated_apply_next(ar);
|
||||
}
|
||||
|
||||
ret = dsdb_get_deleted_objects_dn(ldb_module_get_ctx(ar->module), msg,
|
||||
msg->dn, &deleted_objects_dn);
|
||||
if (ret != LDB_SUCCESS || ldb_dn_compare(msg->dn, deleted_objects_dn) != 0) {
|
||||
/*
|
||||
* Do a delete here again, so that if there is
|
||||
* anything local that conflicts with this
|
||||
|
Loading…
Reference in New Issue
Block a user