[Date Prev][Date Next] [Chronological] [Thread] [Top]

(ITS#7218) Not deleted in Syncrepl



Full_Name: HIRABAYASHI Satoshi
Version: v2.4.30
OS: 
URL: ftp://ftp.openldap.org/incoming/
Submission from: (NULL) (221.250.200.130)


I confirmed the problem that was not deleted in syncrepl of V2.4.30.

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@nifty.com