Diff for /servers/slapd/overlays/syncprov.c between versions 1.260 and 1.261

version 1.260, 2009/02/15 22:21:28 version 1.261, 2009/02/15 23:12:38
Line 1 Line 1
 /* $OpenLDAP: pkg/ldap/servers/slapd/overlays/syncprov.c,v 1.259 2009/02/15 22:17:45 hyc Exp $ */  /* $OpenLDAP: pkg/ldap/servers/slapd/overlays/syncprov.c,v 1.260 2009/02/15 22:21:28 hyc Exp $ */
 /* syncprov.c - syncrepl provider */  /* syncprov.c - syncrepl provider */
 /* This work is part of OpenLDAP Software <http://www.openldap.org/>.  /* This work is part of OpenLDAP Software <http://www.openldap.org/>.
  *   *
Line 1628  syncprov_op_response( Operation *op, Sla Line 1628  syncprov_op_response( Operation *op, Sla
   
         if ( rs->sr_err == LDAP_SUCCESS )          if ( rs->sr_err == LDAP_SUCCESS )
         {          {
                 struct berval maxcsn = BER_BVNULL;                  struct berval maxcsn;
                 char cbuf[LDAP_LUTIL_CSNSTR_BUFSIZE];                  char cbuf[LDAP_LUTIL_CSNSTR_BUFSIZE];
                 int do_check = 0, have_psearches, foundit;                  int do_check = 0, have_psearches, foundit;
   
                 /* Update our context CSN */                  /* Update our context CSN */
                 cbuf[0] = '\0';                  cbuf[0] = '\0';
                   maxcsn.bv_val = cbuf;
                   maxcsn.bv_len = sizeof(cbuf);
                 ldap_pvt_thread_rdwr_wlock( &si->si_csn_rwlock );                  ldap_pvt_thread_rdwr_wlock( &si->si_csn_rwlock );
                 slap_get_commit_csn( op, &maxcsn, &foundit );                  slap_get_commit_csn( op, &maxcsn, &foundit );
                 if ( BER_BVISNULL( &maxcsn ) && SLAP_GLUE_SUBORDINATE( op->o_bd )) {                  if ( BER_BVISEMPTY( &maxcsn ) && SLAP_GLUE_SUBORDINATE( op->o_bd )) {
                         /* syncrepl queues the CSN values in the db where                          /* syncrepl queues the CSN values in the db where
                          * it is configured , not where the changes are made.                           * it is configured , not where the changes are made.
                          * So look for a value in the glue db if we didn't                           * So look for a value in the glue db if we didn't
Line 1644  syncprov_op_response( Operation *op, Sla Line 1646  syncprov_op_response( Operation *op, Sla
                          */                           */
                         BackendDB *be = op->o_bd;                          BackendDB *be = op->o_bd;
                         op->o_bd = select_backend( &be->be_nsuffix[0], 1);                          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 );                          slap_get_commit_csn( op, &maxcsn, &foundit );
                         op->o_bd = be;                          op->o_bd = be;
                 }                  }
                 if ( !BER_BVISNULL( &maxcsn ) ) {                  if ( !BER_BVISEMPTY( &maxcsn ) ) {
                         int i, sid;                          int i, sid;
 #ifdef CHECK_CSN  #ifdef CHECK_CSN
                         Syntax *syn = slap_schema.si_ad_contextCSN->ad_type->sat_syntax;                          Syntax *syn = slap_schema.si_ad_contextCSN->ad_type->sat_syntax;
                         assert( !syn->ssyn_validate( syn, &maxcsn ));                          assert( !syn->ssyn_validate( syn, &maxcsn ));
 #endif  #endif
                         strcpy( cbuf, maxcsn.bv_val );  
                         sid = slap_parse_csn_sid( &maxcsn );                          sid = slap_parse_csn_sid( &maxcsn );
                         for ( i=0; i<si->si_numcsns; i++ ) {                          for ( i=0; i<si->si_numcsns; i++ ) {
                                 if ( sid == si->si_sids[i] ) {                                  if ( sid == si->si_sids[i] ) {
Line 1709  syncprov_op_response( Operation *op, Sla Line 1712  syncprov_op_response( Operation *op, Sla
   
                 /* only update consumer ctx if this is the greatest csn */                  /* only update consumer ctx if this is the greatest csn */
                 if ( bvmatch( &maxcsn, &op->o_csn )) {                  if ( bvmatch( &maxcsn, &op->o_csn )) {
                         opc->sctxcsn.bv_len = maxcsn.bv_len;                          opc->sctxcsn = maxcsn;
                         opc->sctxcsn.bv_val = cbuf;  
                 }                  }
   
                 /* Handle any persistent searches */                  /* Handle any persistent searches */

Removed from v.1.260  
changed lines
  Added in v.1.261


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