]> git.ipfire.org Git - thirdparty/openldap.git/commitdiff
ITS#9600 Rework monitor entry management
authorOndřej Kuzník <okuznik@symas.com>
Thu, 22 Apr 2021 12:30:32 +0000 (13:30 +0100)
committerOndřej Kuzník <okuznik@symas.com>
Fri, 13 Aug 2021 09:57:14 +0000 (10:57 +0100)
Connection entries are now persistent and can be addressed, preparing
the ground so we can process modify operations on individual entries.

servers/lloadd/client.c
servers/lloadd/lload.h
servers/lloadd/monitor.c
servers/lloadd/proto-lload.h
servers/lloadd/upstream.c
tests/data/lloadd/monitor.ldif
tests/data/lloadd/test007-monitor.ldif
tests/scripts/lloadd/test004-monitor

index c00968d8230fb775d9936546bf15db104cf206ec..0b6515d5bf1d7e39260f1083dadb1df00bc51e7c 100644 (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 );
index 85b4d6761f08fedeffdf2cd7d0ee522acd9fbad8..6aa877bc6c8a90791f78158064f40bd3fc686853 100644 (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;
index f4acc9d4610e164d7a895b32f9041071177955a4..a7304f1917f8d89ada546c02d03b309fd3c14b67 100644 (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 )
-{
-    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;
-
-    bv.bv_val = buf;
-    bv.bv_len = snprintf(
-            bv.bv_val, SLAP_TEXT_BUFLEN, "cn=Connection %lu", conn->c_connid );
-
-    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 )
+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_rdn,
-        bv_type = BER_BVNULL,
-        bv_pending = BER_BVNULL,
-        bv_received = BER_BVNULL,
-        bv_completed = BER_BVNULL,
-        bv_failed = BER_BVNULL;
+    Attribute *a;
+    LloadConnection *c = priv;
+    struct berval bv_type, bv_state;
+    ldap_pvt_mp_t active, pending, received, completed, failed;
 
-    bv_rdn.bv_val = buf;
-    bv_rdn.bv_len = snprintf(
-            bv_rdn.bv_val, SLAP_TEXT_BUFLEN, "cn=Connection %lu", c->c_connid );
+    CONNECTION_LOCK(c);
 
-    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;
+    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;
+    }
+
+    CONNECTION_UNLOCK(c);
+
+    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;
+
+    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;
 }
 
-static int
-lload_monitor_up_conn_create(
-        Operation *op,
-        SlapReply *rs,
-        struct berval *ndn,
-        Entry *e_parent,
-        Entry **ep )
+int
+lload_monitor_conn_entry_create( LloadConnection *c, monitor_subsys_t *ms )
 {
-    monitor_entry_t *mp_parent;
-    monitor_subsys_t *ms;
-    LloadBackend *b;
-    struct lload_monitor_conn_arg arg = {
-            .op = op,
-            .ep = ep,
-    };
+    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( e_parent->e_private != NULL );
+    assert( mbe && mbe->is_configured() );
 
-    mp_parent = e_parent->e_private;
-    ms = (monitor_subsys_t *)mp_parent->mp_info;
-    b = ms->mss_private;
+    CONNECTION_ASSERT_LOCKED(c);
+    assert( BER_BVISNULL( &c->c_monitor_dn ) );
 
-    if ( !b ) {
-        return -1;
-    }
+    bv_rdn.bv_val = buf;
+    bv_rdn.bv_len = snprintf(
+            bv_rdn.bv_val, SLAP_TEXT_BUFLEN, "cn=Connection %lu", c->c_connid );
 
-    arg.ms = ms;
+    ldap_pvt_gmtime( &c->c_activitytime, &tm );
+    bv_timestamp.bv_len = lutil_gentime( timebuf, sizeof(timebuf), &tm );
+    bv_timestamp.bv_val = timebuf;
 
-    checked_lock( &b->b_mutex );
-    connections_walk_last( &b->b_mutex, &b->b_conns, b->b_last_conn,
-            lload_monitor_up_conn_entry, &arg );
+    e = mbe->entry_stub( &ms->mss_dn, &ms->mss_ndn, &bv_rdn,
+            oc_olmBalancerConnection, &bv_timestamp, &bv_timestamp );
 
-    connections_walk_last( &b->b_mutex, &b->b_bindconns, b->b_last_bindconn,
-            lload_monitor_up_conn_entry, &arg );
-    checked_unlock( &b->b_mutex );
+    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;
 }
 
