Diff for /servers/slapd/overlays/syncprov.c between versions 1.172 and 1.173

version 1.172, 2007/02/05 08:19:46 version 1.173, 2007/02/05 22:10:23
Line 1 Line 1
 /* $OpenLDAP: pkg/ldap/servers/slapd/overlays/syncprov.c,v 1.171 2007/02/05 03:50:07 hyc Exp $ */  /* $OpenLDAP: pkg/ldap/servers/slapd/overlays/syncprov.c,v 1.172 2007/02/05 08:19:46 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 59  typedef struct syncops { Line 59  typedef struct syncops {
         ID              s_eid;          /* entryID of search base */          ID              s_eid;          /* entryID of search base */
         Operation       *s_op;          /* search op */          Operation       *s_op;          /* search op */
         int             s_rid;          int             s_rid;
           int             s_sid;
         struct berval s_filterstr;          struct berval s_filterstr;
         int             s_flags;        /* search status */          int             s_flags;        /* search status */
 #define PS_IS_REFRESHING        0x01  #define PS_IS_REFRESHING        0x01
Line 769  syncprov_sendresp( Operation *op, opcook Line 770  syncprov_sendresp( Operation *op, opcook
         ctrls[1] = NULL;          ctrls[1] = NULL;
         csns[0] = opc->sctxcsn;          csns[0] = opc->sctxcsn;
         BER_BVZERO( &csns[1] );          BER_BVZERO( &csns[1] );
         slap_compose_sync_cookie( op, &cookie, csns, so->s_rid );          slap_compose_sync_cookie( op, &cookie, csns, so->s_rid, so->s_sid );
   
         e_uuid.e_attrs = &a_uuid;          e_uuid.e_attrs = &a_uuid;
         a_uuid.a_desc = slap_schema.si_ad_entryUUID;          a_uuid.a_desc = slap_schema.si_ad_entryUUID;
Line 977  static int Line 978  static int
 syncprov_qresp( opcookie *opc, syncops *so, int mode )  syncprov_qresp( opcookie *opc, syncops *so, int mode )
 {  {
         syncres *sr;          syncres *sr;
           int sid;
   
           /* Don't send changes back to their originator */
           sid = slap_parse_csn_sid( &opc->sctxcsn );
           if ( sid == so->s_sid )
                   return LDAP_SUCCESS;
   
         sr = ch_malloc(sizeof(syncres) + opc->suuid.bv_len + 1 +          sr = ch_malloc(sizeof(syncres) + opc->suuid.bv_len + 1 +
                 opc->sdn.bv_len + 1 + opc->sndn.bv_len + 1 + opc->sctxcsn.bv_len + 1 );                  opc->sdn.bv_len + 1 + opc->sndn.bv_len + 1 + opc->sctxcsn.bv_len + 1 );
Line 1523  syncprov_playlog( Operation *op, SlapRep Line 1530  syncprov_playlog( Operation *op, SlapRep
         if ( ndel ) {          if ( ndel ) {
                 struct berval cookie;                  struct berval cookie;
   
                 slap_compose_sync_cookie( op, &cookie, delcsn, srs->sr_state.rid );                  slap_compose_sync_cookie( op, &cookie, delcsn, srs->sr_state.rid,
                           srs->sr_state.sid );
                 uuids[ndel].bv_val = NULL;                  uuids[ndel].bv_val = NULL;
                 syncprov_sendinfo( op, rs, LDAP_TAG_SYNC_ID_SET, &cookie, 0, uuids, 1 );                  syncprov_sendinfo( op, rs, LDAP_TAG_SYNC_ID_SET, &cookie, 0, uuids, 1 );
                 op->o_tmpfree( cookie.bv_val, op->o_tmpmemctx );                  op->o_tmpfree( cookie.bv_val, op->o_tmpmemctx );
Line 1919  syncprov_search_response( Operation *op, Line 1927  syncprov_search_response( Operation *op,
                         int i, sid;                          int i, sid;
                         sid = slap_parse_csn_sid( &a->a_nvals[0] );                          sid = slap_parse_csn_sid( &a->a_nvals[0] );
   
                           /* Don't send changed entries back to the originator */
                           if ( sid == srs->sr_state.sid ) {
                                   Debug( LDAP_DEBUG_SYNC,
                                           "Entry %s changed by peer, ignored\n",
                                           rs->sr_entry->e_name.bv_val, 0, 0 );
                                   return LDAP_SUCCESS;
                           }
                         /* Make sure entry is less than the snapshot'd contextCSN */                          /* Make sure entry is less than the snapshot'd contextCSN */
                         for ( i=0; i<ss->ss_numcsns; i++ ) {                          for ( i=0; i<ss->ss_numcsns; i++ ) {
                                 if ( sid == ss->ss_sids[i] && ber_bvcmp( &a->a_nvals[0],                                  if ( sid == ss->ss_sids[i] && ber_bvcmp( &a->a_nvals[0],
Line 1957  syncprov_search_response( Operation *op, Line 1972  syncprov_search_response( Operation *op,
                 struct berval cookie;                  struct berval cookie;
   
                 slap_compose_sync_cookie( op, &cookie, ss->ss_ctxcsn,                  slap_compose_sync_cookie( op, &cookie, ss->ss_ctxcsn,
                         srs->sr_state.rid );                          srs->sr_state.rid, srs->sr_state.sid );
   
                 /* Is this a regular refresh? */                  /* Is this a regular refresh? */
                 if ( !ss->ss_so ) {                  if ( !ss->ss_so ) {
Line 2051  syncprov_op_search( Operation *op, SlapR Line 2066  syncprov_op_search( Operation *op, SlapR
                 *sop = so;                  *sop = so;
                 ldap_pvt_thread_mutex_init( &sop->s_mutex );                  ldap_pvt_thread_mutex_init( &sop->s_mutex );
                 sop->s_rid = srs->sr_state.rid;                  sop->s_rid = srs->sr_state.rid;
                   sop->s_rid = srs->sr_state.sid;
                 sop->s_inuse = 1;                  sop->s_inuse = 1;
   
                 ldap_pvt_thread_mutex_lock( &si->si_ops_mutex );                  ldap_pvt_thread_mutex_lock( &si->si_ops_mutex );

Removed from v.1.172  
changed lines
  Added in v.1.173


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