Diff for /servers/slapd/overlays/syncprov.c between versions 1.299 and 1.300

version 1.299, 2009/11/21 01:37:53 version 1.300, 2009/11/21 02:38:13
Line 1661  syncprov_op_response( Operation *op, Sla Line 1661  syncprov_op_response( Operation *op, Sla
         {          {
                 struct berval maxcsn;                  struct berval maxcsn;
                 char cbuf[LDAP_PVT_CSNSTR_BUFSIZE];                  char cbuf[LDAP_PVT_CSNSTR_BUFSIZE];
                 int do_check = 0, have_psearches;                  int do_check = 0, have_psearches, foundit, csn_changed = 0;
   
                 ldap_pvt_thread_mutex_lock( &si->si_resp_mutex );                  ldap_pvt_thread_mutex_lock( &si->si_resp_mutex );
   
Line 1679  syncprov_op_response( Operation *op, Sla Line 1679  syncprov_op_response( Operation *op, Sla
                          * that changed, and only one can be passed in the csn queue.                           * that changed, and only one can be passed in the csn queue.
                          */                           */
                         Modifications *mod = op->orm_modlist;                          Modifications *mod = op->orm_modlist;
                         int i, j, sid, csn_changed = 0;                          int i, j, sid;
   
                         for ( i=0; i<mod->sml_numvals; i++ ) {                          for ( i=0; i<mod->sml_numvals; i++ ) {
                                 sid = slap_parse_csn_sid( &mod->sml_values[i] );                                  sid = slap_parse_csn_sid( &mod->sml_values[i] );
Line 1721  syncprov_op_response( Operation *op, Sla Line 1721  syncprov_op_response( Operation *op, Sla
                         goto leave;                          goto leave;
                 }                  }
   
                 maxcsn = op->o_csn;                  slap_get_commit_csn( op, &maxcsn, &foundit );
                   if ( BER_BVISEMPTY( &maxcsn ) && SLAP_GLUE_SUBORDINATE( op->o_bd )) {
                           /* syncrepl queues the CSN values in the db where
                            * it is configured , not where the changes are made.
                            * So look for a value in the glue db if we didn't
                            * find any in this db.
                            */
                           BackendDB *be = op->o_bd;
                           op->o_bd = select_backend( &be->be_nsuffix[0], 1);
                           maxcsn.bv_val = cbuf;
                           maxcsn.bv_len = sizeof(cbuf);
                           slap_get_commit_csn( op, &maxcsn, &foundit );
                           op->o_bd = be;
                   }
                 if ( !BER_BVISEMPTY( &maxcsn ) ) {                  if ( !BER_BVISEMPTY( &maxcsn ) ) {
                         int i, sid;                          int i, sid;
 #ifdef CHECK_CSN  #ifdef CHECK_CSN
Line 1733  syncprov_op_response( Operation *op, Sla Line 1746  syncprov_op_response( Operation *op, Sla
                                 if ( sid == si->si_sids[i] ) {                                  if ( sid == si->si_sids[i] ) {
                                         if ( ber_bvcmp( &maxcsn, &si->si_ctxcsn[i] ) > 0 ) {                                          if ( ber_bvcmp( &maxcsn, &si->si_ctxcsn[i] ) > 0 ) {
                                                 ber_bvreplace( &si->si_ctxcsn[i], &maxcsn );                                                  ber_bvreplace( &si->si_ctxcsn[i], &maxcsn );
                                                   csn_changed = 1;
                                         }                                          }
                                         break;                                          break;
                                 }                                  }
Line 1740  syncprov_op_response( Operation *op, Sla Line 1754  syncprov_op_response( Operation *op, Sla
                         /* It's a new SID for us */                          /* It's a new SID for us */
                         if ( i == si->si_numcsns ) {                          if ( i == si->si_numcsns ) {
                                 value_add_one( &si->si_ctxcsn, &maxcsn );                                  value_add_one( &si->si_ctxcsn, &maxcsn );
                                   csn_changed = 1;
                                 si->si_numcsns++;                                  si->si_numcsns++;
                                 si->si_sids = ch_realloc( si->si_sids, si->si_numcsns *                                  si->si_sids = ch_realloc( si->si_sids, si->si_numcsns *
                                         sizeof(int));                                          sizeof(int));
                                 si->si_sids[i] = sid;                                  si->si_sids[i] = sid;
                         }                          }
   #if 0
                   } else if ( !foundit ) {
                           /* internal ops that aren't meant to be replicated */
                           ldap_pvt_thread_rdwr_wunlock( &si->si_csn_rwlock );
                           return SLAP_CB_CONTINUE;
   #endif
                 }                  }
   
                 /* Don't do any processing for consumer contextCSN updates */                  /* Don't do any processing for consumer contextCSN updates */
Line 1783  syncprov_op_response( Operation *op, Sla Line 1804  syncprov_op_response( Operation *op, Sla
                         ldap_pvt_thread_rdwr_runlock( &si->si_csn_rwlock );                          ldap_pvt_thread_rdwr_runlock( &si->si_csn_rwlock );
                 }                  }
   
                 /* always update consumer ctx even if this is an old csn */                  /* only update consumer ctx if this is a newer csn */
                 opc->sctxcsn = maxcsn;                  if ( csn_changed ) {
                           opc->sctxcsn = maxcsn;
                   }
   
                 /* Handle any persistent searches */                  /* Handle any persistent searches */
                 ldap_pvt_thread_mutex_lock( &si->si_ops_mutex );                  ldap_pvt_thread_mutex_lock( &si->si_ops_mutex );

Removed from v.1.299  
changed lines
  Added in v.1.300


______________
© Copyright 1998-2020, OpenLDAP Foundation, info@OpenLDAP.org