mirror of
https://git.openldap.org/openldap/openldap.git
synced 2025-01-06 10:46:21 +08:00
ITS#4622
syncrepl: don't save contextCSN on incoming context entry syncprov: delete contextCSN on checkpoint if ctxcsn is empty
This commit is contained in:
parent
acea44af02
commit
5757065736
@ -1244,9 +1244,14 @@ syncprov_checkpoint( Operation *op, SlapReply *rs, slap_overinst *on )
|
||||
struct berval bv[2];
|
||||
slap_callback cb = {0};
|
||||
|
||||
mod.sml_values = bv;
|
||||
bv[1].bv_val = NULL;
|
||||
bv[0] = si->si_ctxcsn;
|
||||
/* If ctxcsn is empty, delete it */
|
||||
if ( BER_BVISEMPTY( &si->si_ctxcsn )) {
|
||||
mod.sml_values = NULL;
|
||||
} else {
|
||||
mod.sml_values = bv;
|
||||
bv[1].bv_val = NULL;
|
||||
bv[0] = si->si_ctxcsn;
|
||||
}
|
||||
mod.sml_nvalues = NULL;
|
||||
mod.sml_desc = slap_schema.si_ad_contextCSN;
|
||||
mod.sml_op = LDAP_MOD_REPLACE;
|
||||
@ -2376,15 +2381,16 @@ syncprov_db_open(
|
||||
ldap_pvt_thread_create( &tid, 0, syncprov_db_otask, op );
|
||||
ldap_pvt_thread_join( tid, NULL );
|
||||
}
|
||||
} else if ( SLAP_SYNC_SHADOW( op->o_bd )) {
|
||||
/* If we're also a consumer, and we didn't find the context entry,
|
||||
* then don't generate anything, wait for our provider to send it
|
||||
* to us.
|
||||
*/
|
||||
goto out;
|
||||
}
|
||||
|
||||
if ( BER_BVISEMPTY( &si->si_ctxcsn ) ) {
|
||||
if ( SLAP_SYNC_SHADOW( op->o_bd )) {
|
||||
/* If we're also a consumer, and we didn't get a contextCSN,
|
||||
* then don't generate anything, wait for our provider to send it
|
||||
* to us.
|
||||
*/
|
||||
goto out;
|
||||
}
|
||||
si->si_ctxcsn.bv_len = sizeof( si->si_ctxcsnbuf );
|
||||
slap_get_csn( op, &si->si_ctxcsn, 0 );
|
||||
}
|
||||
|
@ -1769,6 +1769,22 @@ syncrepl_entry(
|
||||
ber_memfree( a->a_vals[0].bv_val );
|
||||
ber_dupbv( &a->a_vals[0], &syncUUID_strrep );
|
||||
}
|
||||
/* Don't save the contextCSN on the inooming context entry,
|
||||
* we'll write it when syncrepl_updateCookie eventually
|
||||
* gets called. (ITS#4622)
|
||||
*/
|
||||
if ( syncstate == LDAP_SYNC_ADD && dn_match( &entry->e_nname,
|
||||
&be->be_nsuffix[0] )) {
|
||||
Attribute **ap;
|
||||
for ( ap = &entry->e_attrs; *ap; ap=&(*ap)->a_next ) {
|
||||
a = *ap;
|
||||
if ( a->a_desc == slap_schema.si_ad_contextCSN ) {
|
||||
*ap = a->a_next;
|
||||
attr_free( a );
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
slap_op_time( &op->o_time, &op->o_tincr );
|
||||
|
Loading…
Reference in New Issue
Block a user