Server timing as a private feature of the bdb2 backend.

This commit is contained in:
Kurt Spanier 1999-02-12 14:36:16 +00:00
parent 6e63b58a3e
commit 2cf83d84ee
22 changed files with 305 additions and 397 deletions

View file

@ -27,27 +27,18 @@ bdb2i_back_abandon_internal(
int int
bdb2_back_abandon( bdb2_back_abandon(
BackendDB *be, BackendDB *be,
Connection *c, Connection *conn,
Operation *o, Operation *op,
int msgid ) int msgid )
{ {
struct timeval time1, time2; struct timeval time1;
char *elapsed_time; int ret;
int ret;
gettimeofday( &time1, NULL ); bdb2i_start_timing( be->be_private, &time1 );
ret = bdb2i_back_abandon_internal( be, c, o, msgid ); ret = bdb2i_back_abandon_internal( be, conn, op, msgid );
if ( bdb2i_do_timing ) { bdb2i_stop_timing( be->be_private, time1, "ABND", conn, op );
gettimeofday( &time2, NULL);
elapsed_time = bdb2i_elapsed( time1, time2 );
Debug( LDAP_DEBUG_ANY, "ABND elapsed=%s\n",
elapsed_time, 0, 0 );
free( elapsed_time );
}
return( ret ); return( ret );
} }

View file

@ -234,14 +234,12 @@ bdb2_back_add(
Entry *e Entry *e
) )
{ {
DB_LOCK lock; DB_LOCK lock;
struct ldbminfo *li = (struct ldbminfo *) be->be_private; struct ldbminfo *li = (struct ldbminfo *) be->be_private;
struct timeval time1;
int ret;
struct timeval time1, time2; bdb2i_start_timing( be->be_private, &time1 );
char *elapsed_time;
int ret;
gettimeofday( &time1, NULL );
if ( bdb2i_enter_backend_w( get_dbenv( be ), &lock ) != 0 ) { if ( bdb2i_enter_backend_w( get_dbenv( be ), &lock ) != 0 ) {
@ -252,22 +250,17 @@ bdb2_back_add(
/* check, if a new default attribute index will be created, /* check, if a new default attribute index will be created,
in which case we have to open the index file BEFORE TP */ in which case we have to open the index file BEFORE TP */
if ( ( slapMode == SLAP_SERVER_MODE ) || ( slapMode == SLAP_TOOL_MODE ) ) switch ( slapMode ) {
bdb2i_check_default_attr_index_add( li, e ); case SLAP_SERVER_MODE:
case SLAP_TIMEDSERVER_MODE:
case SLAP_TOOL_MODE:
bdb2i_check_default_attr_index_add( li, e );
break;
}
ret = bdb2i_back_add_internal( be, conn, op, e ); ret = bdb2i_back_add_internal( be, conn, op, e );
(void) bdb2i_leave_backend( get_dbenv( be ), lock ); (void) bdb2i_leave_backend( get_dbenv( be ), lock );
bdb2i_stop_timing( be->be_private, time1, "ADD", conn, op );
if ( bdb2i_do_timing ) {
gettimeofday( &time2, NULL);
elapsed_time = bdb2i_elapsed( time1, time2 );
Debug( LDAP_DEBUG_ANY, "conn=%d op=%d ADD elapsed=%s\n",
conn->c_connid, op->o_opid, elapsed_time );
free( elapsed_time );
}
return( ret ); return( ret );
} }

View file

@ -160,12 +160,15 @@ typedef struct _bdb2_txn_head {
struct ldbtype { struct ldbtype {
char *lty_dbhome; char *lty_dbhome;
size_t lty_mpsize; size_t lty_mpsize;
int lty_betiming;
/* XXX do we need a private DB_ENV for all DB2 backend types ? */ /* XXX do we need a private DB_ENV for all DB2 backend types ? */
DB_ENV *lty_dbenv; DB_ENV *lty_dbenv;
}; };
#define get_dbenv(be) ((struct ldbtype *) (be)->bd_info->bi_private)->lty_dbenv #define get_dbenv(be) ((struct ldbtype *) (be)->bd_info->bi_private)->lty_dbenv
#define with_timing(bi) (((struct ldbtype *) \
(bi)->bi_private)->lty_betiming == 1)
/* the private description of a database */ /* the private description of a database */

View file

@ -226,14 +226,12 @@ bdb2_back_bind(
char** edn char** edn
) )
{ {
DB_LOCK lock; DB_LOCK lock;
struct ldbminfo *li = (struct ldbminfo *) be->be_private; struct ldbminfo *li = (struct ldbminfo *) be->be_private;
struct timeval time1;
int ret;
struct timeval time1, time2; bdb2i_start_timing( be->be_private, &time1 );
char *elapsed_time;
int ret;
gettimeofday( &time1, NULL );
if ( bdb2i_enter_backend_r( get_dbenv( be ), &lock ) != 0 ) { if ( bdb2i_enter_backend_r( get_dbenv( be ), &lock ) != 0 ) {
@ -246,15 +244,7 @@ bdb2_back_bind(
(void) bdb2i_leave_backend( get_dbenv( be ), lock ); (void) bdb2i_leave_backend( get_dbenv( be ), lock );
if ( bdb2i_do_timing ) { bdb2i_stop_timing( be->be_private, time1, "BIND", conn, op );
gettimeofday( &time2, NULL);
elapsed_time = bdb2i_elapsed( time1, time2 );
Debug( LDAP_DEBUG_ANY, "conn=%d op=%d BIND elapsed=%s\n",
conn->c_connid, op->o_opid, elapsed_time );
free( elapsed_time );
}
return( ret ); return( ret );
} }

View file

@ -29,23 +29,14 @@ bdb2i_back_db_close_internal( BackendDB *be )
int int
bdb2_back_db_close( BackendDB *be ) bdb2_back_db_close( BackendDB *be )
{ {
struct timeval time1, time2; struct timeval time1;
char *elapsed_time; int ret;
int ret;
gettimeofday( &time1, NULL ); bdb2i_start_timing( be->be_private, &time1 );
ret = bdb2i_back_db_close_internal( be ); ret = bdb2i_back_db_close_internal( be );
if ( bdb2i_do_timing ) { bdb2i_stop_timing( be->be_private, time1, "CLOSE", NULL, NULL );
gettimeofday( &time2, NULL);
elapsed_time = bdb2i_elapsed( time1, time2 );
Debug( LDAP_DEBUG_ANY, "CLOSE elapsed=%s\n",
elapsed_time, 0, 0 );
free( elapsed_time );
}
return( ret ); return( ret );
} }

View file

@ -71,14 +71,12 @@ bdb2_back_compare(
Ava *ava Ava *ava
) )
{ {
DB_LOCK lock; DB_LOCK lock;
struct ldbminfo *li = (struct ldbminfo *) be->be_private; struct ldbminfo *li = (struct ldbminfo *) be->be_private;
struct timeval time1;
int ret;
struct timeval time1, time2; bdb2i_start_timing( be->be_private, &time1 );
char *elapsed_time;
int ret;
gettimeofday( &time1, NULL );
if ( bdb2i_enter_backend_r( get_dbenv( be ), &lock ) != 0 ) { if ( bdb2i_enter_backend_r( get_dbenv( be ), &lock ) != 0 ) {
@ -88,18 +86,8 @@ bdb2_back_compare(
} }
ret = bdb2i_back_compare_internal( be, conn, op, dn, ava ); ret = bdb2i_back_compare_internal( be, conn, op, dn, ava );
(void) bdb2i_leave_backend( get_dbenv( be ), lock ); (void) bdb2i_leave_backend( get_dbenv( be ), lock );
bdb2i_stop_timing( be->be_private, time1, "CMP", conn, op );
if ( bdb2i_do_timing ) {
gettimeofday( &time2, NULL);
elapsed_time = bdb2i_elapsed( time1, time2 );
Debug( LDAP_DEBUG_ANY, "conn=%d op=%d CMP elapsed=%s\n",
conn->c_connid, op->o_opid, elapsed_time );
free( elapsed_time );
}
return( ret ); return( ret );
} }

View file

@ -70,23 +70,13 @@ bdb2_back_config(
char **argv char **argv
) )
{ {
struct timeval time1, time2; struct timeval time1;
char *elapsed_time; int ret;
int ret;
gettimeofday( &time1, NULL ); bdb2i_start_timing( bi, &time1 );
ret = bdb2i_back_config_internal( bi, fname, lineno, argc, argv ); ret = bdb2i_back_config_internal( bi, fname, lineno, argc, argv );
bdb2i_stop_timing( bi, time1, "BE-CONFIG", NULL, NULL );
if ( bdb2i_do_timing ) {
gettimeofday( &time2, NULL);
elapsed_time = bdb2i_elapsed( time1, time2 );
Debug( LDAP_DEBUG_TRACE, "BE-CONFIG elapsed=%s\n",
elapsed_time, 0, 0 );
free( elapsed_time );
}
return( ret ); return( ret );
} }
@ -196,23 +186,14 @@ bdb2_back_db_config(
char **argv char **argv
) )
{ {
struct timeval time1, time2; struct timeval time1;
char *elapsed_time; int ret;
int ret;
gettimeofday( &time1, NULL ); bdb2i_start_timing( be->be_private, &time1 );
ret = bdb2i_back_db_config_internal( be, fname, lineno, argc, argv ); ret = bdb2i_back_db_config_internal( be, fname, lineno, argc, argv );
if ( bdb2i_do_timing ) { bdb2i_stop_timing( be->be_private, time1, "DB-CONFIG", NULL, NULL );
gettimeofday( &time2, NULL);
elapsed_time = bdb2i_elapsed( time1, time2 );
Debug( LDAP_DEBUG_ANY, "DB-CONFIG elapsed=%s\n",
elapsed_time, 0, 0 );
free( elapsed_time );
}
return( ret ); return( ret );
} }

View file

@ -28,74 +28,91 @@ bdb2i_cache_open(
) )
{ {
/* all files are open, so return handle from file cache */ /* all files are open, so return handle from file cache */
if ( ( slapMode == SLAP_SERVER_MODE ) || ( slapMode == SLAP_TOOL_MODE ) ) { switch ( slapMode ) {
struct ldbminfo *li = (struct ldbminfo *) be->be_private;
char buf[MAXPATHLEN];
/* use short name */ case SLAP_SERVER_MODE:
sprintf( buf, "%s%s", name, suffix ); case SLAP_TIMEDSERVER_MODE:
return( bdb2i_get_db_file_cache( li, buf )); case SLAP_TOOL_MODE:
{
struct ldbminfo *li = (struct ldbminfo *) be->be_private;
char buf[MAXPATHLEN];
} /* use short name */
sprintf( buf, "%s%s", name, suffix );
return( bdb2i_get_db_file_cache( li, buf ));
/* if not SERVER or TOOL, who else would ask? }
NO ONE, so return error */ break;
Debug( LDAP_DEBUG_ANY, default:
/* if not SERVER or TOOL, who else would ask?
NO ONE, so return error */
Debug( LDAP_DEBUG_ANY,
"bdb2i_cache_open: database user (%d) unknown -- cannot open \"%s%s\".\n", "bdb2i_cache_open: database user (%d) unknown -- cannot open \"%s%s\".\n",
slapMode, name, suffix ); slapMode, name, suffix );
return( NULL );
return( NULL ); }
} }
void void
bdb2i_cache_close( BackendDB *be, struct dbcache *db ) bdb2i_cache_close( BackendDB *be, struct dbcache *db )
{ {
/* all files stay open until SERVER or TOOL shut down */ /* all files stay open until SERVER or TOOL shut down */
if ( ( slapMode == SLAP_SERVER_MODE ) || ( slapMode == SLAP_TOOL_MODE ) ) switch ( slapMode ) {
case SLAP_SERVER_MODE:
case SLAP_TIMEDSERVER_MODE:
case SLAP_TOOL_MODE:
return; return;
/* if unknown user, complain */ default:
Debug( LDAP_DEBUG_ANY, /* if unknown user, complain */
"bdb2i_cache_close: database user (%d) unknown -- ignored.\n", Debug( LDAP_DEBUG_ANY,
slapMode, 0, 0 ); "bdb2i_cache_close: database user (%d) unknown -- ignored.\n",
slapMode, 0, 0 );
return; return;
}
} }
void void
bdb2i_cache_really_close( BackendDB *be, struct dbcache *db ) bdb2i_cache_really_close( BackendDB *be, struct dbcache *db )
{ {
struct ldbminfo *li = (struct ldbminfo *) be->be_private;
/* all files stay open until SERVER or TOOL shut down */ /* all files stay open until SERVER or TOOL shut down */
if ( ( slapMode == SLAP_SERVER_MODE ) || ( slapMode == SLAP_TOOL_MODE ) ) switch ( slapMode ) {
case SLAP_SERVER_MODE:
case SLAP_TIMEDSERVER_MODE:
case SLAP_TOOL_MODE:
return; return;
/* if unknown user, complain */ default:
Debug( LDAP_DEBUG_ANY, /* if unknown user, complain */
Debug( LDAP_DEBUG_ANY,
"bdb2i_cache_really_close: database user (%d) unknown -- ignored.\n", "bdb2i_cache_really_close: database user (%d) unknown -- ignored.\n",
slapMode, 0, 0 ); slapMode, 0, 0 );
return;
return; }
} }
void void
bdb2i_cache_flush_all( BackendDB *be ) bdb2i_cache_flush_all( BackendDB *be )
{ {
struct ldbminfo *li = (struct ldbminfo *) be->be_private;
int i;
/* if SERVER or TOOL, syncing is done by TP, or during shutdown */ /* if SERVER or TOOL, syncing is done by TP, or during shutdown */
if ( ( slapMode == SLAP_SERVER_MODE ) || ( slapMode == SLAP_TOOL_MODE ) ) switch ( slapMode ) {
case SLAP_SERVER_MODE:
case SLAP_TIMEDSERVER_MODE:
case SLAP_TOOL_MODE:
return; return;
/* if unknown user, complain */ default:
Debug( LDAP_DEBUG_ANY, /* if unknown user, complain */
"bdb2i_cache_really_close: database user (%d) unknown -- ignored.\n", Debug( LDAP_DEBUG_ANY,
slapMode, 0, 0 ); "bdb2i_cache_flush_all: database user (%d) unknown -- ignored.\n",
slapMode, 0, 0 );
return; return;
}
} }
Datum Datum

View file

@ -158,14 +158,12 @@ bdb2_back_delete(
char *dn char *dn
) )
{ {
DB_LOCK lock; DB_LOCK lock;
struct ldbminfo *li = (struct ldbminfo *) be->be_private; struct ldbminfo *li = (struct ldbminfo *) be->be_private;
struct timeval time1;
int ret;
struct timeval time1, time2; bdb2i_start_timing( be->be_private, &time1 );
char *elapsed_time;
int ret;
gettimeofday( &time1, NULL );
if ( bdb2i_enter_backend_w( get_dbenv( be ), &lock ) != 0 ) { if ( bdb2i_enter_backend_w( get_dbenv( be ), &lock ) != 0 ) {
@ -175,18 +173,8 @@ bdb2_back_delete(
} }
ret = bdb2i_back_delete_internal( be, conn, op, dn ); ret = bdb2i_back_delete_internal( be, conn, op, dn );
(void) bdb2i_leave_backend( get_dbenv( be ), lock ); (void) bdb2i_leave_backend( get_dbenv( be ), lock );
bdb2i_stop_timing( be->be_private, time1, "DEL", conn, op );
if ( bdb2i_do_timing ) {
gettimeofday( &time2, NULL);
elapsed_time = bdb2i_elapsed( time1, time2 );
Debug( LDAP_DEBUG_ANY, "conn=%d op=%d DEL elapsed=%s\n",
conn->c_connid, op->o_opid, elapsed_time );
free( elapsed_time );
}
return( ret ); return( ret );
} }

View file

@ -134,14 +134,12 @@ bdb2_back_group(
char *groupattrName char *groupattrName
) )
{ {
DB_LOCK lock; DB_LOCK lock;
struct ldbminfo *li = (struct ldbminfo *) be->be_private; struct ldbminfo *li = (struct ldbminfo *) be->be_private;
struct timeval time1;
int ret;
struct timeval time1, time2; bdb2i_start_timing( be->be_private, &time1 );
char *elapsed_time;
int ret;
gettimeofday( &time1, NULL );
if ( bdb2i_enter_backend_r( get_dbenv( be ), &lock ) != 0 ) { if ( bdb2i_enter_backend_r( get_dbenv( be ), &lock ) != 0 ) {
@ -153,16 +151,7 @@ bdb2_back_group(
objectclassValue, groupattrName ); objectclassValue, groupattrName );
(void) bdb2i_leave_backend( get_dbenv( be ), lock ); (void) bdb2i_leave_backend( get_dbenv( be ), lock );
bdb2i_stop_timing( be->be_private, time1, "GRP", NULL, NULL );
if ( bdb2i_do_timing ) {
gettimeofday( &time2, NULL);
elapsed_time = bdb2i_elapsed( time1, time2 );
Debug( LDAP_DEBUG_ANY, "GRP elapsed=%s\n",
elapsed_time, 0, 0 );
free( elapsed_time );
}
return( ret ); return( ret );
} }

View file

@ -25,6 +25,9 @@ bdb2i_back_init_private(
bt->lty_mpsize = DEFAULT_DBCACHE_SIZE; bt->lty_mpsize = DEFAULT_DBCACHE_SIZE;
bt->lty_dbenv = &ldbm_Env; bt->lty_dbenv = &ldbm_Env;
if ( slapMode == SLAP_TIMEDSERVER_MODE )
bt->lty_betiming = 1;
bi->bi_private = bt; bi->bi_private = bt;
return 0; return 0;
@ -192,23 +195,13 @@ bdb2_back_db_init(
BackendDB *be BackendDB *be
) )
{ {
struct timeval time1, time2; struct timeval time1;
char *elapsed_time; int ret;
int ret;
gettimeofday( &time1, NULL ); bdb2i_start_timing( be->be_private, &time1 );
ret = bdb2i_back_db_init_internal( be ); ret = bdb2i_back_db_init_internal( be );
bdb2i_stop_timing( be->be_private, time1, "DB-INIT", NULL, NULL );
if ( bdb2i_do_timing ) {
gettimeofday( &time2, NULL);
elapsed_time = bdb2i_elapsed( time1, time2 );
Debug( LDAP_DEBUG_ANY, "DB-INIT elapsed=%s\n",
elapsed_time, 0, 0 );
free( elapsed_time );
}
return( ret ); return( ret );
} }

View file

@ -124,14 +124,12 @@ bdb2_back_modify(
LDAPModList *modlist LDAPModList *modlist
) )
{ {
DB_LOCK lock; DB_LOCK lock;
struct ldbminfo *li = (struct ldbminfo *) be->be_private; struct ldbminfo *li = (struct ldbminfo *) be->be_private;
struct timeval time1;
int ret;
struct timeval time1, time2; bdb2i_start_timing( be->be_private, &time1 );
char *elapsed_time;
int ret;
gettimeofday( &time1, NULL );
if ( bdb2i_enter_backend_w( get_dbenv( be ), &lock ) != 0 ) { if ( bdb2i_enter_backend_w( get_dbenv( be ), &lock ) != 0 ) {
@ -142,22 +140,17 @@ bdb2_back_modify(
/* check, if a new default attribute index will be created, /* check, if a new default attribute index will be created,
in which case we have to open the index file BEFORE TP */ in which case we have to open the index file BEFORE TP */
if ( ( slapMode == SLAP_SERVER_MODE ) || ( slapMode == SLAP_TOOL_MODE ) ) switch ( slapMode ) {
bdb2i_check_default_attr_index_mod( li, modlist ); case SLAP_SERVER_MODE:
case SLAP_TIMEDSERVER_MODE:
case SLAP_TOOL_MODE:
bdb2i_check_default_attr_index_mod( li, modlist );
break;
}
ret = bdb2i_back_modify_internal( be, conn, op, dn, modlist ); ret = bdb2i_back_modify_internal( be, conn, op, dn, modlist );
(void) bdb2i_leave_backend( get_dbenv( be ), lock ); (void) bdb2i_leave_backend( get_dbenv( be ), lock );
bdb2i_stop_timing( be->be_private, time1, "MOD", conn, op );
if ( bdb2i_do_timing ) {
gettimeofday( &time2, NULL);
elapsed_time = bdb2i_elapsed( time1, time2 );
Debug( LDAP_DEBUG_ANY, "conn=%d op=%d MOD elapsed=%s\n",
conn->c_connid, op->o_opid, elapsed_time );
free( elapsed_time );
}
return( ret ); return( ret );
} }

View file

@ -201,14 +201,12 @@ bdb2_back_modrdn(
int deleteoldrdn int deleteoldrdn
) )
{ {
DB_LOCK lock; DB_LOCK lock;
struct ldbminfo *li = (struct ldbminfo *) be->be_private; struct ldbminfo *li = (struct ldbminfo *) be->be_private;
struct timeval time1;
int ret;
struct timeval time1, time2; bdb2i_start_timing( be->be_private, &time1 );
char *elapsed_time;
int ret;
gettimeofday( &time1, NULL );
if ( bdb2i_enter_backend_w( get_dbenv( be ), &lock ) != 0 ) { if ( bdb2i_enter_backend_w( get_dbenv( be ), &lock ) != 0 ) {
@ -221,16 +219,7 @@ bdb2_back_modrdn(
newrdn, deleteoldrdn ); newrdn, deleteoldrdn );
(void) bdb2i_leave_backend( get_dbenv( be ), lock ); (void) bdb2i_leave_backend( get_dbenv( be ), lock );
bdb2i_stop_timing( be->be_private, time1, "MODRDN", conn, op );
if ( bdb2i_do_timing ) {
gettimeofday( &time2, NULL);
elapsed_time = bdb2i_elapsed( time1, time2 );
Debug( LDAP_DEBUG_ANY, "conn=%d op=%d MODRDN elapsed=%s\n",
conn->c_connid, op->o_opid, elapsed_time );
free( elapsed_time );
}
return( ret ); return( ret );
} }

View file

@ -19,51 +19,56 @@ bdb2i_enter_backend( DB_ENV *dbEnv, DB_LOCK *lock, int writer )
u_int32_t locker; u_int32_t locker;
db_lockmode_t lock_type; db_lockmode_t lock_type;
DBT lock_dbt; DBT lock_dbt;
int ret; int ret = 0;
if ( ( slapMode != SLAP_SERVER_MODE ) && ( slapMode != SLAP_TOOL_MODE ) ) switch ( slapMode ) {
return( 0 );
if ( ( ret = lock_id( dbEnv->lk_info, &locker )) != 0 ) { case SLAP_SERVER_MODE:
case SLAP_TIMEDSERVER_MODE:
case SLAP_TOOL_MODE:
if ( ( ret = lock_id( dbEnv->lk_info, &locker )) != 0 ) {
Debug( LDAP_DEBUG_ANY, Debug( LDAP_DEBUG_ANY,
"bdb2i_enter_backend(): unable to get locker id -- %s\n", "bdb2i_enter_backend(): unable to get locker id -- %s\n",
strerror( ret ), 0, 0 ); strerror( ret ), 0, 0 );
return( ret ); return( ret );
} }
lock_type = writer ? DB_LOCK_WRITE : DB_LOCK_READ; lock_type = writer ? DB_LOCK_WRITE : DB_LOCK_READ;
lock_dbt.data = PORTER_OBJ; lock_dbt.data = PORTER_OBJ;
lock_dbt.size = strlen( PORTER_OBJ ); lock_dbt.size = strlen( PORTER_OBJ );
switch ( ( ret = lock_get( dbEnv->lk_info, locker, 0, &lock_dbt, switch ( ( ret = lock_get( dbEnv->lk_info, locker, 0, &lock_dbt,
lock_type, lock ))) { lock_type, lock ))) {
case 0: case 0:
Debug( LDAP_DEBUG_TRACE, "bdb2i_enter_backend() -- %s lock granted\n", Debug( LDAP_DEBUG_TRACE,
"bdb2i_enter_backend() -- %s lock granted\n",
writer ? "write" : "read", 0, 0 ); writer ? "write" : "read", 0, 0 );
break; break;
case DB_LOCK_NOTGRANTED: case DB_LOCK_NOTGRANTED:
Debug( LDAP_DEBUG_ANY, Debug( LDAP_DEBUG_ANY,
"bdb2i_enter_backend() -- %s lock NOT granted\n", "bdb2i_enter_backend() -- %s lock NOT granted\n",
writer ? "write" : "read", 0, 0 ); writer ? "write" : "read", 0, 0 );
break; break;
case DB_LOCK_DEADLOCK: case DB_LOCK_DEADLOCK:
Debug( LDAP_DEBUG_ANY, Debug( LDAP_DEBUG_ANY,
"bdb2i_enter_backend() -- %s lock returned DEADLOCK\n", "bdb2i_enter_backend() -- %s lock returned DEADLOCK\n",
writer ? "write" : "read", 0, 0 ); writer ? "write" : "read", 0, 0 );
break; break;
default: default:
Debug( LDAP_DEBUG_ANY, Debug( LDAP_DEBUG_ANY,
"bdb2i_enter_backend() -- %s lock returned ERROR: %s\n", "bdb2i_enter_backend() -- %s lock returned ERROR: %s\n",
writer ? "write" : "read", strerror( errno ), 0 ); writer ? "write" : "read", strerror( errno ), 0 );
ret = errno; ret = errno;
break; break;
}
break;
} }
return( ret ); return( ret );
@ -87,37 +92,42 @@ bdb2i_enter_backend_w( DB_ENV *dbEnv, DB_LOCK *lock )
int int
bdb2i_leave_backend( DB_ENV *dbEnv, DB_LOCK lock ) bdb2i_leave_backend( DB_ENV *dbEnv, DB_LOCK lock )
{ {
int ret; int ret = 0;
if ( ( slapMode != SLAP_SERVER_MODE ) && ( slapMode != SLAP_TOOL_MODE ) ) switch ( slapMode ) {
return( 0 );
switch( ( ret = lock_put( dbEnv->lk_info, lock ))) { case SLAP_SERVER_MODE:
case SLAP_TIMEDSERVER_MODE:
case SLAP_TOOL_MODE:
switch( ( ret = lock_put( dbEnv->lk_info, lock ))) {
case 0: case 0:
Debug( LDAP_DEBUG_TRACE, "bdb2i_leave_backend() -- lock released\n", Debug( LDAP_DEBUG_TRACE,
"bdb2i_leave_backend() -- lock released\n",
0, 0, 0 ); 0, 0, 0 );
break; break;
case DB_LOCK_NOTHELD: case DB_LOCK_NOTHELD:
Debug( LDAP_DEBUG_ANY, Debug( LDAP_DEBUG_ANY,
"bdb2i_leave_backend() -- lock NOT held\n", "bdb2i_leave_backend() -- lock NOT held\n",
0, 0, 0 ); 0, 0, 0 );
break; break;
case DB_LOCK_DEADLOCK: case DB_LOCK_DEADLOCK:
Debug( LDAP_DEBUG_ANY, Debug( LDAP_DEBUG_ANY,
"bdb2i_leave_backend() -- lock returned DEADLOCK\n", "bdb2i_leave_backend() -- lock returned DEADLOCK\n",
0, 0, 0 ); 0, 0, 0 );
break; break;
default: default:
Debug( LDAP_DEBUG_ANY, Debug( LDAP_DEBUG_ANY,
"bdb2i_leave_backend() -- lock returned ERROR: %s\n", "bdb2i_leave_backend() -- lock returned ERROR: %s\n",
strerror( errno ), 0, 0 ); strerror( errno ), 0, 0 );
ret = errno; ret = errno;
break; break;
}
break;
} }
return( ret ); return( ret );

View file

@ -155,6 +155,9 @@ int bdb2i_back_db_shutdown LDAP_P(( BackendDB *be ));
char *bdb2i_elapsed LDAP_P(( struct timeval firsttime, char *bdb2i_elapsed LDAP_P(( struct timeval firsttime,
struct timeval secondtime )); struct timeval secondtime ));
void bdb2i_start_timing LDAP_P(( BackendInfo *bi, struct timeval *time1 ));
void bdb2i_stop_timing LDAP_P(( BackendInfo *bi, struct timeval time1,
char *func, Connection *conn, Operation *op ));
/* /*
* porter.c * porter.c

View file

@ -330,14 +330,12 @@ bdb2_back_search(
int attrsonly int attrsonly
) )
{ {
DB_LOCK lock; DB_LOCK lock;
struct ldbminfo *li = (struct ldbminfo *) be->be_private; struct ldbminfo *li = (struct ldbminfo *) be->be_private;
struct timeval time1;
int ret;
struct timeval time1, time2; bdb2i_start_timing( be->be_private, &time1 );
char *elapsed_time;
int ret;
gettimeofday( &time1, NULL );
if ( bdb2i_enter_backend_r( get_dbenv( be ), &lock ) != 0 ) { if ( bdb2i_enter_backend_r( get_dbenv( be ), &lock ) != 0 ) {
@ -350,16 +348,7 @@ bdb2_back_search(
slimit, tlimit, filter, filterstr, attrs, attrsonly ); slimit, tlimit, filter, filterstr, attrs, attrsonly );
(void) bdb2i_leave_backend( get_dbenv( be ), lock ); (void) bdb2i_leave_backend( get_dbenv( be ), lock );
bdb2i_stop_timing( be->be_private, time1, "SRCH", conn, op );
if ( bdb2i_do_timing ) {
gettimeofday( &time2, NULL);
elapsed_time = bdb2i_elapsed( time1, time2 );
Debug( LDAP_DEBUG_ANY, "conn=%d op=%d SRCH elapsed=%s\n",
conn->c_connid, op->o_opid, elapsed_time );
free( elapsed_time );
}
return( ret ); return( ret );
} }

View file

@ -112,23 +112,13 @@ bdb2i_back_startup(
BackendInfo *bi BackendInfo *bi
) )
{ {
struct timeval time1, time2; struct timeval time1;
char *elapsed_time; int ret;
int ret;
gettimeofday( &time1, NULL ); bdb2i_start_timing( bi, &time1 );
ret = bdb2i_back_startup_internal( bi ); ret = bdb2i_back_startup_internal( bi );
bdb2i_stop_timing( bi, time1, "BE-START", NULL, NULL );
if ( bdb2i_do_timing ) {
gettimeofday( &time2, NULL);
elapsed_time = bdb2i_elapsed( time1, time2 );
Debug( LDAP_DEBUG_ANY, "BE-START elapsed=%s\n",
elapsed_time, 0, 0 );
free( elapsed_time );
}
return( ret ); return( ret );
} }
@ -139,23 +129,13 @@ bdb2i_back_shutdown(
BackendInfo *bi BackendInfo *bi
) )
{ {
struct timeval time1, time2; struct timeval time1;
char *elapsed_time; int ret;
int ret;
gettimeofday( &time1, NULL ); bdb2i_start_timing( bi, &time1 );
ret = bdb2i_back_shutdown_internal( bi ); ret = bdb2i_back_shutdown_internal( bi );
bdb2i_stop_timing( bi, time1, "BE-SHUTDOWN", NULL, NULL );
if ( bdb2i_do_timing ) {
gettimeofday( &time2, NULL);
elapsed_time = bdb2i_elapsed( time1, time2 );
Debug( LDAP_DEBUG_ANY, "BE-SHUTDOWN elapsed=%s\n",
elapsed_time, 0, 0 );
free( elapsed_time );
}
return( ret ); return( ret );
} }
@ -208,23 +188,13 @@ bdb2_back_db_startup(
BackendDB *be BackendDB *be
) )
{ {
struct timeval time1, time2; struct timeval time1;
char *elapsed_time; int ret;
int ret;
gettimeofday( &time1, NULL ); bdb2i_start_timing( be->be_private, &time1 );
ret = bdb2i_back_db_startup_internal( be ); ret = bdb2i_back_db_startup_internal( be );
bdb2i_stop_timing( be->be_private, time1, "DB-START", NULL, NULL );
if ( bdb2i_do_timing ) {
gettimeofday( &time2, NULL);
elapsed_time = bdb2i_elapsed( time1, time2 );
Debug( LDAP_DEBUG_ANY, "DB-START elapsed=%s\n",
elapsed_time, 0, 0 );
free( elapsed_time );
}
return( ret ); return( ret );
} }
@ -235,23 +205,13 @@ bdb2_back_db_shutdown(
BackendDB *be BackendDB *be
) )
{ {
struct timeval time1, time2; struct timeval time1;
char *elapsed_time; int ret;
int ret;
gettimeofday( &time1, NULL ); bdb2i_start_timing( be->be_private, &time1 );
ret = bdb2i_back_db_shutdown_internal( be ); ret = bdb2i_back_db_shutdown_internal( be );
bdb2i_stop_timing( be->be_private, time1, "DB-SHUTDOWN", NULL, NULL );
if ( bdb2i_do_timing ) {
gettimeofday( &time2, NULL);
elapsed_time = bdb2i_elapsed( time1, time2 );
Debug( LDAP_DEBUG_ANY, "DB-SHUTDOWN elapsed=%s\n",
elapsed_time, 0, 0 );
free( elapsed_time );
}
return( ret ); return( ret );
} }

View file

@ -12,9 +12,6 @@
#include "back-bdb2.h" #include "back-bdb2.h"
int bdb2i_do_timing = 0;
char * char *
bdb2i_elapsed( struct timeval firsttime, struct timeval secondtime ) bdb2i_elapsed( struct timeval firsttime, struct timeval secondtime )
{ {
@ -33,3 +30,43 @@ bdb2i_elapsed( struct timeval firsttime, struct timeval secondtime )
} }
void
bdb2i_start_timing(
BackendInfo *bi,
struct timeval *time1
)
{
if ( with_timing( bi )) gettimeofday( time1, NULL );
}
void
bdb2i_stop_timing(
BackendInfo *bi,
struct timeval time1,
char *func,
Connection *conn,
Operation *op
)
{
if ( with_timing( bi )) {
struct timeval time2;
char *elapsed_time;
char buf[BUFSIZ];
*buf = '\0';
gettimeofday( &time2, NULL);
elapsed_time = bdb2i_elapsed( time1, time2 );
if ( conn != NULL ) sprintf( buf, "conn=%d ", conn->c_connid );
if ( op != NULL ) sprintf( buf, "%sop=%d ", buf, op->o_opid );
Debug( LDAP_DEBUG_ANY, "%s%s elapsed=%s\n", buf, func, elapsed_time );
free( elapsed_time );
}
}

View file

@ -26,23 +26,13 @@ bdb2_back_unbind(
Operation *op Operation *op
) )
{ {
struct timeval time1, time2; struct timeval time1;
char *elapsed_time; int ret;
int ret;
gettimeofday( &time1, NULL ); bdb2i_start_timing( be->be_private, &time1 );
ret = bdb2i_back_unbind_internal( be, conn, op ); ret = bdb2i_back_unbind_internal( be, conn, op );
bdb2i_stop_timing( be->be_private, time1, "UNBIND", conn, op );
if ( bdb2i_do_timing ) {
gettimeofday( &time2, NULL);
elapsed_time = bdb2i_elapsed( time1, time2 );
Debug( LDAP_DEBUG_ANY, "conn=%d op=%d UNBIND elapsed=%s\n",
conn->c_connid, op->o_opid, elapsed_time );
free( elapsed_time );
}
return( ret ); return( ret );
} }

View file

@ -78,37 +78,44 @@ slap_init( int mode, char *name )
slapMode = mode; slapMode = mode;
if( ( slapMode != SLAP_SERVER_MODE ) && ( slapMode != SLAP_TOOL_MODE ) ) { switch ( slapMode ) {
Debug( LDAP_DEBUG_ANY,
"%s init: undefined mode (%d).\n",
name, mode, 0 );
return 1;
}
Debug( LDAP_DEBUG_TRACE, case SLAP_SERVER_MODE:
"%s init: initiated %s.\n", case SLAP_TOOL_MODE:
name, #ifdef SLAPD_BDB2
mode == SLAP_SERVER_MODE ? "server" : "tool", case SLAP_TIMEDSERVER_MODE:
0 );
slap_name = name;
(void) ldap_pvt_thread_initialize();
ldap_pvt_thread_mutex_init( &active_threads_mutex );
ldap_pvt_thread_cond_init( &active_threads_cond );
ldap_pvt_thread_mutex_init( &new_conn_mutex );
ldap_pvt_thread_mutex_init( &currenttime_mutex );
ldap_pvt_thread_mutex_init( &entry2str_mutex );
ldap_pvt_thread_mutex_init( &replog_mutex );
ldap_pvt_thread_mutex_init( &ops_mutex );
ldap_pvt_thread_mutex_init( &num_sent_mutex );
#ifdef SLAPD_CRYPT
ldap_pvt_thread_mutex_init( &crypt_mutex );
#endif #endif
rc = backend_init(); Debug( LDAP_DEBUG_TRACE,
"%s init: initiated %s.\n",
name, mode == SLAP_TOOL_MODE ? "tool" : "server", 0 );
slap_name = name;
(void) ldap_pvt_thread_initialize();
ldap_pvt_thread_mutex_init( &active_threads_mutex );
ldap_pvt_thread_cond_init( &active_threads_cond );
ldap_pvt_thread_mutex_init( &new_conn_mutex );
ldap_pvt_thread_mutex_init( &currenttime_mutex );
ldap_pvt_thread_mutex_init( &entry2str_mutex );
ldap_pvt_thread_mutex_init( &replog_mutex );
ldap_pvt_thread_mutex_init( &ops_mutex );
ldap_pvt_thread_mutex_init( &num_sent_mutex );
#ifdef SLAPD_CRYPT
ldap_pvt_thread_mutex_init( &crypt_mutex );
#endif
rc = backend_init();
break;
default:
Debug( LDAP_DEBUG_ANY,
"%s init: undefined mode (%d).\n", name, mode, 0 );
rc = 1;
break;
}
return rc; return rc;
} }

View file

@ -69,13 +69,18 @@ main( int argc, char **argv )
#endif #endif
char *configfile; char *configfile;
char *serverName; char *serverName;
int serverMode = SLAP_SERVER_MODE;
configfile = SLAPD_DEFAULT_CONFIGFILE; configfile = SLAPD_DEFAULT_CONFIGFILE;
port = LDAP_PORT; port = LDAP_PORT;
g_argc = argc; g_argc = argc;
g_argv = argv; g_argv = argv;
#ifdef SLAPD_BDB2
while ( (i = getopt( argc, argv, "d:f:ip:s:ut" )) != EOF ) {
#else
while ( (i = getopt( argc, argv, "d:f:ip:s:u" )) != EOF ) { while ( (i = getopt( argc, argv, "d:f:ip:s:u" )) != EOF ) {
#endif
switch ( i ) { switch ( i ) {
#ifdef LDAP_DEBUG #ifdef LDAP_DEBUG
case 'd': /* turn on debugging */ case 'd': /* turn on debugging */
@ -148,6 +153,12 @@ main( int argc, char **argv )
udp = 1; udp = 1;
break; break;
#ifdef SLAPD_BDB2
case 't': /* timed server */
serverMode = SLAP_TIMEDSERVER_MODE;
break;
#endif
default: default:
usage( argv[0] ); usage( argv[0] );
exit( 1 ); exit( 1 );
@ -172,11 +183,7 @@ main( int argc, char **argv )
openlog( serverName, OPENLOG_OPTIONS ); openlog( serverName, OPENLOG_OPTIONS );
#endif #endif
#ifdef SLAPD_BDB2 if ( slap_init( serverMode, serverName ) != 0 ) {
bdb2i_do_timing = 1;
#endif
if ( slap_init( SLAP_SERVER_MODE, serverName ) != 0 ) {
rc = 1; rc = 1;
goto destroy; goto destroy;
} }

View file

@ -22,10 +22,6 @@
#define ldap_debug slap_debug #define ldap_debug slap_debug
#endif #endif
#ifdef SLAPD_BDB2
extern int bdb2i_do_timing;
#endif
#include "ldap_log.h" #include "ldap_log.h"
@ -234,6 +230,9 @@ extern int slapMode;
#define SLAP_UNDEFINED_MODE 0 #define SLAP_UNDEFINED_MODE 0
#define SLAP_SERVER_MODE 1 #define SLAP_SERVER_MODE 1
#define SLAP_TOOL_MODE 2 #define SLAP_TOOL_MODE 2
#ifdef SLAPD_BDB2
# define SLAP_TIMEDSERVER_MODE 3
#endif
/* temporary aliases */ /* temporary aliases */
typedef BackendDB Backend; typedef BackendDB Backend;