Diff for /servers/slapd/back-bdb/dn2id.c between versions 1.137.2.10 and 1.137.2.11

version 1.137.2.10, 2008/05/20 00:14:04 version 1.137.2.11, 2008/09/03 21:37:31
Line 1 Line 1
 /* dn2id.c - routines to deal with the dn2id index */  /* dn2id.c - routines to deal with the dn2id index */
 /* $OpenLDAP: pkg/ldap/servers/slapd/back-bdb/dn2id.c,v 1.137.2.9 2008/04/14 19:37:25 quanah Exp $ */  /* $OpenLDAP: pkg/ldap/servers/slapd/back-bdb/dn2id.c,v 1.137.2.10 2008/05/20 00:14:04 quanah Exp $ */
 /* This work is part of OpenLDAP Software <http://www.openldap.org/>.  /* This work is part of OpenLDAP Software <http://www.openldap.org/>.
  *   *
  * Copyright 2000-2008 The OpenLDAP Foundation.   * Copyright 2000-2008 The OpenLDAP Foundation.
Line 27 Line 27
   
 static int  static int
 bdb_dn2id_lock( struct bdb_info *bdb, struct berval *dn,  bdb_dn2id_lock( struct bdb_info *bdb, struct berval *dn,
         int rw, BDB_LOCKER locker, DB_LOCK *lock )          int rw, DB_TXN *txn, DB_LOCK *lock )
 {  {
         int       rc;          int       rc;
         DBT       lockobj;          DBT       lockobj;
         int       db_rw;          int       db_rw;
   
         if (!locker)          if (!txn)
                 return 0;                  return 0;
   
         if (rw)          if (rw)
Line 44  bdb_dn2id_lock( struct bdb_info *bdb, st Line 44  bdb_dn2id_lock( struct bdb_info *bdb, st
         lockobj.data = dn->bv_val;          lockobj.data = dn->bv_val;
         lockobj.size = dn->bv_len;          lockobj.size = dn->bv_len;
   
         rc = LOCK_GET(bdb->bi_dbenv, BDB_LOCKID(locker), DB_LOCK_NOWAIT,          rc = LOCK_GET(bdb->bi_dbenv, TXN_ID(txn), DB_LOCK_NOWAIT,
                                         &lockobj, db_rw, lock);                                          &lockobj, db_rw, lock);
         return rc;          return rc;
 }  }
Line 193  bdb_dn2id_delete( Line 193  bdb_dn2id_delete(
         ptr.bv_val[ptr.bv_len] = '\0';          ptr.bv_val[ptr.bv_len] = '\0';
   
         /* We hold this lock until the TXN completes */          /* We hold this lock until the TXN completes */
         rc = bdb_dn2id_lock( bdb, &e->e_nname, 1, TXN_ID( txn ), &lock );          rc = bdb_dn2id_lock( bdb, &e->e_nname, 1, txn, &lock );
         if ( rc ) goto done;          if ( rc ) goto done;
   
         /* delete it */          /* delete it */
