Added statistics to backend references.

This commit is contained in:
Markus Makela
2015-03-06 17:41:39 +02:00
parent 282f66f9fd
commit 6766c0b883
2 changed files with 18 additions and 59 deletions

View File

@ -196,6 +196,9 @@ typedef struct backend_st {
* load. Expressed in .1% * load. Expressed in .1%
* increments * increments
*/ */
struct stats{
int queries;
} stats;
#if defined(SS_DEBUG) #if defined(SS_DEBUG)
skygw_chk_t be_chk_tail; skygw_chk_t be_chk_tail;
#endif #endif

View File

@ -2049,12 +2049,14 @@ static int routeQuery(
backend_ref_t* bref; backend_ref_t* bref;
atomic_add(&inst->stats.n_queries, 1); atomic_add(&inst->stats.n_queries, 1);
/** /**
* Add one query response waiter to backend reference * Add one query response waiter to backend reference
*/ */
bref = get_bref_from_dcb(router_cli_ses, target_dcb); bref = get_bref_from_dcb(router_cli_ses, target_dcb);
bref_set_state(bref, BREF_QUERY_ACTIVE); bref_set_state(bref, BREF_QUERY_ACTIVE);
bref_set_state(bref, BREF_WAITING_RESULT); bref_set_state(bref, BREF_WAITING_RESULT);
atomic_add(&bref->bref_backend->stats.queries, 1);
} }
else else
{ {
@ -2143,66 +2145,20 @@ static void rses_end_locked_router_action(
static void static void
diagnostic(ROUTER *instance, DCB *dcb) diagnostic(ROUTER *instance, DCB *dcb)
{ {
ROUTER_CLIENT_SES *router_cli_ses; ROUTER_INSTANCE *router = (ROUTER_INSTANCE *)instance;
ROUTER_INSTANCE *router = (ROUTER_INSTANCE *)instance; int i = 0;
int i = 0;
BACKEND *backend;
char *weightby;
spinlock_acquire(&router->lock);
router_cli_ses = router->connections;
while (router_cli_ses)
{
i++;
router_cli_ses = router_cli_ses->next;
}
spinlock_release(&router->lock);
dcb_printf(dcb,"|%-32s-%-32s|","",""); dcb_printf(dcb,"\33[1;4m%-16s%-16s%-16s\33[0m\n","Server","Queries","State");
dcb_printf(dcb,"|%-32s|%-32s|","Server","Queries"); for(i=0;router->servers[i];i++)
dcb_printf(dcb,"|%-32s-%-32s|","",""); {
dcb_printf(dcb,"%-16s%-16d%-16s\n",
dcb_printf(dcb, router->servers[i]->backend_server->unique_name,
"\tNumber of router sessions: %d\n", router->servers[i]->stats.queries,
router->stats.n_sessions); SERVER_IS_RUNNING(router->servers[i]->backend_server) ?
dcb_printf(dcb, "\33[30;42mRUNNING\33[0m":
"\tCurrent no. of router sessions: %d\n", "\33[30;41mDOWN\33[0m");
i); }
dcb_printf(dcb,
"\tNumber of queries forwarded: %d\n",
router->stats.n_queries);
dcb_printf(dcb,
"\tNumber of queries forwarded to master: %d\n",
router->stats.n_master);
dcb_printf(dcb,
"\tNumber of queries forwarded to slave: %d\n",
router->stats.n_slave);
dcb_printf(dcb,
"\tNumber of queries forwarded to all: %d\n",
router->stats.n_all);
if ((weightby = serviceGetWeightingParameter(router->service)) != NULL)
{
dcb_printf(dcb,
"\tConnection distribution based on %s "
"server parameter.\n", weightby);
dcb_printf(dcb,
"\t\tServer Target %% Connections "
"Operations\n");
dcb_printf(dcb,
"\t\t Global Router\n");
for (i = 0; router->servers[i]; i++)
{
backend = router->servers[i];
dcb_printf(dcb,
"\t\t%-20s %3.1f%% %-6d %-6d %d\n",
backend->backend_server->unique_name,
(float)backend->weight / 10,
backend->backend_server->stats.n_current,
backend->backend_conn_count,
backend->backend_server->stats.n_current_ops);
}
}
} }
@ -3587,7 +3543,7 @@ static bool route_session_write(
if (BREF_IS_IN_USE((&backend_ref[i]))) if (BREF_IS_IN_USE((&backend_ref[i])))
{ {
rc = dcb->func.write(dcb, gwbuf_clone(querybuf)); rc = dcb->func.write(dcb, gwbuf_clone(querybuf));
atomic_add(&backend_ref[i].bref_backend->stats.queries,1);
if (rc != 1) if (rc != 1)
{ {
succp = false; succp = false;