s_hira(a)nifty.com wrote:
Hi, All
I confirmed the problem that was not deleted in syncrepl of V2.4.30.
Looks like you're right, but please post this to the OpenLDAP ITS for tracking
purposes.
The provider operates it in "syncprov-sessionlog 100".
After I delete 150 in a provider, and going syncrepl
Only 100 cases are deleted in the consumer side.
After examining it, the following parts seem to have a problem.
servers/slapd/overlays/syncprov.c:2638
if ( sl->sl_num> 0 ) {
int i;
for ( i=0; i<sl->sl_numcsns; i++ ) {
/* SID not present == new enough */
if ( minsid< sl->sl_sids[i] ) {
do_play = 1;
break;
}
/* SID present and new enough */
if ( minsid == sl->sl_sids[i]
&& ber_bvcmp(&mincsn,&sl->sl_mincsn[i] )>= 0 ) {
do_play = 1;
break;
}
}
/* SID not present == new enough */
if ( i == sl->sl_numcsns )
do_play = 1;
}
if ( do_play ) {
do_present = 0;
/* mutex is unlocked in playlog */
syncprov_playlog( op, rs, sl, srs, ctxcsn, numcsns, sids );
} else {
ldap_pvt_thread_mutex_unlock(&sl->sl_mutex );
}
Then, it corrected as follows.
===
- if ( minsid == sl->sl_sids[i]
-&& ber_bvcmp(&mincsn,&sl->sl_mincsn[i] )>= 0 ) {
+ if ( minsid == sl->sl_sids[i] ) {
+ if ( ber_bvcmp(&mincsn,&sl->sl_mincsn[i] )>= 0 ) {
do_play = 1;
+ }
break;
}
Is this correction wrong?
HIRABAYASHI Satoshi
s_hira(a)nifty.com
--
-- Howard Chu
CTO, Symas Corp.
http://www.symas.com
Director, Highland Sun
http://highlandsun.com/hyc/
Chief Architect, OpenLDAP
http://www.openldap.org/project/