X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=servers%2Fslapd%2Fback-bdb2%2Fadd.c;h=6edf1f636dd52a3f674cd10f4e416dbe3dbc7313;hb=4b65e74fa8ee7db3c42f4640700dd9464a26b0b3;hp=6d56b48012408d27f47ae3bb10e362b45d784dc7;hpb=3a9f96ec0d00344c1fb009ca49090a257d8d42a5;p=openldap diff --git a/servers/slapd/back-bdb2/add.c b/servers/slapd/back-bdb2/add.c index 6d56b48012..6edf1f636d 100644 --- a/servers/slapd/back-bdb2/add.c +++ b/servers/slapd/back-bdb2/add.c @@ -23,6 +23,7 @@ bdb2i_back_add_internal( char *pdn; Entry *p = NULL; int rc; + struct timeval time1; Debug(LDAP_DEBUG_ARGS, "==> bdb2i_back_add: %s\n", e->e_dn, 0, 0); @@ -106,8 +107,12 @@ bdb2i_back_add_internal( /* * Try to add the entry to the cache, assign it a new dnid. */ + bdb2i_start_timing( be->bd_info, &time1 ); + rc = bdb2i_cache_add_entry_rw( &li->li_cache, e, CACHE_WRITE_LOCK ); + bdb2i_stop_timing( be->bd_info, time1, "ADD-CACHE", conn, op ); + if ( rc != 0 ) { if( p != NULL) { /* free parent and writer lock */ @@ -138,37 +143,57 @@ bdb2i_back_add_internal( * add it to the id2children index for the parent */ + bdb2i_start_timing( be->bd_info, &time1 ); + if ( bdb2i_id2children_add( be, p, e ) != 0 ) { Debug( LDAP_DEBUG_TRACE, "bdb2i_id2children_add failed\n", 0, 0, 0 ); send_ldap_result( conn, op, LDAP_OPERATIONS_ERROR, "", "" ); + bdb2i_stop_timing( be->bd_info, time1, "ADD-ID2CHILDREN", conn, op ); + goto return_results; } + bdb2i_stop_timing( be->bd_info, time1, "ADD-ID2CHILDREN", conn, op ); + /* * Add the entry to the attribute indexes, then add it to * the id2children index, dn2id index, and the id2entry index. */ + bdb2i_start_timing( be->bd_info, &time1 ); + /* attribute indexes */ if ( bdb2i_index_add_entry( be, e ) != 0 ) { Debug( LDAP_DEBUG_TRACE, "bdb2i_index_add_entry failed\n", 0, 0, 0 ); send_ldap_result( conn, op, LDAP_OPERATIONS_ERROR, "", "" ); + bdb2i_stop_timing( be->bd_info, time1, "ADD-INDEX", conn, op ); + goto return_results; } + bdb2i_stop_timing( be->bd_info, time1, "ADD-INDEX", conn, op ); + + bdb2i_start_timing( be->bd_info, &time1 ); + /* dn2id index */ if ( bdb2i_dn2id_add( be, e->e_ndn, e->e_id ) != 0 ) { Debug( LDAP_DEBUG_TRACE, "bdb2i_dn2id_add failed\n", 0, 0, 0 ); send_ldap_result( conn, op, LDAP_OPERATIONS_ERROR, "", "" ); + bdb2i_stop_timing( be->bd_info, time1, "ADD-DN2ID", conn, op ); + goto return_results; } + bdb2i_stop_timing( be->bd_info, time1, "ADD-DN2ID", conn, op ); + + bdb2i_start_timing( be->bd_info, &time1 ); + /* id2entry index */ if ( bdb2i_id2entry_add( be, e ) != 0 ) { Debug( LDAP_DEBUG_TRACE, "bdb2i_id2entry_add failed\n", 0, @@ -176,9 +201,13 @@ bdb2i_back_add_internal( (void) bdb2i_dn2id_delete( be, e->e_ndn ); send_ldap_result( conn, op, LDAP_OPERATIONS_ERROR, "", "" ); + bdb2i_stop_timing( be->bd_info, time1, "ADD-ID2ENTRY", conn, op ); + goto return_results; } + bdb2i_stop_timing( be->bd_info, time1, "ADD-ID2ENTRY", conn, op ); + send_ldap_result( conn, op, LDAP_SUCCESS, "", "" ); rc = 0; @@ -186,7 +215,6 @@ return_results:; if (p != NULL) { /* free parent and writer lock */ bdb2i_cache_return_entry_w( &li->li_cache, p ); - } /* free entry and writer lock */ @@ -206,30 +234,34 @@ bdb2_back_add( { DB_LOCK lock; struct ldbminfo *li = (struct ldbminfo *) be->be_private; - struct timeval time1; + struct timeval time1, time2; int ret; bdb2i_start_timing( be->bd_info, &time1 ); - if ( bdb2i_enter_backend_w( get_dbenv( be ), &lock ) != 0 ) { + if ( bdb2i_enter_backend_w( &lock ) != 0 ) { send_ldap_result( conn, op, LDAP_OPERATIONS_ERROR, "", "" ); return( -1 ); } + bdb2i_start_timing( be->bd_info, &time2 ); + /* check, if a new default attribute index will be created, in which case we have to open the index file BEFORE TP */ switch ( slapMode ) { case SLAP_SERVER_MODE: case SLAP_TIMEDSERVER_MODE: case SLAP_TOOL_MODE: + case SLAP_TOOLID_MODE: bdb2i_check_default_attr_index_add( li, e ); break; } ret = bdb2i_back_add_internal( be, conn, op, e ); - (void) bdb2i_leave_backend( get_dbenv( be ), lock ); + bdb2i_stop_timing( be->bd_info, time2, "ADD-INTERN", conn, op ); + (void) bdb2i_leave_backend_w( lock ); bdb2i_stop_timing( be->bd_info, time1, "ADD", conn, op ); return( ret );