-int
+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 */
index 8cccacb20c13800b3e9dd388a9acfef9ee3149e1..d20e73056ad30c60250f7e5b74fe9cd7d62e5620 100644 (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 */
index 29093c2bfed62cf18fc86dd6cf37f6575feb2bd9..e0329003fc79577385b8b07e74120b867c4f24e9 100644 (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 );
index dc18f771d43e9c6481745905f0cbb888b1121366..9650285df85114822edd82ee27a72de77502276c 100644 (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
index 3fb2363383770f2179e0a8321f87c967a57fd436..aff5697a1969c8823bb0f433e2f0bd1769d62169 100644 (file)
@@ -47,24 +47,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: 0
 olmCompletedOps: 0
 olmFailedOps: 0
 
-dn: cn=Connection 3,cn=backend,cn=first,cn=Backend Tiers,cn=Load Balancer,cn=B
+dn: cn=Connection 2,cn=backend,cn=first,cn=Backend Tiers,cn=Load Balancer,cn=B
  ackends,cn=Monitor
 objectClass: olmBalancerConnection
-olmConnectionType: regular
+olmConnectionType: bind
+olmConnectionState: ready
 olmPendingOps: 0
 olmReceivedOps: 0
 olmCompletedOps: 0
 olmFailedOps: 0
 
-dn: cn=Connection 2,cn=backend,cn=first,cn=Backend Tiers,cn=Load Balancer,cn=B
+dn: cn=Connection 3,cn=backend,cn=first,cn=Backend Tiers,cn=Load Balancer,cn=B
  ackends,cn=Monitor
 objectClass: olmBalancerConnection
-olmConnectionType: bind
+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
+dn: cn=Connection 2,cn=backend,cn=first,cn=Backend Tiers,cn=Load Balancer,cn=B
  ackends,cn=Monitor
 objectClass: olmBalancerConnection
-olmConnectionType: regular
+olmConnectionType: bind
+olmConnectionState: ready
 olmPendingOps: 0
 olmReceivedOps: 1
 olmCompletedOps: 1
 olmFailedOps: 0
 
-dn: cn=Connection 2,cn=backend,cn=first,cn=Backend Tiers,cn=Load Balancer,cn=B
+dn: cn=Connection 3,cn=backend,cn=first,cn=Backend Tiers,cn=Load Balancer,cn=B
  ackends,cn=Monitor
 objectClass: olmBalancerConnection
-olmConnectionType: bind
+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,15 +184,27 @@ 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: 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
+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
@@ -194,6 +214,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
@@ -203,24 +224,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
@@ -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
+dn: cn=Connection 2,cn=backend,cn=first,cn=Backend Tiers,cn=Load Balancer,cn=B
  ackends,cn=Monitor
 objectClass: olmBalancerConnection
-olmConnectionType: regular
+olmConnectionType: bind
+olmConnectionState: ready
 olmPendingOps: 0
-olmReceivedOps: 2
-olmCompletedOps: 2
+olmReceivedOps: 1
+olmCompletedOps: 1
 olmFailedOps: 0
 
-dn: cn=Connection 2,cn=backend,cn=first,cn=Backend Tiers,cn=Load Balancer,cn=B
+dn: cn=Connection 3,cn=backend,cn=first,cn=Backend Tiers,cn=Load Balancer,cn=B
  ackends,cn=Monitor
 objectClass: olmBalancerConnection
-olmConnectionType: bind
+olmConnectionType: regular
+olmConnectionState: ready
 olmPendingOps: 0
-olmReceivedOps: 1
-olmCompletedOps: 1
+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
index 3f2b35fb9070e3fb7a4ff131943870d53cbeda73..bc6d33ad954eda2ba22adcd3942139b910ece75c 100755 (executable)
@@ -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