rc = mdb_id2name( &op, txn, &idcursor, id, &dn, &ndn );
if ( rc ) {
rc = LDAP_OTHER;
- mdb_entry_return( &op, e );
- e = NULL;
+ if ( e ) {
+ mdb_entry_return( &op, e );
+ e = NULL;
+ }
goto done;
}
if ( tool_base != NULL ) {
mdb_tool_entry_get( BackendDB *be, ID id )
{
Entry *e = NULL;
+ int rc;
+ if ( !txn ) {
+ struct mdb_info *mdb = (struct mdb_info *) be->be_private;
+ rc = mdb_txn_begin( mdb->mi_dbenv, NULL,
+ (slapMode & SLAP_TOOL_READONLY) ? MDB_RDONLY : 0, &txn );
+ if ( rc )
+ return NULL;
+ }
+ if ( !cursor ) {
+ struct mdb_info *mdb = (struct mdb_info *) be->be_private;
+ rc = mdb_cursor_open( txn, mdb->mi_id2entry, &cursor );
+ if ( rc ) {
+ mdb_txn_abort( txn );
+ txn = NULL;
+ return NULL;
+ }
+ }
(void)mdb_tool_entry_get_int( be, id, &e );
return e;
}
mi->mi_nattrs = i;
}
- if ( slapMode & SLAP_TRUNCATE_MODE ) {
- int i;
- for ( i=0; i < mi->mi_nattrs; i++ ) {
- rc = mdb_drop( txn, mi->mi_attrs[i]->ai_dbi, 0 );
- if ( rc ) {
- Debug( LDAP_DEBUG_ANY,
- LDAP_XSTRING(mdb_tool_entry_reindex)
- ": (Truncate) mdb_drop(%s) failed: %s (%d)\n",
- mi->mi_attrs[i]->ai_desc->ad_type->sat_cname.bv_val,
- mdb_strerror(rc), rc );
- return -1;
- }
- }
- slapMode ^= SLAP_TRUNCATE_MODE;
- }
-
e = mdb_tool_entry_get( be, id );
if( e == NULL ) {
}
}
+ if ( slapMode & SLAP_TRUNCATE_MODE ) {
+ int i;
+ for ( i=0; i < mi->mi_nattrs; i++ ) {
+ rc = mdb_drop( txi, mi->mi_attrs[i]->ai_dbi, 0 );
+ if ( rc ) {
+ Debug( LDAP_DEBUG_ANY,
+ LDAP_XSTRING(mdb_tool_entry_reindex)
+ ": (Truncate) mdb_drop(%s) failed: %s (%d)\n",
+ mi->mi_attrs[i]->ai_desc->ad_type->sat_cname.bv_val,
+ mdb_strerror(rc), rc );
+ return -1;
+ }
+ }
+ slapMode ^= SLAP_TRUNCATE_MODE;
+ }
+
/*
* just (re)add them for now
* Use truncate mode to empty/reset index databases
{
int rc;
struct mdb_info *mdb;
- MDB_txn *tid;
Operation op = {0};
Opheader ohdr = {0};
mdb_cursor_close( cursor );
cursor = NULL;
}
- rc = mdb_txn_begin( mdb->mi_dbenv, NULL, 0, &tid );
- if( rc != 0 ) {
- snprintf( text->bv_val, text->bv_len,
- "txn_begin failed: %s (%d)",
- mdb_strerror(rc), rc );
- Debug( LDAP_DEBUG_ANY,
- "=> " LDAP_XSTRING(mdb_tool_entry_modify) ": %s\n",
- text->bv_val, 0, 0 );
- return NOID;
+ if ( !txn ) {
+ rc = mdb_txn_begin( mdb->mi_dbenv, NULL, 0, &txn );
+ if( rc != 0 ) {
+ snprintf( text->bv_val, text->bv_len,
+ "txn_begin failed: %s (%d)",
+ mdb_strerror(rc), rc );
+ Debug( LDAP_DEBUG_ANY,
+ "=> " LDAP_XSTRING(mdb_tool_entry_modify) ": %s\n",
+ text->bv_val, 0, 0 );
+ return NOID;
+ }
}
op.o_hdr = &ohdr;
op.o_tmpmfuncs = &ch_mfuncs;
/* id2entry index */
- rc = mdb_id2entry_update( &op, tid, NULL, e );
+ rc = mdb_id2entry_update( &op, txn, NULL, e );
if( rc != 0 ) {
snprintf( text->bv_val, text->bv_len,
"id2entry_update failed: err=%d", rc );
done:
if( rc == 0 ) {
- rc = mdb_txn_commit( tid );
+ rc = mdb_txn_commit( txn );
if( rc != 0 ) {
snprintf( text->bv_val, text->bv_len,
"txn_commit failed: %s (%d)",
}
} else {
- mdb_txn_abort( tid );
+ mdb_txn_abort( txn );
snprintf( text->bv_val, text->bv_len,
"txn_aborted! %s (%d)",
mdb_strerror(rc), rc );
text->bv_val, 0, 0 );
e->e_id = NOID;
}
+ txn = NULL;
return e->e_id;
}