Diff for /servers/slapd/overlays/syncprov.c between versions 1.21 and 1.22

version 1.21, 2004/11/27 06:05:24 version 1.22, 2004/11/27 06:29:10
Line 38  typedef struct modtarget { Line 38  typedef struct modtarget {
         ldap_pvt_thread_mutex_t mt_mutex;          ldap_pvt_thread_mutex_t mt_mutex;
 } modtarget;  } modtarget;
   
           
   
 /* A queued result of a persistent search */  /* A queued result of a persistent search */
 typedef struct syncres {  typedef struct syncres {
         struct syncres *s_next;          struct syncres *s_next;
Line 92  typedef struct syncmatches { Line 90  typedef struct syncmatches {
         syncops *sm_op;          syncops *sm_op;
 } syncmatches;  } syncmatches;
   
   /* The main state for this overlay */
 typedef struct syncprov_info_t {  typedef struct syncprov_info_t {
         syncops         *si_ops;          syncops         *si_ops;
         struct berval   si_ctxcsn;      /* ldapsync context */          struct berval   si_ctxcsn;      /* ldapsync context */
Line 123  typedef struct fbase_cookie { Line 122  typedef struct fbase_cookie {
 static AttributeName csn_anlist[2];  static AttributeName csn_anlist[2];
 static AttributeName uuid_anlist[2];  static AttributeName uuid_anlist[2];
   
   /* Build a LDAPsync intermediate state control */
 static int  static int
 syncprov_state_ctrl(  syncprov_state_ctrl(
         Operation       *op,          Operation       *op,
Line 182  syncprov_state_ctrl( Line 182  syncprov_state_ctrl(
         return LDAP_SUCCESS;          return LDAP_SUCCESS;
 }  }
   
   /* Build a LDAPsync final state control */
 static int  static int
 syncprov_done_ctrl(  syncprov_done_ctrl(
         Operation       *op,          Operation       *op,
Line 227  syncprov_done_ctrl( Line 228  syncprov_done_ctrl(
         return LDAP_SUCCESS;          return LDAP_SUCCESS;
 }  }
   
   #if 0
   /* Generate state based on session log - not implemented yet */
 static int  static int
 syncprov_state_ctrl_from_slog(  syncprov_state_ctrl_from_slog(
         Operation       *op,          Operation       *op,
Line 280  syncprov_state_ctrl_from_slog( Line 282  syncprov_state_ctrl_from_slog(
   
         return LDAP_SUCCESS;          return LDAP_SUCCESS;
 }  }
   #endif
   
 static int  static int
 syncprov_sendinfo(  syncprov_sendinfo(
Line 345  syncprov_sendinfo( Line 348  syncprov_sendinfo(
                 return ret;                  return ret;
         }          }
   
           rs->sr_rspoid = LDAP_SYNC_INFO;
         rs->sr_rspdata = &rspdata;          rs->sr_rspdata = &rspdata;
         send_ldap_intermediate( op, rs );          send_ldap_intermediate( op, rs );
         rs->sr_rspdata = NULL;          rs->sr_rspdata = NULL;
Line 353  syncprov_sendinfo( Line 357  syncprov_sendinfo(
         return LDAP_SUCCESS;          return LDAP_SUCCESS;
 }  }
   
   /* Find a modtarget in an AVL tree */
 static int  static int
 sp_avl_cmp( const void *c1, const void *c2 )  sp_avl_cmp( const void *c1, const void *c2 )
 {  {
Line 545  findpres_cb( Operation *op, SlapReply *r Line 550  findpres_cb( Operation *op, SlapReply *r
                         pc->num++;                          pc->num++;
                         ret = LDAP_SUCCESS;                          ret = LDAP_SUCCESS;
                         if ( pc->num == SLAP_SYNCUUID_SET_SIZE ) {                          if ( pc->num == SLAP_SYNCUUID_SET_SIZE ) {
                                 rs->sr_rspoid = LDAP_SYNC_INFO;  
                                 ret = syncprov_sendinfo( op, rs, LDAP_TAG_SYNC_ID_SET, NULL,                                  ret = syncprov_sendinfo( op, rs, LDAP_TAG_SYNC_ID_SET, NULL,
                                         0, pc->uuids, 0 );                                          0, pc->uuids, 0 );
                                 ber_bvarray_free_x( pc->uuids, op->o_tmpmemctx );                                  ber_bvarray_free_x( pc->uuids, op->o_tmpmemctx );
Line 558  findpres_cb( Operation *op, SlapReply *r Line 562  findpres_cb( Operation *op, SlapReply *r
         } else if ( rs->sr_type == REP_RESULT ) {          } else if ( rs->sr_type == REP_RESULT ) {
                 ret = rs->sr_err;                  ret = rs->sr_err;
                 if ( pc->num ) {                  if ( pc->num ) {
                         rs->sr_rspoid = LDAP_SYNC_INFO;  
                         ret = syncprov_sendinfo( op, rs, LDAP_TAG_SYNC_ID_SET, NULL,                          ret = syncprov_sendinfo( op, rs, LDAP_TAG_SYNC_ID_SET, NULL,
                                 0, pc->uuids, 0 );                                  0, pc->uuids, 0 );
                         ber_bvarray_free_x( pc->uuids, op->o_tmpmemctx );                          ber_bvarray_free_x( pc->uuids, op->o_tmpmemctx );
Line 777  syncprov_sendresp( Operation *op, opcook Line 780  syncprov_sendresp( Operation *op, opcook
         return rs.sr_err;          return rs.sr_err;
 }  }
   
   /* Find which persistent searches are affected by this operation */
 static void  static void
 syncprov_matchops( Operation *op, opcookie *opc, int saveit )  syncprov_matchops( Operation *op, opcookie *opc, int saveit )
 {  {
Line 950  syncprov_op_response( Operation *op, Sla Line 954  syncprov_op_response( Operation *op, Sla
                 struct berval maxcsn;                  struct berval maxcsn;
                 char cbuf[LDAP_LUTIL_CSNSTR_BUFSIZE];                  char cbuf[LDAP_LUTIL_CSNSTR_BUFSIZE];
   
                   /* Update our context CSN */
                 cbuf[0] = '\0';                  cbuf[0] = '\0';
                 ldap_pvt_thread_mutex_lock( &si->si_csn_mutex );                  ldap_pvt_thread_mutex_lock( &si->si_csn_mutex );
                 slap_get_commit_csn( op, &maxcsn );                  slap_get_commit_csn( op, &maxcsn );
Line 966  syncprov_op_response( Operation *op, Sla Line 971  syncprov_op_response( Operation *op, Sla
                 opc->sctxcsn.bv_len = maxcsn.bv_len;                  opc->sctxcsn.bv_len = maxcsn.bv_len;
                 opc->sctxcsn.bv_val = cbuf;                  opc->sctxcsn.bv_val = cbuf;
   
                   /* Handle any persistent searches */
                 if ( si->si_ops ) {                  if ( si->si_ops ) {
                         switch(op->o_tag) {                          switch(op->o_tag) {
                         case LDAP_REQ_ADD:                          case LDAP_REQ_ADD:
Line 1028  syncprov_op_abandon( Operation *op, Slap Line 1034  syncprov_op_abandon( Operation *op, Slap
 }  }
   
 #if 0  #if 0
   /* We don't use a subentry to store the context CSN any more. But
    * we ought to expose the current context CSN as an operational attribute
    * somewhere, like on the suffix entry.
    */
 static int  static int
 syncprov_op_compare( Operation *op, SlapReply *rs )  syncprov_op_compare( Operation *op, SlapReply *rs )
 {  {
Line 1272  syncprov_search_response( Operation *op, Line 1282  syncprov_search_response( Operation *op,
                 } else {                  } else {
                         int locked = 0;                          int locked = 0;
                 /* It's RefreshAndPersist, transition to Persist phase */                  /* It's RefreshAndPersist, transition to Persist phase */
                         rs->sr_rspoid = LDAP_SYNC_INFO;  
                         syncprov_sendinfo( op, rs, rs->sr_nentries ?                          syncprov_sendinfo( op, rs, rs->sr_nentries ?
                                 LDAP_TAG_SYNC_REFRESH_PRESENT : LDAP_TAG_SYNC_REFRESH_DELETE,                                  LDAP_TAG_SYNC_REFRESH_PRESENT : LDAP_TAG_SYNC_REFRESH_DELETE,
                                 &cookie, 1, NULL, 0 );                                  &cookie, 1, NULL, 0 );

Removed from v.1.21  
changed lines
  Added in v.1.22


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