Line 277  bdb_dn2id( Line 277  bdb_dn2id(
         Operation *op,          Operation *op,
         struct berval   *dn,          struct berval   *dn,
         EntryInfo *ei,          EntryInfo *ei,
         BDB_LOCKER locker,          DB_TXN *txn,
         DB_LOCK *lock )          DB_LOCK *lock )
 {  {
         struct bdb_info *bdb = (struct bdb_info *) op->o_bd->be_private;          struct bdb_info *bdb = (struct bdb_info *) op->o_bd->be_private;
Line 301  bdb_dn2id( Line 301  bdb_dn2id(
         data.ulen = sizeof(ID);          data.ulen = sizeof(ID);
         data.flags = DB_DBT_USERMEM;          data.flags = DB_DBT_USERMEM;
   
         rc = db->cursor( db, NULL, &cursor, bdb->bi_db_opflags );          rc = db->cursor( db, txn, &cursor, bdb->bi_db_opflags );
         if ( rc ) goto func_leave;          if ( rc ) goto func_leave;
   
         rc = bdb_dn2id_lock( bdb, dn, 0, locker, lock );          rc = bdb_dn2id_lock( bdb, dn, 0, txn, lock );
         if ( rc ) goto nolock;          if ( rc ) goto nolock;
   
         if ( locker ) {  
                 CURSOR_SETLOCKER(cursor, locker);  
         }  
   
         /* fetch it */          /* fetch it */
         rc = cursor->c_get( cursor, &key, &data, DB_SET );          rc = cursor->c_get( cursor, &key, &data, DB_SET );
   
Line 379  bdb_dn2id_children( Line 375  bdb_dn2id_children(
 int  int
 bdb_dn2idl(  bdb_dn2idl(
         Operation *op,          Operation *op,
         BDB_LOCKER locker,          DB_TXN *txn,
         struct berval *ndn,          struct berval *ndn,
         EntryInfo *ei,          EntryInfo *ei,
         ID *ids,          ID *ids,
Line 412  bdb_dn2idl( Line 408  bdb_dn2idl(
         AC_MEMCPY( &((char *)key.data)[1], ndn->bv_val, key.size - 1 );          AC_MEMCPY( &((char *)key.data)[1], ndn->bv_val, key.size - 1 );
   
         BDB_IDL_ZERO( ids );          BDB_IDL_ZERO( ids );
         rc = bdb_idl_fetch_key( op->o_bd, db, locker, &key, ids, NULL, 0 );          rc = bdb_idl_fetch_key( op->o_bd, db, txn, &key, ids, NULL, 0 );
   
         if( rc != 0 ) {          if( rc != 0 ) {
                 Debug( LDAP_DEBUG_TRACE,                  Debug( LDAP_DEBUG_TRACE,
Line 677  hdb_dn2id_delete( Line 673  hdb_dn2id_delete(
         if ( rc ) goto func_leave;          if ( rc ) goto func_leave;
   
         /* We hold this lock until the TXN completes */          /* We hold this lock until the TXN completes */
         rc = bdb_dn2id_lock( bdb, &e->e_nname, 1, TXN_ID( txn ), &lock );          rc = bdb_dn2id_lock( bdb, &e->e_nname, 1, txn, &lock );
         if ( rc ) goto nolock;          if ( rc ) goto nolock;
   
         /* Delete our ID from the parent's list */          /* Delete our ID from the parent's list */
Line 731  hdb_dn2id( Line 727  hdb_dn2id(
         Operation       *op,          Operation       *op,
         struct berval   *in,          struct berval   *in,
         EntryInfo       *ei,          EntryInfo       *ei,
         BDB_LOCKER locker,          DB_TXN *txn,
         DB_LOCK *lock )          DB_LOCK *lock )
 {  {
         struct bdb_info *bdb = (struct bdb_info *) op->o_bd->be_private;          struct bdb_info *bdb = (struct bdb_info *) op->o_bd->be_private;
Line 763  hdb_dn2id( Line 759  hdb_dn2id(
         data.dlen = data.ulen;          data.dlen = data.ulen;
         data.flags = DB_DBT_USERMEM | DB_DBT_PARTIAL;          data.flags = DB_DBT_USERMEM | DB_DBT_PARTIAL;
   
         rc = db->cursor( db, NULL, &cursor, bdb->bi_db_opflags );          rc = db->cursor( db, txn, &cursor, bdb->bi_db_opflags );
         if ( rc ) return rc;          if ( rc ) return rc;
         if ( locker ) {  
                 CURSOR_SETLOCKER( cursor, locker );  
         }  
   
         d = op->o_tmpalloc( data.size * 3, op->o_tmpmemctx );          d = op->o_tmpalloc( data.size * 3, op->o_tmpmemctx );
         d->nrdnlen[1] = nrlen & 0xff;          d->nrdnlen[1] = nrlen & 0xff;
Line 778  hdb_dn2id( Line 771  hdb_dn2id(
         *ptr = '\0';          *ptr = '\0';
         data.data = d;          data.data = d;
   
         rc = bdb_dn2id_lock( bdb, in, 0, locker, lock );          rc = bdb_dn2id_lock( bdb, in, 0, txn, lock );
         if ( rc ) goto func_leave;          if ( rc ) goto func_leave;
   
         rc = cursor->c_get( cursor, &key, &data, DB_GET_BOTH_RANGE );          rc = cursor->c_get( cursor, &key, &data, DB_GET_BOTH_RANGE );
Line 820  func_leave: Line 813  func_leave:
 int  int
 hdb_dn2id_parent(  hdb_dn2id_parent(
         Operation *op,          Operation *op,
         BDB_LOCKER      locker,          DB_TXN *txn,
         EntryInfo *ei,          EntryInfo *ei,
         ID *idp )          ID *idp )
 {  {
Line 843  hdb_dn2id_parent( Line 836  hdb_dn2id_parent(
         DBTzero(&data);          DBTzero(&data);
         data.flags = DB_DBT_USERMEM;          data.flags = DB_DBT_USERMEM;
   
         rc = db->cursor( db, NULL, &cursor, bdb->bi_db_opflags );          rc = db->cursor( db, txn, &cursor, bdb->bi_db_opflags );
         if ( rc ) return rc;          if ( rc ) return rc;
         if ( locker ) {  
                 CURSOR_SETLOCKER(cursor, locker);  
         }  
   
         data.ulen = sizeof(diskNode) + (SLAP_LDAPDN_MAXLEN * 2);          data.ulen = sizeof(diskNode) + (SLAP_LDAPDN_MAXLEN * 2);
         d = op->o_tmpalloc( data.ulen, op->o_tmpmemctx );          d = op->o_tmpalloc( data.ulen, op->o_tmpmemctx );
Line 941  hdb_dn2id_children( Line 931  hdb_dn2id_children(
 struct dn2id_cookie {  struct dn2id_cookie {
         struct bdb_info *bdb;          struct bdb_info *bdb;
         Operation *op;          Operation *op;
         BDB_LOCKER locker;          DB_TXN *txn;
         EntryInfo *ei;          EntryInfo *ei;
         ID *ids;          ID *ids;
         ID *tmp;          ID *tmp;
Line 1176  gotit: Line 1166  gotit:
 int  int
 hdb_dn2idl(  hdb_dn2idl(
         Operation       *op,          Operation       *op,
         BDB_LOCKER locker,          DB_TXN *txn,
         struct berval *ndn,          struct berval *ndn,
         EntryInfo       *ei,          EntryInfo       *ei,
         ID *ids,          ID *ids,
Line 1209  hdb_dn2idl( Line 1199  hdb_dn2idl(
         cx.tmp = stack;          cx.tmp = stack;
         cx.buf = stack + BDB_IDL_UM_SIZE;          cx.buf = stack + BDB_IDL_UM_SIZE;
         cx.op = op;          cx.op = op;
         cx.locker = locker;          cx.txn = txn;
         cx.need_sort = 0;          cx.need_sort = 0;
         cx.depth = 0;          cx.depth = 0;
   

Removed from v.1.137.2.10  
changed lines
  Added in v.1.137.2.11


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