#include "portable.h"
#include <stdio.h>
-
#include <ac/string.h>
-#include <ac/socket.h>
#include "back-bdb.h"
{
int rc;
struct bdb_info *bdb = (struct bdb_info *) be->be_private;
+
+ assert( be != NULL );
+ assert( bdb != NULL );
- rc = bdb->bi_entries->bdi_db->cursor(
- bdb->bi_entries->bdi_db, NULL, &cursor, 0 );
+ rc = bdb->bi_id2entry->bdi_db->cursor(
+ bdb->bi_id2entry->bdi_db, NULL, &cursor, 0 );
if( rc != 0 ) {
return NOID;
}
{
struct bdb_info *bdb = (struct bdb_info *) be->be_private;
+ assert( be != NULL );
+
if( key.data ) {
ch_free( key.data );
key.data = NULL;
int rc;
ID id;
+ assert( be != NULL );
assert( slapMode & SLAP_TOOL_MODE );
assert( cursor != NULL );
int rc;
Entry *e;
struct berval bv;
+
+ assert( be != NULL );
assert( slapMode & SLAP_TOOL_MODE );
assert( data.data != NULL );
int rc;
struct bdb_info *bdb = (struct bdb_info *) be->be_private;
DB_TXN *tid;
- DBT key, data;
- struct berval *bv;
+ assert( be != NULL );
assert( slapMode & SLAP_TOOL_MODE );
- DBTzero( &key );
- key.data = (char *) &e->e_id;
- key.size = sizeof(ID);
-
- rc = entry_encode( e, &bv );
- if( rc != LDAP_SUCCESS ) {
- return NOID;
- }
-
- DBTzero( &data );
- bv2DBT( bv, &data );
-
Debug( LDAP_DEBUG_TRACE, "=> bdb_tool_entry_put( %ld, \"%s\" )\n",
e->e_id, e->e_dn, 0 );
rc = txn_begin( bdb->bi_dbenv, NULL, &tid, 0 );
if( rc != 0 ) {
- ber_bvfree( bv );
+ Debug( LDAP_DEBUG_ANY,
+ "=> bdb_tool_entry_put: txn_begin failed: %s (%d)\n",
+ db_strerror(rc), rc, 0 );
return NOID;
}
- e->e_id = bdb_next_id( be, tid );
- if( e->e_id == NOID ) {
+ rc = bdb_next_id( be, tid, &e->e_id );
+ if( rc != 0 ) {
+ Debug( LDAP_DEBUG_ANY,
+ "=> bdb_tool_entry_put: next_id failed: %s (%d)\n",
+ db_strerror(rc), rc, 0 );
goto done;
}
- /* store it -- don't override */
- rc = bdb->bi_entries->bdi_db->put( bdb->bi_entries->bdi_db,
- tid, &key, &data, DB_NOOVERWRITE );
+ /* add dn2id indices */
+ rc = bdb_dn2id_add( be, tid, e->e_ndn, e->e_id );
if( rc != 0 ) {
- e->e_id = NOID;
+ Debug( LDAP_DEBUG_ANY,
+ "=> bdb_tool_entry_put: dn2id_add failed: %s (%d)\n",
+ db_strerror(rc), rc, 0 );
goto done;
}
- /* add dn indices */
- rc = bdb_index_dn_add( be, tid, e->e_ndn, e->e_id );
+ /* id2entry index */
+ rc = bdb_id2entry_add( be, tid, e );
if( rc != 0 ) {
- e->e_id = NOID;
+ Debug( LDAP_DEBUG_ANY,
+ "=> bdb_tool_entry_put: id2entry_add failed: %s (%d)\n",
+ db_strerror(rc), rc, 0 );
goto done;
}
#if 0
rc = bdb_index_entry_add( be, tid, e, e->e_attrs );
if( rc != 0 ) {
- e->e_id = NOID;
goto done;
}
#endif
done:
- if( e->e_id != NOID ) {
+ if( rc == 0 ) {
rc = txn_commit( tid, 0 );
if( rc != 0 ) {
+ Debug( LDAP_DEBUG_ANY,
+ "=> bdb_tool_entry_put: txn_commit failed: %s (%d)\n",
+ db_strerror(rc), rc, 0 );
e->e_id = NOID;
}
} else {
+ Debug( LDAP_DEBUG_ANY,
+ "=> bdb_tool_entry_put: txn_aborted!\n",
+ 0, 0, 0 );
txn_abort( tid );
+ e->e_id = NOID;
}
- ber_bvfree( bv );
return e->e_id;
}
Debug( LDAP_DEBUG_ANY,
"bdb_tool_entry_reindex:: could not locate id=%ld\n",
(long) id, 0, 0 );
- txn_abort( bdi->bdi_db_env );
+ txn_abort( tid );
return -1;
}