Diff for /servers/slapd/overlays/syncprov.c between versions 1.147.2.55 and 1.147.2.58

version 1.147.2.55, 2009/03/17 16:34:54 version 1.147.2.58, 2009/04/05 01:29:48
Line 1 Line 1
 /* $OpenLDAP: pkg/ldap/servers/slapd/overlays/syncprov.c,v 1.147.2.54 2009/03/17 16:29:38 quanah Exp $ */  /* $OpenLDAP: pkg/ldap/servers/slapd/overlays/syncprov.c,v 1.147.2.57 2009/03/17 16:39:20 quanah 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 775  syncprov_sendresp( Operation *op, opcook Line 775  syncprov_sendresp( Operation *op, opcook
   
         SlapReply rs = { REP_SEARCH };          SlapReply rs = { REP_SEARCH };
         LDAPControl *ctrls[2];          LDAPControl *ctrls[2];
         struct berval cookie, csns[2];          struct berval cookie = BER_BVNULL, csns[2];
         Entry e_uuid = {0};          Entry e_uuid = {0};
         Attribute a_uuid = {0};          Attribute a_uuid = {0};
   
Line 783  syncprov_sendresp( Operation *op, opcook Line 783  syncprov_sendresp( Operation *op, opcook
                 return SLAPD_ABANDON;                  return SLAPD_ABANDON;
   
         ctrls[1] = NULL;          ctrls[1] = NULL;
         csns[0] = opc->sctxcsn;          if ( !BER_BVISNULL( &opc->sctxcsn )) {
         BER_BVZERO( &csns[1] );                  csns[0] = opc->sctxcsn;
         slap_compose_sync_cookie( op, &cookie, csns, so->s_rid, slap_serverID ? slap_serverID : -1 );                  BER_BVZERO( &csns[1] );
                   slap_compose_sync_cookie( op, &cookie, csns, so->s_rid, slap_serverID ? slap_serverID : -1 );
           }
   
 #ifdef LDAP_DEBUG  #ifdef LDAP_DEBUG
         if ( so->s_sid > 0 ) {          if ( !BER_BVISNULL( &cookie )) {
                 Debug( LDAP_DEBUG_SYNC, "syncprov_sendresp: to=%03x, cookie=%s\n",                  if ( so->s_sid > 0 ) {
                         so->s_sid, cookie.bv_val, 0 );                          Debug( LDAP_DEBUG_SYNC, "syncprov_sendresp: to=%03x, cookie=%s\n",
         } else {                                  so->s_sid, cookie.bv_val , 0 );
                 Debug( LDAP_DEBUG_SYNC, "syncprov_sendresp: cookie=%s\n",                  } else {
                         cookie.bv_val, 0, 0 );                          Debug( LDAP_DEBUG_SYNC, "syncprov_sendresp: cookie=%s\n",
         }                                  cookie.bv_val, 0, 0 );
                   }
           }               
 #endif  #endif
   
         e_uuid.e_attrs = &a_uuid;          e_uuid.e_attrs = &a_uuid;
Line 802  syncprov_sendresp( Operation *op, opcook Line 806  syncprov_sendresp( Operation *op, opcook
         a_uuid.a_nvals = &opc->suuid;          a_uuid.a_nvals = &opc->suuid;
         rs.sr_err = syncprov_state_ctrl( op, &rs, &e_uuid,          rs.sr_err = syncprov_state_ctrl( op, &rs, &e_uuid,
                 mode, ctrls, 0, 1, &cookie );                  mode, ctrls, 0, 1, &cookie );
         op->o_tmpfree( cookie.bv_val, op->o_tmpmemctx );          if ( !BER_BVISNULL( &cookie )) {
                   op->o_tmpfree( cookie.bv_val, op->o_tmpmemctx );
           }
   
         rs.sr_ctrls = ctrls;          rs.sr_ctrls = ctrls;
         op->o_bd->bd_info = (BackendInfo *)on->on_info;          op->o_bd->bd_info = (BackendInfo *)on->on_info;
Line 1246  syncprov_matchops( Operation *op, opcook Line 1252  syncprov_matchops( Operation *op, opcook
                         oh = *op->o_hdr;                          oh = *op->o_hdr;
                         oh.oh_conn = ss->s_op->o_conn;                          oh.oh_conn = ss->s_op->o_conn;
                         oh.oh_connid = ss->s_op->o_connid;                          oh.oh_connid = ss->s_op->o_connid;
                           op2.o_bd = op->o_bd->bd_self;
                         op2.o_hdr = &oh;                          op2.o_hdr = &oh;
                         op2.o_extra = op->o_extra;                          op2.o_extra = op->o_extra;
                           op2.o_callback = NULL;
                         rc = test_filter( &op2, e, ss->s_op->ors_filter );                          rc = test_filter( &op2, e, ss->s_op->ors_filter );
                 }                  }
   
Line 1644  syncprov_op_response( Operation *op, Sla Line 1652  syncprov_op_response( Operation *op, Sla
                 maxcsn.bv_len = sizeof(cbuf);                  maxcsn.bv_len = sizeof(cbuf);
                 ldap_pvt_thread_rdwr_wlock( &si->si_csn_rwlock );                  ldap_pvt_thread_rdwr_wlock( &si->si_csn_rwlock );
   
                 if ( op->o_dont_replicate &&                  if ( op->o_dont_replicate && op->o_tag == LDAP_REQ_MODIFY &&
                                 op->orm_modlist->sml_op == LDAP_MOD_REPLACE &&                                  op->orm_modlist->sml_op == LDAP_MOD_REPLACE &&
                                 op->orm_modlist->sml_desc == slap_schema.si_ad_contextCSN ) {                                  op->orm_modlist->sml_desc == slap_schema.si_ad_contextCSN ) {
                         /* Catch contextCSN updates from syncrepl. We have to look at                          /* Catch contextCSN updates from syncrepl. We have to look at
Line 1733  syncprov_op_response( Operation *op, Sla Line 1741  syncprov_op_response( Operation *op, Sla
                                         sizeof(int));                                          sizeof(int));
                                 si->si_sids[i] = sid;                                  si->si_sids[i] = sid;
                         }                          }
   #if 0
                 } else if ( !foundit ) {                  } else if ( !foundit ) {
                         /* internal ops that aren't meant to be replicated */                          /* internal ops that aren't meant to be replicated */
                         ldap_pvt_thread_rdwr_wunlock( &si->si_csn_rwlock );                          ldap_pvt_thread_rdwr_wunlock( &si->si_csn_rwlock );
                         return SLAP_CB_CONTINUE;                          return SLAP_CB_CONTINUE;
   #endif
                 }                  }
   
                 /* Don't do any processing for consumer contextCSN updates */                  /* Don't do any processing for consumer contextCSN updates */
