pespin has submitted this change. ( https://gerrit.osmocom.org/c/osmo-mgw/+/33313 )
Change subject: mgcp_client: pool: Only pick clients with an MGCP link considered to be UP ......................................................................
mgcp_client: pool: Only pick clients with an MGCP link considered to be UP
This way the user ends up picking a working MGW instance instead of one which is not reachable around the time.
Related: SYS#6481 Change-Id: Ia3f451d3cd97851f65074408812b1ddc68f67056 --- M src/libosmo-mgcp-client/mgcp_client_pool.c 1 file changed, 18 insertions(+), 4 deletions(-)
Approvals: osmith: Looks good to me, but someone else must approve Jenkins Builder: Verified laforge: Looks good to me, approved
diff --git a/src/libosmo-mgcp-client/mgcp_client_pool.c b/src/libosmo-mgcp-client/mgcp_client_pool.c index 4156664..61fb134 100644 --- a/src/libosmo-mgcp-client/mgcp_client_pool.c +++ b/src/libosmo-mgcp-client/mgcp_client_pool.c @@ -94,7 +94,7 @@ }
/* Not every pool member may have a functional MGCP client, we will run through the pool once until we meet a - * pool member that is suitable (has a client, is not blocked, has a low load). */ + * pool member that is suitable (is not blocked, has a client with a working link, has a low load). */ static struct mgcp_client_pool_member *mgcp_client_pool_pick(struct mgcp_client_pool *pool) { struct mgcp_client_pool_member *pool_member; @@ -103,14 +103,15 @@
llist_for_each_entry(pool_member, &pool->member_list, list) { n_pool_members++; - if (pool_member->blocked == false && pool_member->client) { + bool conn_up = pool_member->client && pool_member->client->conn_up; + if (pool_member->blocked == false && conn_up) { if (!pool_member_picked) pool_member_picked = pool_member; else if (pool_member_picked->refcount > pool_member->refcount) pool_member_picked = pool_member; } else { - LOGPPMGW(pool_member, LOGL_DEBUG, "%s -- MGW %u is unusable (blocked=%u, cli=%u)\n", - __func__, pool_member->nr, pool_member->blocked, !!pool_member->client); + LOGPPMGW(pool_member, LOGL_DEBUG, "%s -- MGW %u is unusable (blocked=%u, cli=%u, link=%u)\n", + __func__, pool_member->nr, pool_member->blocked, !!pool_member->client, conn_up); } }