ITS#9600 Rework monitor entry management

Connection entries are now persistent and can be addressed, preparing
the ground so we can process modify operations on individual entries.
This commit is contained in:
Ondřej Kuzník 2021-04-22 13:30:32 +01:00
parent 6d95cc3935
commit e9dfb7d21d
8 changed files with 336 additions and 207 deletions

View File

@ -608,6 +608,14 @@ client_init(
/* We only register the write event when we have data pending */
event_add( c->c_read_event, c->c_read_timeout );
#ifdef BALANCER_MODULE
if ( lload_monitor_client_subsys &&
lload_monitor_conn_entry_create(
c, lload_monitor_client_subsys ) ) {
goto fail;
}
#endif /* BALANCER_MODULE */
checked_lock( &clients_mutex );
LDAP_CIRCLEQ_INSERT_TAIL( &clients, c, c_next );
checked_unlock( &clients_mutex );
@ -741,6 +749,17 @@ client_destroy( LloadConnection *c )
CONNECTION_LOCK(c);
assert( c->c_state == LLOAD_C_DYING );
#ifdef BALANCER_MODULE
/*
* Can't do this in client_unlink as that could be run from cn=monitor
* modify callback.
*/
if ( !BER_BVISNULL( &c->c_monitor_dn ) ) {
lload_monitor_conn_unlink( c );
}
#endif /* BALANCER_MODULE */
c->c_state = LLOAD_C_INVALID;
assert( c->c_ops == NULL );

View File

@ -495,6 +495,10 @@ struct LloadConnection {
TAvlnode *c_linked;
#ifdef BALANCER_MODULE
struct berval c_monitor_dn;
#endif /* BALANCER_MODULE */
/*
* Protected by the CIRCLEQ mutex:
* - Client: clients_mutex
@ -583,12 +587,6 @@ struct LloadListener {
typedef int (*CONNCB)( LloadConnection *c, void *arg );
struct lload_monitor_conn_arg {
Operation *op;
monitor_subsys_t *ms;
Entry **ep;
};
/* config requires a bi_private with configuration data - dummy for now */
struct lload_conf_info {
int dummy;

View File

@ -34,6 +34,7 @@
#include "lload.h"
#include "lber_pvt.h"
#include "lutil.h"
#include "ldap_rq.h"
#include "lload-config.h"
@ -86,12 +87,15 @@ static AttributeDescription *ad_olmRejectedOps;
static AttributeDescription *ad_olmCompletedOps;
static AttributeDescription *ad_olmFailedOps;
static AttributeDescription *ad_olmConnectionType;
static AttributeDescription *ad_olmConnectionState;
static AttributeDescription *ad_olmPendingOps;
static AttributeDescription *ad_olmPendingConnections;
static AttributeDescription *ad_olmActiveConnections;
static AttributeDescription *ad_olmIncomingConnections;
static AttributeDescription *ad_olmOutgoingConnections;
monitor_subsys_t *lload_monitor_client_subsys;
static struct {
char *name;
char *oid;
@ -197,6 +201,13 @@ static struct {
"NO-USER-MODIFICATION "
"USAGE dSAOperation )",
&ad_olmOutgoingConnections },
{ "( olmBalancerAttributes:13 "
"NAME ( 'olmConnectionState' ) "
"DESC 'Connection state' "
"EQUALITY caseIgnoreMatch "
"SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 "
"USAGE dSAOperation )",
&ad_olmConnectionState },
{ NULL }
};
@ -253,6 +264,7 @@ static struct {
"SUP top STRUCTURAL "
"MAY ( "
"olmConnectionType "
"$ olmConnectionState "
"$ olmPendingOps "
"$ olmReceivedOps "
"$ olmCompletedOps "
@ -519,82 +531,24 @@ done:
return rc;
}
/*
* Monitor cache is locked, the connection cannot be unlinked and freed under us.
* That also means we need to unlock and finish as soon as possible.
*/
static int
lload_monitor_in_conn_entry( LloadConnection *conn, void *argv )
lload_monitor_conn_update( Operation *op, SlapReply *rs, Entry *e, void *priv )
{
Entry *e;
monitor_entry_t *mp;
struct lload_monitor_conn_arg *arg = argv;
monitor_extra_t *mbe = arg->op->o_bd->bd_info->bi_extra;
char buf[SLAP_TEXT_BUFLEN];
struct berval bv;
Attribute *a;
LloadConnection *c = priv;
struct berval bv_type, bv_state;
ldap_pvt_mp_t active, pending, received, completed, failed;
bv.bv_val = buf;
bv.bv_len = snprintf(
bv.bv_val, SLAP_TEXT_BUFLEN, "cn=Connection %lu", conn->c_connid );
CONNECTION_LOCK(c);
e = mbe->entry_stub( &arg->ms->mss_dn, &arg->ms->mss_ndn, &bv,
oc_olmBalancerConnection, NULL, NULL );
mp = mbe->entrypriv_create();
e->e_private = mp;
mp->mp_info = arg->ms;
mp->mp_flags = MONITOR_F_SUB | MONITOR_F_VOLATILE;
*arg->ep = e;
arg->ep = &mp->mp_next;
return 0;
}
static int
lload_monitor_in_conn_create(
Operation *op,
SlapReply *rs,
struct berval *ndn,
Entry *e_parent,
Entry **ep )
{
monitor_entry_t *mp_parent;
struct lload_monitor_conn_arg arg = {
.op = op,
.ep = ep,
};
assert( e_parent->e_private != NULL );
mp_parent = e_parent->e_private;
arg.ms = (monitor_subsys_t *)mp_parent->mp_info;
checked_lock( &clients_mutex );
connections_walk(
&clients_mutex, &clients, lload_monitor_in_conn_entry, &arg );
checked_unlock( &clients_mutex );
return 0;
}
static int
lload_monitor_up_conn_entry( LloadConnection *c, void *argv )
{
Entry *e;
monitor_entry_t *mp;
struct lload_monitor_conn_arg *arg = argv;
monitor_extra_t *mbe = arg->op->o_bd->bd_info->bi_extra;
char buf[SLAP_TEXT_BUFLEN];
struct berval bv_rdn,
bv_type = BER_BVNULL,
bv_pending = BER_BVNULL,
bv_received = BER_BVNULL,
bv_completed = BER_BVNULL,
bv_failed = BER_BVNULL;
bv_rdn.bv_val = buf;
bv_rdn.bv_len = snprintf(
bv_rdn.bv_val, SLAP_TEXT_BUFLEN, "cn=Connection %lu", c->c_connid );
e = mbe->entry_stub( &arg->ms->mss_dn, &arg->ms->mss_ndn, &bv_rdn,
oc_olmBalancerConnection, NULL, NULL );
pending = (ldap_pvt_mp_t)c->c_n_ops_executing;
received = c->c_counters.lc_ops_received;
completed = c->c_counters.lc_ops_completed;
failed = c->c_counters.lc_ops_failed;
switch ( c->c_type ) {
case LLOAD_C_OPEN: {
@ -619,72 +573,160 @@ lload_monitor_up_conn_entry( LloadConnection *c, void *argv )
} break;
}
UI2BV( &bv_pending, (long long unsigned int)c->c_n_ops_executing );
UI2BV( &bv_received, c->c_counters.lc_ops_received );
UI2BV( &bv_completed, c->c_counters.lc_ops_completed );
UI2BV( &bv_failed, c->c_counters.lc_ops_failed );
attr_merge_normalize_one( e, ad_olmConnectionType, &bv_type, NULL );
attr_merge_normalize_one( e, ad_olmPendingOps, &bv_pending, NULL );
attr_merge_normalize_one( e, ad_olmReceivedOps, &bv_received, NULL );
attr_merge_normalize_one( e, ad_olmCompletedOps, &bv_completed, NULL );
attr_merge_normalize_one( e, ad_olmFailedOps, &bv_failed, NULL );
ch_free( bv_pending.bv_val );
ch_free( bv_received.bv_val );
ch_free( bv_completed.bv_val );
ch_free( bv_failed.bv_val );
mp = mbe->entrypriv_create();
e->e_private = mp;
mp->mp_info = arg->ms;
mp->mp_flags = MONITOR_F_SUB | MONITOR_F_VOLATILE;
*arg->ep = e;
arg->ep = &mp->mp_next;
return 0;
}
static int
lload_monitor_up_conn_create(
Operation *op,
SlapReply *rs,
struct berval *ndn,
Entry *e_parent,
Entry **ep )
{
monitor_entry_t *mp_parent;
monitor_subsys_t *ms;
LloadBackend *b;
struct lload_monitor_conn_arg arg = {
.op = op,
.ep = ep,
};
assert( e_parent->e_private != NULL );
mp_parent = e_parent->e_private;
ms = (monitor_subsys_t *)mp_parent->mp_info;
b = ms->mss_private;
if ( !b ) {
return -1;
switch ( c->c_state ) {
case LLOAD_C_INVALID: {
/* *_destroy removes the entry from list before setting c_state to
* INVALID */
assert(0);
} break;
case LLOAD_C_READY: {
struct berval bv = BER_BVC("ready");
bv_state = bv;
} break;
case LLOAD_C_CLOSING: {
struct berval bv = BER_BVC("closing");
bv_state = bv;
} break;
case LLOAD_C_ACTIVE: {
struct berval bv = BER_BVC("active");
bv_state = bv;
} break;
case LLOAD_C_BINDING: {
struct berval bv = BER_BVC("binding");
bv_state = bv;
} break;
case LLOAD_C_DYING: {
/* I guess we got it before it was unlinked? */
struct berval bv = BER_BVC("dying");
bv_state = bv;
} break;
default: {
struct berval bv = BER_BVC("unknown");
bv_state = bv;
} break;
}
arg.ms = ms;
CONNECTION_UNLOCK(c);
checked_lock( &b->b_mutex );
connections_walk_last( &b->b_mutex, &b->b_conns, b->b_last_conn,
lload_monitor_up_conn_entry, &arg );
a = attr_find( e->e_attrs, ad_olmConnectionType );
assert( a != NULL );
if ( !(a->a_flags & SLAP_ATTR_DONT_FREE_DATA) ) {
ber_memfree( a->a_vals[0].bv_val );
a->a_flags |= SLAP_ATTR_DONT_FREE_DATA;
}
a->a_vals[0] = bv_type;
connections_walk_last( &b->b_mutex, &b->b_bindconns, b->b_last_bindconn,
lload_monitor_up_conn_entry, &arg );
checked_unlock( &b->b_mutex );
a = attr_find( e->e_attrs, ad_olmConnectionState );
assert( a != NULL );
if ( !(a->a_flags & SLAP_ATTR_DONT_FREE_DATA) ) {
ber_memfree( a->a_vals[0].bv_val );
a->a_flags |= SLAP_ATTR_DONT_FREE_DATA;
}
a->a_vals[0] = bv_state;
a = attr_find( e->e_attrs, ad_olmPendingOps );
assert( a != NULL );
UI2BV( &a->a_vals[0], pending );
a = attr_find( e->e_attrs, ad_olmReceivedOps );
assert( a != NULL );
UI2BV( &a->a_vals[0], received );
a = attr_find( e->e_attrs, ad_olmCompletedOps );
assert( a != NULL );
UI2BV( &a->a_vals[0], completed );
a = attr_find( e->e_attrs, ad_olmFailedOps );
assert( a != NULL );
UI2BV( &a->a_vals[0], failed );
return SLAP_CB_CONTINUE;
}
int
lload_monitor_conn_unlink( LloadConnection *c )
{
BackendInfo *mi = backend_info( "monitor" );
monitor_extra_t *mbe = mi->bi_extra;
assert( mbe && mbe->is_configured() );
CONNECTION_ASSERT_LOCKED(c);
assert( !BER_BVISNULL( &c->c_monitor_dn ) );
/*
* Avoid a lock inversion with threads holding monitor cache locks in turn
* waiting on CONNECTION_LOCK(c)
*/
CONNECTION_UNLOCK(c);
mbe->unregister_entry( &c->c_monitor_dn );
CONNECTION_LOCK(c);
ber_memfree( c->c_monitor_dn.bv_val );
BER_BVZERO( &c->c_monitor_dn );
return 0;
}
int
lload_monitor_conn_entry_create( LloadConnection *c, monitor_subsys_t *ms )
{
char buf[SLAP_TEXT_BUFLEN];
char timebuf[LDAP_LUTIL_GENTIME_BUFSIZE];
struct tm tm;
struct berval bv_rdn, bv_timestamp, zero = BER_BVC("0"),
value = BER_BVC("unknown");
monitor_entry_t *mp;
monitor_callback_t *cb;
Entry *e;
Attribute *a;
BackendInfo *mi = backend_info( "monitor" );
monitor_extra_t *mbe = mi->bi_extra;
assert( mbe && mbe->is_configured() );
CONNECTION_ASSERT_LOCKED(c);
assert( BER_BVISNULL( &c->c_monitor_dn ) );
bv_rdn.bv_val = buf;
bv_rdn.bv_len = snprintf(
bv_rdn.bv_val, SLAP_TEXT_BUFLEN, "cn=Connection %lu", c->c_connid );
ldap_pvt_gmtime( &c->c_activitytime, &tm );
bv_timestamp.bv_len = lutil_gentime( timebuf, sizeof(timebuf), &tm );
bv_timestamp.bv_val = timebuf;
e = mbe->entry_stub( &ms->mss_dn, &ms->mss_ndn, &bv_rdn,
oc_olmBalancerConnection, &bv_timestamp, &bv_timestamp );
cb = ch_calloc( sizeof(monitor_callback_t), 1 );
cb->mc_update = lload_monitor_conn_update;
cb->mc_private = c;
attr_merge_one( e, ad_olmConnectionType, &value, NULL );
attr_merge_one( e, ad_olmConnectionState, &value, NULL );
attr_merge_one( e, ad_olmPendingOps, &zero, NULL );
attr_merge_one( e, ad_olmReceivedOps, &zero, NULL );
attr_merge_one( e, ad_olmCompletedOps, &zero, NULL );
attr_merge_one( e, ad_olmFailedOps, &zero, NULL );
if ( mbe->register_entry( e, cb, NULL, 0 ) ) {
Debug( LDAP_DEBUG_ANY, "lload_monitor_conn_entry_create: "
"failed to register monitor entry for connid=%lu\n",
c->c_connid );
ch_free( cb );
entry_free( e );
return -1;
}
ber_dupbv( &c->c_monitor_dn, &e->e_nname );
entry_free( e );
return 0;
}
static int
lload_monitor_incoming_conn_init( BackendDB *be, monitor_subsys_t *ms )
{
monitor_extra_t *mbe;
@ -694,7 +736,6 @@ lload_monitor_incoming_conn_init( BackendDB *be, monitor_subsys_t *ms )
assert( be != NULL );
mbe = (monitor_extra_t *)be->bd_info->bi_extra;
ms->mss_create = lload_monitor_in_conn_create;
ms->mss_destroy = lload_monitor_subsystem_destroy;
dnNormalize( 0, NULL, NULL, &ms->mss_dn, &ms->mss_ndn, NULL );
@ -711,7 +752,7 @@ lload_monitor_incoming_conn_init( BackendDB *be, monitor_subsys_t *ms )
ber_dupbv( &ms->mss_dn, &e->e_name );
ber_dupbv( &ms->mss_ndn, &e->e_nname );
rc = mbe->register_entry( e, NULL, ms, MONITOR_F_VOLATILE_CH );
rc = mbe->register_entry( e, NULL, ms, 0 );
if ( rc != LDAP_SUCCESS ) {
Debug( LDAP_DEBUG_ANY, "lload_monitor_incoming_conn_init: "
@ -719,6 +760,9 @@ lload_monitor_incoming_conn_init( BackendDB *be, monitor_subsys_t *ms )
e->e_name.bv_val );
goto done;
}
lload_monitor_client_subsys = ms;
done:
entry_free( e );
@ -832,7 +876,7 @@ lload_monitor_backend_open( BackendDB *be, monitor_subsys_t *ms )
attr_merge_normalize_one( e, ad_olmCompletedOps, &value, NULL );
attr_merge_normalize_one( e, ad_olmFailedOps, &value, NULL );
rc = mbe->register_entry( e, cb, ms, MONITOR_F_VOLATILE_CH );
rc = mbe->register_entry( e, cb, ms, 0 );
if ( rc != LDAP_SUCCESS ) {
Debug( LDAP_DEBUG_ANY, "lload_monitor_backend_open: "
@ -841,7 +885,6 @@ lload_monitor_backend_open( BackendDB *be, monitor_subsys_t *ms )
goto done;
}
b->b_monitor = ms;
ms->mss_destroy = lload_monitor_backend_destroy;
done:
@ -867,9 +910,8 @@ lload_monitor_backend_init(
bk_mss->mss_rdn.bv_len, "cn=%s", b->b_name.bv_val );
bk_mss->mss_name = b->b_name.bv_val;
bk_mss->mss_flags = MONITOR_F_VOLATILE_CH;
bk_mss->mss_flags = MONITOR_F_NONE;
bk_mss->mss_open = lload_monitor_backend_open;
bk_mss->mss_create = lload_monitor_up_conn_create;
bk_mss->mss_destroy = lload_monitor_subsystem_destroy;
bk_mss->mss_update = NULL;
bk_mss->mss_private = b;
@ -878,8 +920,11 @@ lload_monitor_backend_init(
Debug( LDAP_DEBUG_ANY, "lload_monitor_backend_init: "
"failed to register backend %s\n",
bk_mss->mss_name );
ch_free( bk_mss );
return -1;
}
b->b_monitor = bk_mss;
return LDAP_SUCCESS;
}
@ -1102,7 +1147,7 @@ static struct monitor_subsys_t balancer_subsys[] = {
BER_BVNULL,
{ BER_BVC("Load Balancer incoming connections"),
BER_BVNULL },
MONITOR_F_VOLATILE_CH,
MONITOR_F_NONE,
lload_monitor_incoming_conn_init,
lload_monitor_subsystem_destroy, /* destroy */
NULL, /* update */

View File

@ -163,7 +163,10 @@ LDAP_SLAPD_F (void) lload_libevent_destroy( void );
/*
* monitor.c
*/
LDAP_SLAPD_V (monitor_subsys_t *) lload_monitor_client_subsys;
LDAP_SLAPD_F (int) lload_monitor_open( void );
LDAP_SLAPD_F (int) lload_monitor_conn_entry_create( LloadConnection *c, monitor_subsys_t *ms );
LDAP_SLAPD_F (int) lload_monitor_conn_unlink( LloadConnection *c );
LDAP_SLAPD_F (int) lload_monitor_backend_init( BackendInfo *bi, monitor_subsys_t *ms, LloadBackend *b );
LDAP_SLAPD_F (int) lload_monitor_tier_init( BackendInfo *bi, LloadTier *tier );
#endif /* BALANCER_MODULE */

View File

@ -966,6 +966,12 @@ upstream_init( ber_socket_t s, LloadBackend *b )
c->c_destroy = upstream_destroy;
c->c_unlink = upstream_unlink;
#ifdef BALANCER_MODULE
if ( b->b_monitor && lload_monitor_conn_entry_create( c, b->b_monitor ) ) {
goto fail;
}
#endif /* BALANCER_MODULE */
#ifdef HAVE_TLS
if ( c->c_is_tls == LLOAD_CLEARTEXT ) {
#endif /* HAVE_TLS */
@ -1122,6 +1128,17 @@ upstream_destroy( LloadConnection *c )
CONNECTION_LOCK(c);
assert( c->c_state == LLOAD_C_DYING );
#ifdef BALANCER_MODULE
/*
* Can't do this in upstream_unlink as that could be run from cn=monitor
* modify callback.
*/
if ( !BER_BVISNULL( &c->c_monitor_dn ) ) {
lload_monitor_conn_unlink( c );
}
#endif /* BALANCER_MODULE */
c->c_state = LLOAD_C_INVALID;
assert( c->c_ops == NULL );

View File

@ -79,6 +79,7 @@ dn: cn=Connection 1,cn=backend,cn=first,cn=Backend Tiers,cn=Load Balancer,cn=B
ackends,cn=Monitor
objectClass: olmBalancerConnection
olmConnectionType: regular
olmConnectionState: ready
olmPendingOps: 0
olmReceivedOps: 0
olmCompletedOps: 0
@ -88,6 +89,7 @@ dn: cn=Connection 3,cn=backend,cn=first,cn=Backend Tiers,cn=Load Balancer,cn=B
ackends,cn=Monitor
objectClass: olmBalancerConnection
olmConnectionType: regular
olmConnectionState: ready
olmPendingOps: 0
olmReceivedOps: 0
olmCompletedOps: 0
@ -97,6 +99,7 @@ dn: cn=Connection 2,cn=backend,cn=first,cn=Backend Tiers,cn=Load Balancer,cn=B
ackends,cn=Monitor
objectClass: olmBalancerConnection
olmConnectionType: bind
olmConnectionState: ready
olmPendingOps: 0
olmReceivedOps: 0
olmCompletedOps: 0
@ -106,6 +109,7 @@ dn: cn=Connection 4,cn=backend,cn=first,cn=Backend Tiers,cn=Load Balancer,cn=B
ackends,cn=Monitor
objectClass: olmBalancerConnection
olmConnectionType: bind
olmConnectionState: ready
olmPendingOps: 0
olmReceivedOps: 0
olmCompletedOps: 0
@ -161,6 +165,7 @@ dn: cn=Connection 1,cn=backend,cn=first,cn=Backend Tiers,cn=Load Balancer,cn=B
ackends,cn=Monitor
objectClass: olmBalancerConnection
olmConnectionType: regular
olmConnectionState: ready
olmPendingOps: 0
olmReceivedOps: 0
olmCompletedOps: 0
@ -170,6 +175,7 @@ dn: cn=Connection 3,cn=backend,cn=first,cn=Backend Tiers,cn=Load Balancer,cn=B
ackends,cn=Monitor
objectClass: olmBalancerConnection
olmConnectionType: regular
olmConnectionState: ready
olmPendingOps: 0
olmReceivedOps: 0
olmCompletedOps: 0
@ -179,6 +185,7 @@ dn: cn=Connection 2,cn=backend,cn=first,cn=Backend Tiers,cn=Load Balancer,cn=B
ackends,cn=Monitor
objectClass: olmBalancerConnection
olmConnectionType: bind
olmConnectionState: ready
olmPendingOps: 0
olmReceivedOps: 1
olmCompletedOps: 1
@ -188,6 +195,7 @@ dn: cn=Connection 4,cn=backend,cn=first,cn=Backend Tiers,cn=Load Balancer,cn=B
ackends,cn=Monitor
objectClass: olmBalancerConnection
olmConnectionType: bind
olmConnectionState: ready
olmPendingOps: 0
olmReceivedOps: 1
olmCompletedOps: 1
@ -208,6 +216,7 @@ dn: cn=Connection 5,cn=server 2,cn=first,cn=Backend Tiers,cn=Load Balancer,cn=
Backends,cn=Monitor
objectClass: olmBalancerConnection
olmConnectionType: regular
olmConnectionState: ready
olmPendingOps: 0
olmReceivedOps: 1
olmCompletedOps: 1
@ -217,6 +226,7 @@ dn: cn=Connection 7,cn=server 2,cn=first,cn=Backend Tiers,cn=Load Balancer,cn=
Backends,cn=Monitor
objectClass: olmBalancerConnection
olmConnectionType: regular
olmConnectionState: ready
olmPendingOps: 0
olmReceivedOps: 1
olmCompletedOps: 1
@ -226,6 +236,7 @@ dn: cn=Connection 8,cn=server 2,cn=first,cn=Backend Tiers,cn=Load Balancer,cn=
Backends,cn=Monitor
objectClass: olmBalancerConnection
olmConnectionType: regular
olmConnectionState: ready
olmPendingOps: 0
olmReceivedOps: 0
olmCompletedOps: 0
@ -235,6 +246,7 @@ dn: cn=Connection 9,cn=server 2,cn=first,cn=Backend Tiers,cn=Load Balancer,cn=
Backends,cn=Monitor
objectClass: olmBalancerConnection
olmConnectionType: regular
olmConnectionState: ready
olmPendingOps: 0
olmReceivedOps: 0
olmCompletedOps: 0
@ -244,6 +256,7 @@ dn: cn=Connection 6,cn=server 2,cn=first,cn=Backend Tiers,cn=Load Balancer,cn=
Backends,cn=Monitor
objectClass: olmBalancerConnection
olmConnectionType: bind
olmConnectionState: ready
olmPendingOps: 0
olmReceivedOps: 0
olmCompletedOps: 0
@ -253,6 +266,7 @@ dn: cn=Connection 10,cn=server 2,cn=first,cn=Backend Tiers,cn=Load Balancer,cn
=Backends,cn=Monitor
objectClass: olmBalancerConnection
olmConnectionType: bind
olmConnectionState: ready
olmPendingOps: 0
olmReceivedOps: 0
olmCompletedOps: 0
@ -262,6 +276,7 @@ dn: cn=Connection 11,cn=server 2,cn=first,cn=Backend Tiers,cn=Load Balancer,cn
=Backends,cn=Monitor
objectClass: olmBalancerConnection
olmConnectionType: bind
olmConnectionState: ready
olmPendingOps: 0
olmReceivedOps: 0
olmCompletedOps: 0
@ -271,6 +286,7 @@ dn: cn=Connection 12,cn=server 2,cn=first,cn=Backend Tiers,cn=Load Balancer,cn
=Backends,cn=Monitor
objectClass: olmBalancerConnection
olmConnectionType: bind
olmConnectionState: ready
olmPendingOps: 0
olmReceivedOps: 0
olmCompletedOps: 0
@ -280,6 +296,7 @@ dn: cn=Connection 13,cn=server 2,cn=first,cn=Backend Tiers,cn=Load Balancer,cn
=Backends,cn=Monitor
objectClass: olmBalancerConnection
olmConnectionType: bind
olmConnectionState: ready
olmPendingOps: 0
olmReceivedOps: 0
olmCompletedOps: 0

View File

@ -47,15 +47,7 @@ dn: cn=Connection 1,cn=backend,cn=first,cn=Backend Tiers,cn=Load Balancer,cn=B
ackends,cn=Monitor
objectClass: olmBalancerConnection
olmConnectionType: regular
olmPendingOps: 0
olmReceivedOps: 0
olmCompletedOps: 0
olmFailedOps: 0
dn: cn=Connection 3,cn=backend,cn=first,cn=Backend Tiers,cn=Load Balancer,cn=B
ackends,cn=Monitor
objectClass: olmBalancerConnection
olmConnectionType: regular
olmConnectionState: ready
olmPendingOps: 0
olmReceivedOps: 0
olmCompletedOps: 0
@ -65,6 +57,17 @@ dn: cn=Connection 2,cn=backend,cn=first,cn=Backend Tiers,cn=Load Balancer,cn=B
ackends,cn=Monitor
objectClass: olmBalancerConnection
olmConnectionType: bind
olmConnectionState: ready
olmPendingOps: 0
olmReceivedOps: 0
olmCompletedOps: 0
olmFailedOps: 0
dn: cn=Connection 3,cn=backend,cn=first,cn=Backend Tiers,cn=Load Balancer,cn=B
ackends,cn=Monitor
objectClass: olmBalancerConnection
olmConnectionType: regular
olmConnectionState: ready
olmPendingOps: 0
olmReceivedOps: 0
olmCompletedOps: 0
@ -74,6 +77,7 @@ dn: cn=Connection 4,cn=backend,cn=first,cn=Backend Tiers,cn=Load Balancer,cn=B
ackends,cn=Monitor
objectClass: olmBalancerConnection
olmConnectionType: bind
olmConnectionState: ready
olmPendingOps: 0
olmReceivedOps: 0
olmCompletedOps: 0
@ -129,24 +133,27 @@ dn: cn=Connection 1,cn=backend,cn=first,cn=Backend Tiers,cn=Load Balancer,cn=B
ackends,cn=Monitor
objectClass: olmBalancerConnection
olmConnectionType: regular
olmConnectionState: ready
olmPendingOps: 0
olmReceivedOps: 19
olmCompletedOps: 19
olmFailedOps: 0
dn: cn=Connection 3,cn=backend,cn=first,cn=Backend Tiers,cn=Load Balancer,cn=B
ackends,cn=Monitor
objectClass: olmBalancerConnection
olmConnectionType: regular
olmPendingOps: 0
olmReceivedOps: 1
olmCompletedOps: 1
olmFailedOps: 0
dn: cn=Connection 2,cn=backend,cn=first,cn=Backend Tiers,cn=Load Balancer,cn=B
ackends,cn=Monitor
objectClass: olmBalancerConnection
olmConnectionType: bind
olmConnectionState: ready
olmPendingOps: 0
olmReceivedOps: 1
olmCompletedOps: 1
olmFailedOps: 0
dn: cn=Connection 3,cn=backend,cn=first,cn=Backend Tiers,cn=Load Balancer,cn=B
ackends,cn=Monitor
objectClass: olmBalancerConnection
olmConnectionType: regular
olmConnectionState: ready
olmPendingOps: 0
olmReceivedOps: 1
olmCompletedOps: 1
@ -156,6 +163,7 @@ dn: cn=Connection 4,cn=backend,cn=first,cn=Backend Tiers,cn=Load Balancer,cn=B
ackends,cn=Monitor
objectClass: olmBalancerConnection
olmConnectionType: bind
olmConnectionState: ready
olmPendingOps: 0
olmReceivedOps: 0
olmCompletedOps: 0
@ -176,33 +184,7 @@ dn: cn=Connection 5,cn=server 2,cn=first,cn=Backend Tiers,cn=Load Balancer,cn=
Backends,cn=Monitor
objectClass: olmBalancerConnection
olmConnectionType: regular
olmPendingOps: 0
olmReceivedOps: 0
olmCompletedOps: 0
olmFailedOps: 0
dn: cn=Connection 7,cn=server 2,cn=first,cn=Backend Tiers,cn=Load Balancer,cn=
Backends,cn=Monitor
objectClass: olmBalancerConnection
olmConnectionType: regular
olmPendingOps: 0
olmReceivedOps: 0
olmCompletedOps: 0
olmFailedOps: 0
dn: cn=Connection 8,cn=server 2,cn=first,cn=Backend Tiers,cn=Load Balancer,cn=
Backends,cn=Monitor
objectClass: olmBalancerConnection
olmConnectionType: regular
olmPendingOps: 0
olmReceivedOps: 0
olmCompletedOps: 0
olmFailedOps: 0
dn: cn=Connection 9,cn=server 2,cn=first,cn=Backend Tiers,cn=Load Balancer,cn=
Backends,cn=Monitor
objectClass: olmBalancerConnection
olmConnectionType: regular
olmConnectionState: ready
olmPendingOps: 0
olmReceivedOps: 0
olmCompletedOps: 0
@ -212,15 +194,47 @@ dn: cn=Connection 6,cn=server 2,cn=first,cn=Backend Tiers,cn=Load Balancer,cn=
Backends,cn=Monitor
objectClass: olmBalancerConnection
olmConnectionType: bind
olmConnectionState: ready
olmPendingOps: 0
olmReceivedOps: 1
olmCompletedOps: 1
olmFailedOps: 0
dn: cn=Connection 7,cn=server 2,cn=first,cn=Backend Tiers,cn=Load Balancer,cn=
Backends,cn=Monitor
objectClass: olmBalancerConnection
olmConnectionType: regular
olmConnectionState: ready
olmPendingOps: 0
olmReceivedOps: 0
olmCompletedOps: 0
olmFailedOps: 0
dn: cn=Connection 8,cn=server 2,cn=first,cn=Backend Tiers,cn=Load Balancer,cn=
Backends,cn=Monitor
objectClass: olmBalancerConnection
olmConnectionType: regular
olmConnectionState: ready
olmPendingOps: 0
olmReceivedOps: 0
olmCompletedOps: 0
olmFailedOps: 0
dn: cn=Connection 9,cn=server 2,cn=first,cn=Backend Tiers,cn=Load Balancer,cn=
Backends,cn=Monitor
objectClass: olmBalancerConnection
olmConnectionType: regular
olmConnectionState: ready
olmPendingOps: 0
olmReceivedOps: 0
olmCompletedOps: 0
olmFailedOps: 0
dn: cn=Connection 10,cn=server 2,cn=first,cn=Backend Tiers,cn=Load Balancer,cn
=Backends,cn=Monitor
objectClass: olmBalancerConnection
olmConnectionType: bind
olmConnectionState: ready
olmPendingOps: 0
olmReceivedOps: 1
olmCompletedOps: 1
@ -230,6 +244,7 @@ dn: cn=Connection 11,cn=server 2,cn=first,cn=Backend Tiers,cn=Load Balancer,cn
=Backends,cn=Monitor
objectClass: olmBalancerConnection
olmConnectionType: bind
olmConnectionState: ready
olmPendingOps: 0
olmReceivedOps: 0
olmCompletedOps: 0
@ -239,6 +254,7 @@ dn: cn=Connection 12,cn=server 2,cn=first,cn=Backend Tiers,cn=Load Balancer,cn
=Backends,cn=Monitor
objectClass: olmBalancerConnection
olmConnectionType: bind
olmConnectionState: ready
olmPendingOps: 0
olmReceivedOps: 0
olmCompletedOps: 0
@ -248,6 +264,7 @@ dn: cn=Connection 13,cn=server 2,cn=first,cn=Backend Tiers,cn=Load Balancer,cn
=Backends,cn=Monitor
objectClass: olmBalancerConnection
olmConnectionType: bind
olmConnectionState: ready
olmPendingOps: 0
olmReceivedOps: 0
olmCompletedOps: 0
@ -303,33 +320,37 @@ dn: cn=Connection 1,cn=backend,cn=first,cn=Backend Tiers,cn=Load Balancer,cn=B
ackends,cn=Monitor
objectClass: olmBalancerConnection
olmConnectionType: regular
olmConnectionState: ready
olmPendingOps: 0
olmReceivedOps: 20
olmCompletedOps: 20
olmFailedOps: 0
dn: cn=Connection 3,cn=backend,cn=first,cn=Backend Tiers,cn=Load Balancer,cn=B
ackends,cn=Monitor
objectClass: olmBalancerConnection
olmConnectionType: regular
olmPendingOps: 0
olmReceivedOps: 2
olmCompletedOps: 2
olmFailedOps: 0
dn: cn=Connection 2,cn=backend,cn=first,cn=Backend Tiers,cn=Load Balancer,cn=B
ackends,cn=Monitor
objectClass: olmBalancerConnection
olmConnectionType: bind
olmConnectionState: ready
olmPendingOps: 0
olmReceivedOps: 1
olmCompletedOps: 1
olmFailedOps: 0
dn: cn=Connection 3,cn=backend,cn=first,cn=Backend Tiers,cn=Load Balancer,cn=B
ackends,cn=Monitor
objectClass: olmBalancerConnection
olmConnectionType: regular
olmConnectionState: ready
olmPendingOps: 0
olmReceivedOps: 2
olmCompletedOps: 2
olmFailedOps: 0
dn: cn=Connection 4,cn=backend,cn=first,cn=Backend Tiers,cn=Load Balancer,cn=B
ackends,cn=Monitor
objectClass: olmBalancerConnection
olmConnectionType: bind
olmConnectionState: ready
olmPendingOps: 0
olmReceivedOps: 1
olmCompletedOps: 1
@ -350,6 +371,17 @@ dn: cn=Connection 5,cn=server 2,cn=first,cn=Backend Tiers,cn=Load Balancer,cn=
Backends,cn=Monitor
objectClass: olmBalancerConnection
olmConnectionType: regular
olmConnectionState: ready
olmPendingOps: 0
olmReceivedOps: 1
olmCompletedOps: 1
olmFailedOps: 0
dn: cn=Connection 6,cn=server 2,cn=first,cn=Backend Tiers,cn=Load Balancer,cn=
Backends,cn=Monitor
objectClass: olmBalancerConnection
olmConnectionType: bind
olmConnectionState: ready
olmPendingOps: 0
olmReceivedOps: 1
olmCompletedOps: 1
@ -359,6 +391,7 @@ dn: cn=Connection 7,cn=server 2,cn=first,cn=Backend Tiers,cn=Load Balancer,cn=
Backends,cn=Monitor
objectClass: olmBalancerConnection
olmConnectionType: regular
olmConnectionState: ready
olmPendingOps: 0
olmReceivedOps: 5
olmCompletedOps: 5
@ -368,6 +401,7 @@ dn: cn=Connection 8,cn=server 2,cn=first,cn=Backend Tiers,cn=Load Balancer,cn=
Backends,cn=Monitor
objectClass: olmBalancerConnection
olmConnectionType: regular
olmConnectionState: ready
olmPendingOps: 0
olmReceivedOps: 0
olmCompletedOps: 0
@ -377,24 +411,17 @@ dn: cn=Connection 9,cn=server 2,cn=first,cn=Backend Tiers,cn=Load Balancer,cn=
Backends,cn=Monitor
objectClass: olmBalancerConnection
olmConnectionType: regular
olmConnectionState: ready
olmPendingOps: 0
olmReceivedOps: 0
olmCompletedOps: 0
olmFailedOps: 0
dn: cn=Connection 6,cn=server 2,cn=first,cn=Backend Tiers,cn=Load Balancer,cn=
Backends,cn=Monitor
objectClass: olmBalancerConnection
olmConnectionType: bind
olmPendingOps: 0
olmReceivedOps: 1
olmCompletedOps: 1
olmFailedOps: 0
dn: cn=Connection 10,cn=server 2,cn=first,cn=Backend Tiers,cn=Load Balancer,cn
=Backends,cn=Monitor
objectClass: olmBalancerConnection
olmConnectionType: bind
olmConnectionState: ready
olmPendingOps: 0
olmReceivedOps: 1
olmCompletedOps: 1
@ -404,6 +431,7 @@ dn: cn=Connection 11,cn=server 2,cn=first,cn=Backend Tiers,cn=Load Balancer,cn
=Backends,cn=Monitor
objectClass: olmBalancerConnection
olmConnectionType: bind
olmConnectionState: ready
olmPendingOps: 0
olmReceivedOps: 1
olmCompletedOps: 1
@ -413,6 +441,7 @@ dn: cn=Connection 12,cn=server 2,cn=first,cn=Backend Tiers,cn=Load Balancer,cn
=Backends,cn=Monitor
objectClass: olmBalancerConnection
olmConnectionType: bind
olmConnectionState: ready
olmPendingOps: 0
olmReceivedOps: 0
olmCompletedOps: 0
@ -422,6 +451,7 @@ dn: cn=Connection 13,cn=server 2,cn=first,cn=Backend Tiers,cn=Load Balancer,cn
=Backends,cn=Monitor
objectClass: olmBalancerConnection
olmConnectionType: bind
olmConnectionState: ready
olmPendingOps: 0
olmReceivedOps: 0
olmCompletedOps: 0

View File

@ -343,9 +343,9 @@ test $KILLSERVERS != no && kill -HUP $KILLPIDS
LDIF=$DATADIR/lloadd/monitor.ldif
echo "Filtering ldapsearch results..."
$LDIFFILTER < $SEARCHOUT > $SEARCHFLT
$LDIFFILTER -s e < $SEARCHOUT > $SEARCHFLT
echo "Filtering original ldif used to create database..."
$LDIFFILTER < $LDIF > $LDIFFLT
$LDIFFILTER -s e < $LDIF > $LDIFFLT
echo "Comparing filter output..."
$CMP $SEARCHFLT $LDIFFLT > $CMPOUT