Line 1747  syncprov_op_response( Operation *op, Sla Line 1757  syncprov_op_response( Operation *op, Sla
   
                 si->si_numops++;                  si->si_numops++;
                 if ( si->si_chkops || si->si_chktime ) {                  if ( si->si_chkops || si->si_chktime ) {
                         if ( si->si_chkops && si->si_numops >= si->si_chkops ) {                          /* Never checkpoint adding the context entry,
                                 do_check = 1;                           * it will deadlock
                                 si->si_numops = 0;                           */
                         }                          if ( op->o_tag != LDAP_REQ_ADD ||
                         if ( si->si_chktime &&                                  !dn_match( &op->o_req_ndn, &op->o_bd->be_nsuffix[0] )) {
                                 (op->o_time - si->si_chklast >= si->si_chktime )) {                                  if ( si->si_chkops && si->si_numops >= si->si_chkops ) {
                                 if ( si->si_chklast ) {  
                                         do_check = 1;                                          do_check = 1;
                                         si->si_chklast = op->o_time;                                          si->si_numops = 0;
                                 } else {                                  }
                                         si->si_chklast = 1;                                  if ( si->si_chktime &&
                                           (op->o_time - si->si_chklast >= si->si_chktime )) {
                                           if ( si->si_chklast ) {
                                                   do_check = 1;
                                                   si->si_chklast = op->o_time;
                                           } else {
                                                   si->si_chklast = 1;
                                           }
                                 }                                  }
                         }                          }
                 }                  }
Line 2195  syncprov_search_response( Operation *op, Line 2211  syncprov_search_response( Operation *op,
                                 LDAP_SYNC_ADD, rs->sr_ctrls, 0, 0, NULL );                                  LDAP_SYNC_ADD, rs->sr_ctrls, 0, 0, NULL );
                 }                  }
         } else if ( rs->sr_type == REP_RESULT && rs->sr_err == LDAP_SUCCESS ) {          } else if ( rs->sr_type == REP_RESULT && rs->sr_err == LDAP_SUCCESS ) {
                 struct berval cookie;                  struct berval cookie = BER_BVNULL;
   
                 if ( ss->ss_flags & SS_CHANGED ) {                  if ( ( ss->ss_flags & SS_CHANGED ) &&
                           ss->ss_ctxcsn && !BER_BVISNULL( &ss->ss_ctxcsn[0] )) {
                         slap_compose_sync_cookie( op, &cookie, ss->ss_ctxcsn,                          slap_compose_sync_cookie( op, &cookie, ss->ss_ctxcsn,
                                 srs->sr_state.rid, slap_serverID ? slap_serverID : -1 );                                  srs->sr_state.rid, slap_serverID ? slap_serverID : -1 );
   
Line 2221  syncprov_search_response( Operation *op, Line 2238  syncprov_search_response( Operation *op,
                                 LDAP_TAG_SYNC_REFRESH_PRESENT : LDAP_TAG_SYNC_REFRESH_DELETE,                                  LDAP_TAG_SYNC_REFRESH_PRESENT : LDAP_TAG_SYNC_REFRESH_DELETE,
                                 ( ss->ss_flags & SS_CHANGED ) ? &cookie : NULL,                                  ( ss->ss_flags & SS_CHANGED ) ? &cookie : NULL,
                                 1, NULL, 0 );                                  1, NULL, 0 );
                         if ( ss->ss_flags & SS_CHANGED )                          if ( !BER_BVISNULL( &cookie ))
                                 op->o_tmpfree( cookie.bv_val, op->o_tmpmemctx );                                  op->o_tmpfree( cookie.bv_val, op->o_tmpmemctx );
   
                         /* Detach this Op from frontend control */                          /* Detach this Op from frontend control */

Removed from v.1.147.2.55  
changed lines
  Added in v.1.147.2.58


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