mirror of
https://github.com/samba-team/samba.git
synced 2025-01-11 05:18:09 +03:00
getncchanges.c: Add ancestor links when the object normally gets sent
Currently we add links each time we send an object, but we don't actually send these links until the end of the replication cycle. In subsequent patches we want the links to be sent in the same chunk as their source object, ideally in as close to USN order as possible. Processing ancestors complicates this a bit, as the ancestor will have a higher USN than what we're currently up to, and so potentially will the ancestor's links. This patch moves where the ancestor's links get added to the getnc_state->la_list. The ancestor's links now get added when the object would normally get sent based purely on its USN (we update the highwater mark at this point too). This should not affect functionality, i.e. because we send all the links at the end, it should make no difference at what point they get added to the list. This duplicates a tiny bit of code, but this will be cleaned up in the next patch. Signed-off-by: Tim Beale <timbeale@catalyst.net.nz> Reviewed-by: Andrew Bartlett <abartlet@samba.org> Reviewed-by: Douglas Bagnall <douglas.bagnall@catalyst.net.nz>
This commit is contained in:
parent
2abdd09aa2
commit
4057438e3b
@ -2190,19 +2190,6 @@ static WERROR getncchanges_add_ancestors(struct drsuapi_DsReplicaObjectListItemE
|
||||
return werr;
|
||||
}
|
||||
|
||||
werr = get_nc_changes_add_links(sam_ctx, getnc_state,
|
||||
getnc_state->ncRoot_dn,
|
||||
getnc_state->is_schema_nc,
|
||||
schema, getnc_state->min_usn,
|
||||
req10->replica_flags,
|
||||
anc_msg,
|
||||
&getnc_state->la_list,
|
||||
&getnc_state->la_count,
|
||||
req10->uptodateness_vector);
|
||||
if (!W_ERROR_IS_OK(werr)) {
|
||||
return werr;
|
||||
}
|
||||
|
||||
/*
|
||||
* Regardless of whether we actually use it or not,
|
||||
* we add it to the cache so we don't look at it again
|
||||
@ -2891,8 +2878,7 @@ allowed:
|
||||
|
||||
/*
|
||||
* If it has already been added as an ancestor of
|
||||
* an object, we don't need to do anything more,
|
||||
* as we've already added the links.
|
||||
* an object, we don't need to do anything more
|
||||
*/
|
||||
if (getnc_state->obj_cache != NULL) {
|
||||
werr = dcesrv_drsuapi_obj_cache_exists(getnc_state->obj_cache,
|
||||
@ -2901,6 +2887,21 @@ allowed:
|
||||
dcesrv_drsuapi_update_highwatermark(msg,
|
||||
getnc_state->max_usn,
|
||||
&r->out.ctr->ctr6.new_highwatermark);
|
||||
|
||||
werr = get_nc_changes_add_links(sam_ctx, getnc_state,
|
||||
getnc_state->ncRoot_dn,
|
||||
getnc_state->is_schema_nc,
|
||||
schema, getnc_state->min_usn,
|
||||
req10->replica_flags,
|
||||
msg,
|
||||
&getnc_state->la_list,
|
||||
&getnc_state->la_count,
|
||||
req10->uptodateness_vector);
|
||||
|
||||
if (!W_ERROR_IS_OK(werr)) {
|
||||
return werr;
|
||||
}
|
||||
|
||||
/* no attributes to send */
|
||||
talloc_free(obj);
|
||||
continue;
|
||||
|
Loading…
Reference in New Issue
Block a user