mirror of
https://git.openldap.org/openldap/openldap.git
synced 2024-12-27 03:20:22 +08:00
ITS#9628 Fix incorrect c_n_ops_executing counter when backend is asynchronous
This commit is contained in:
parent
ee7a87b017
commit
81ed9e0d0e
@ -132,6 +132,7 @@ typedef struct monitor_info_t {
|
|||||||
AttributeDescription *mi_ad_monitorUpdateRef;
|
AttributeDescription *mi_ad_monitorUpdateRef;
|
||||||
AttributeDescription *mi_ad_monitorRuntimeConfig;
|
AttributeDescription *mi_ad_monitorRuntimeConfig;
|
||||||
AttributeDescription *mi_ad_monitorSuperiorDN;
|
AttributeDescription *mi_ad_monitorSuperiorDN;
|
||||||
|
AttributeDescription *mi_ad_monitorConnectionOpsAsync;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Generic description attribute
|
* Generic description attribute
|
||||||
|
@ -369,6 +369,9 @@ conn_create(
|
|||||||
bv.bv_len = snprintf( buf, sizeof( buf ), "%ld", c->c_n_ops_completed );
|
bv.bv_len = snprintf( buf, sizeof( buf ), "%ld", c->c_n_ops_completed );
|
||||||
attr_merge_one( e, mi->mi_ad_monitorConnectionOpsCompleted, &bv, NULL );
|
attr_merge_one( e, mi->mi_ad_monitorConnectionOpsCompleted, &bv, NULL );
|
||||||
|
|
||||||
|
bv.bv_len = snprintf( buf, sizeof( buf ), "%ld", c->c_n_ops_async );
|
||||||
|
attr_merge_one( e, mi->mi_ad_monitorConnectionOpsAsync, &bv, NULL );
|
||||||
|
|
||||||
bv.bv_len = snprintf( buf, sizeof( buf ), "%ld", c->c_n_get );
|
bv.bv_len = snprintf( buf, sizeof( buf ), "%ld", c->c_n_get );
|
||||||
attr_merge_one( e, mi->mi_ad_monitorConnectionGet, &bv, NULL );
|
attr_merge_one( e, mi->mi_ad_monitorConnectionGet, &bv, NULL );
|
||||||
|
|
||||||
|
@ -1951,6 +1951,13 @@ monitor_back_initialize(
|
|||||||
"NO-USER-MODIFICATION "
|
"NO-USER-MODIFICATION "
|
||||||
"USAGE dSAOperation )", SLAP_AT_FINAL|SLAP_AT_HIDE,
|
"USAGE dSAOperation )", SLAP_AT_FINAL|SLAP_AT_HIDE,
|
||||||
offsetof(monitor_info_t, mi_ad_monitorSuperiorDN) },
|
offsetof(monitor_info_t, mi_ad_monitorSuperiorDN) },
|
||||||
|
{ "( 1.3.6.1.4.1.4203.666.1.55.31 "
|
||||||
|
"NAME 'monitorConnectionOpsAsync' "
|
||||||
|
"DESC 'monitor number of asynchronous operations in execution within the connection' "
|
||||||
|
"SUP monitorCounter "
|
||||||
|
"NO-USER-MODIFICATION "
|
||||||
|
"USAGE dSAOperation )", SLAP_AT_FINAL|SLAP_AT_HIDE,
|
||||||
|
offsetof(monitor_info_t, mi_ad_monitorConnectionOpsAsync) },
|
||||||
{ NULL, 0, -1 }
|
{ NULL, 0, -1 }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -212,7 +212,7 @@ int connections_timeout_idle(time_t now)
|
|||||||
/* Don't timeout a slow-running request or a persistent
|
/* Don't timeout a slow-running request or a persistent
|
||||||
* outbound connection.
|
* outbound connection.
|
||||||
*/
|
*/
|
||||||
if(( c->c_n_ops_executing && !c->c_writewaiter)
|
if((( c->c_n_ops_executing || c->c_n_ops_async ) && !c->c_writewaiter)
|
||||||
|| c->c_conn_state == SLAP_C_CLIENT ) {
|
|| c->c_conn_state == SLAP_C_CLIENT ) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
@ -244,7 +244,7 @@ void connections_drop()
|
|||||||
/* Don't close a slow-running request or a persistent
|
/* Don't close a slow-running request or a persistent
|
||||||
* outbound connection.
|
* outbound connection.
|
||||||
*/
|
*/
|
||||||
if(( c->c_n_ops_executing && !c->c_writewaiter)
|
if((( c->c_n_ops_executing || c->c_n_ops_async ) && !c->c_writewaiter)
|
||||||
|| c->c_conn_state == SLAP_C_CLIENT ) {
|
|| c->c_conn_state == SLAP_C_CLIENT ) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
@ -428,6 +428,7 @@ Connection * connection_init(
|
|||||||
c->c_n_ops_executing = 0;
|
c->c_n_ops_executing = 0;
|
||||||
c->c_n_ops_pending = 0;
|
c->c_n_ops_pending = 0;
|
||||||
c->c_n_ops_completed = 0;
|
c->c_n_ops_completed = 0;
|
||||||
|
c->c_n_ops_async = 0;
|
||||||
|
|
||||||
c->c_n_get = 0;
|
c->c_n_get = 0;
|
||||||
c->c_n_read = 0;
|
c->c_n_read = 0;
|
||||||
@ -1004,7 +1005,7 @@ connection_op_finish( Operation *op, int lock )
|
|||||||
|
|
||||||
LDAP_STAILQ_REMOVE( &conn->c_ops, op, Operation, o_next);
|
LDAP_STAILQ_REMOVE( &conn->c_ops, op, Operation, o_next);
|
||||||
LDAP_STAILQ_NEXT(op, o_next) = NULL;
|
LDAP_STAILQ_NEXT(op, o_next) = NULL;
|
||||||
conn->c_n_ops_executing--;
|
conn->c_n_ops_async--;
|
||||||
conn->c_n_ops_completed++;
|
conn->c_n_ops_completed++;
|
||||||
connection_resched( conn );
|
connection_resched( conn );
|
||||||
if ( lock )
|
if ( lock )
|
||||||
@ -1122,6 +1123,8 @@ operations_error:
|
|||||||
*/
|
*/
|
||||||
slap_sl_mem_setctx( ctx, NULL );
|
slap_sl_mem_setctx( ctx, NULL );
|
||||||
ldap_pvt_thread_mutex_lock( &conn->c_mutex );
|
ldap_pvt_thread_mutex_lock( &conn->c_mutex );
|
||||||
|
conn->c_n_ops_executing--;
|
||||||
|
conn->c_n_ops_async++;
|
||||||
connection_resched( conn );
|
connection_resched( conn );
|
||||||
ldap_pvt_thread_mutex_unlock( &conn->c_mutex );
|
ldap_pvt_thread_mutex_unlock( &conn->c_mutex );
|
||||||
return NULL;
|
return NULL;
|
||||||
|
@ -2975,6 +2975,7 @@ struct Connection {
|
|||||||
long c_n_ops_executing; /* num of ops currently executing */
|
long c_n_ops_executing; /* num of ops currently executing */
|
||||||
long c_n_ops_pending; /* num of ops pending execution */
|
long c_n_ops_pending; /* num of ops pending execution */
|
||||||
long c_n_ops_completed; /* num of ops completed */
|
long c_n_ops_completed; /* num of ops completed */
|
||||||
|
long c_n_ops_async; /* mum of ops currently executing asynchronously */
|
||||||
|
|
||||||
long c_n_get; /* num of get calls */
|
long c_n_get; /* num of get calls */
|
||||||
long c_n_read; /* num of read calls */
|
long c_n_read; /* num of read calls */
|
||||||
|
@ -233,6 +233,7 @@ slapi_int_connection_init_pb( Slapi_PBlock *pb, ber_tag_t tag )
|
|||||||
conn->c_n_ops_executing = 0;
|
conn->c_n_ops_executing = 0;
|
||||||
conn->c_n_ops_pending = 0;
|
conn->c_n_ops_pending = 0;
|
||||||
conn->c_n_ops_completed = 0;
|
conn->c_n_ops_completed = 0;
|
||||||
|
conn->c_n_ops_async = 0;
|
||||||
|
|
||||||
conn->c_n_get = 0;
|
conn->c_n_get = 0;
|
||||||
conn->c_n_read = 0;
|
conn->c_n_read = 0;
|
||||||
|
Loading…
Reference in New Issue
Block a user