From b1c657c2eb9532bde85183fe329635463c0817a3 Mon Sep 17 00:00:00 2001 From: Martin Brampton Date: Fri, 19 Jun 2015 20:48:42 +0100 Subject: [PATCH] Add another debug output; fix bug; clarify variable names. --- server/core/dcb.c | 7 +- server/core/server.c | 155 +++++++++++++++++++++++------------------- server/core/service.c | 86 +++++++++++------------ 3 files changed, 133 insertions(+), 115 deletions(-) diff --git a/server/core/dcb.c b/server/core/dcb.c index b10b7f04b..766044604 100644 --- a/server/core/dcb.c +++ b/server/core/dcb.c @@ -1387,7 +1387,7 @@ dcb_close_finish(DCB *dcb) if (dcb->server) { if (dcb->server->persistent) CHK_DCB(dcb->server->persistent); - atomic_add(&dcb->server->stats.n_current, -1); + if (0 == dcb->persistentstart) atomic_add(&dcb->server->stats.n_current, -1); } /** Call possible callback for this DCB in case of close */ dcb_call_callback(dcb, DCB_REASON_CLOSE); @@ -2358,7 +2358,10 @@ dcb_persistent_clean_count(DCB *dcb, bool cleanall) while (persistentdcb) { CHK_DCB(persistentdcb); nextdcb = persistentdcb->nextpersistent; - if (cleanall || count >= server->persistpoolmax || time(NULL) - persistentdcb->persistentstart > server->persistmaxtime) + if (cleanall + || persistentdcb-> dcb_errhandle_called + || count >= server->persistpoolmax + || time(NULL) - persistentdcb->persistentstart > server->persistmaxtime) { if (previousdcb) { previousdcb->nextpersistent = nextdcb; diff --git a/server/core/server.c b/server/core/server.c index a9577252a..743a0cc75 100644 --- a/server/core/server.c +++ b/server/core/server.c @@ -102,38 +102,38 @@ SERVER *server; * @return Returns true if the server was freed */ int -server_free(SERVER *server) +server_free(SERVER *tofreeserver) { -SERVER *ptr; +SERVER *server; /* First of all remove from the linked list */ spinlock_acquire(&server_spin); - if (allServers == server) + if (allServers == tofreeserver) { - allServers = server->next; + allServers = tofreeserver->next; } else { - ptr = allServers; - while (ptr && ptr->next != server) + server = allServers; + while (server && server->next != tofreeserver) { - ptr = ptr->next; + server = server->next; } - if (ptr) - ptr->next = server->next; + if (server) + server->next = tofreeserver->next; } spinlock_release(&server_spin); /* Clean up session and free the memory */ - free(server->name); - free(server->protocol); - if (server->unique_name) - free(server->unique_name); - if (server->server_string) - free(server->server_string); - if (server->persistent) - dcb_persistent_clean_count(server->persistent, true); - free(server); + free(tofreeserver->name); + free(tofreeserver->protocol); + if (tofreeserver->unique_name) + free(tofreeserver->unique_name); + if (tofreeserver->server_string) + free(tofreeserver->server_string); + if (tofreeserver->persistent) + dcb_persistent_clean_count(tofreeserver->persistent, true); + free(tofreeserver); return 1; } @@ -170,6 +170,21 @@ server_get_persistent(SERVER *server, char *user, const char *protocol) atomic_add(&server->stats.n_current, 1); return dcb; } + else + { + LOGIF(LD, (skygw_log_write_flush( + LOGFILE_DEBUG, + "%lu [server_get_persistent] Rejected dcb " + "%p from pool, user %s looking for %s, protocol %s " + "looking for %s, error handle called %s.", + pthread_self(), + dcb, + dcb->user ? dcb->user : "NULL", + user, + dcb->protoname ? dcb->protoname : "NULL", + protocol, + dcb-> dcb_errhandle_called ? "true" : "false"))); + } previous = dcb; dcb = dcb->nextpersistent; } @@ -265,14 +280,14 @@ printServer(SERVER *server) void printAllServers() { -SERVER *ptr; +SERVER *server; spinlock_acquire(&server_spin); - ptr = allServers; - while (ptr) + server = allServers; + while (server) { - printServer(ptr); - ptr = ptr->next; + printServer(server); + server = server->next; } spinlock_release(&server_spin); } @@ -364,74 +379,74 @@ char *stat; void dprintAllServersJson(DCB *dcb) { -SERVER *ptr; +SERVER *server; char *stat; int len = 0; int el = 1; spinlock_acquire(&server_spin); - ptr = allServers; - while (ptr) + server = allServers; + while (server) { - ptr = ptr->next; + server = server->next; len++; } - ptr = allServers; + server = allServers; dcb_printf(dcb, "[\n"); - while (ptr) + while (server) { dcb_printf(dcb, " {\n \"server\": \"%s\",\n", - ptr->name); - stat = server_status(ptr); + server->name); + stat = server_status(server); dcb_printf(dcb, " \"status\": \"%s\",\n", stat); free(stat); dcb_printf(dcb, " \"protocol\": \"%s\",\n", - ptr->protocol); + server->protocol); dcb_printf(dcb, " \"port\": \"%d\",\n", - ptr->port); - if (ptr->server_string) + server->port); + if (server->server_string) dcb_printf(dcb, " \"version\": \"%s\",\n", - ptr->server_string); + server->server_string); dcb_printf(dcb, " \"nodeId\": \"%d\",\n", - ptr->node_id); + server->node_id); dcb_printf(dcb, " \"masterId\": \"%d\",\n", - ptr->master_id); - if (ptr->slaves) { + server->master_id); + if (server->slaves) { int i; dcb_printf(dcb, " \"slaveIds\": [ "); - for (i = 0; ptr->slaves[i]; i++) + for (i = 0; server->slaves[i]; i++) { if (i == 0) - dcb_printf(dcb, "%li", ptr->slaves[i]); + dcb_printf(dcb, "%li", server->slaves[i]); else - dcb_printf(dcb, ", %li ", ptr->slaves[i]); + dcb_printf(dcb, ", %li ", server->slaves[i]); } dcb_printf(dcb, "],\n"); } dcb_printf(dcb, " \"replDepth\": \"%d\",\n", - ptr->depth); - if (SERVER_IS_SLAVE(ptr) || SERVER_IS_RELAY_SERVER(ptr)) { - if (ptr->rlag >= 0) { - dcb_printf(dcb, " \"slaveDelay\": \"%d\",\n", ptr->rlag); + server->depth); + if (SERVER_IS_SLAVE(server) || SERVER_IS_RELAY_SERVER(server)) { + if (server->rlag >= 0) { + dcb_printf(dcb, " \"slaveDelay\": \"%d\",\n", server->rlag); } } - if (ptr->node_ts > 0) { - dcb_printf(dcb, " \"lastReplHeartbeat\": \"%lu\",\n", ptr->node_ts); + if (server->node_ts > 0) { + dcb_printf(dcb, " \"lastReplHeartbeat\": \"%lu\",\n", server->node_ts); } dcb_printf(dcb, " \"totalConnections\": \"%d\",\n", - ptr->stats.n_connections); + server->stats.n_connections); dcb_printf(dcb, " \"currentConnections\": \"%d\",\n", - ptr->stats.n_current); + server->stats.n_current); dcb_printf(dcb, " \"currentOps\": \"%d\"\n", - ptr->stats.n_current_ops); + server->stats.n_current_ops); if (el < len) { dcb_printf(dcb, " },\n"); } else { dcb_printf(dcb, " }\n"); } - ptr = ptr->next; + server = server->next; el++; } dcb_printf(dcb, "]\n"); @@ -546,12 +561,12 @@ DCB *dcb; void dListServers(DCB *dcb) { -SERVER *ptr; +SERVER *server; char *stat; spinlock_acquire(&server_spin); - ptr = allServers; - if (ptr) + server = allServers; + if (server) { dcb_printf(dcb, "Servers.\n"); dcb_printf(dcb, "-------------------+-----------------+-------+-------------+--------------------\n"); @@ -559,15 +574,15 @@ char *stat; "Server", "Address", "Status"); dcb_printf(dcb, "-------------------+-----------------+-------+-------------+--------------------\n"); } - while (ptr) + while (server) { - stat = server_status(ptr); + stat = server_status(server); dcb_printf(dcb, "%-18s | %-15s | %5d | %11d | %s\n", - ptr->unique_name, ptr->name, - ptr->port, - ptr->stats.n_current, stat); + server->unique_name, server->name, + server->port, + server->stats.n_current, stat); free(stat); - ptr = ptr->next; + server = server->next; } if (allServers) dcb_printf(dcb, "-------------------+-----------------+-------+-------------+--------------------\n"); @@ -772,16 +787,16 @@ int *rowno = (int *)data; int i = 0;; char *stat, buf[20]; RESULT_ROW *row; -SERVER *ptr; +SERVER *server; spinlock_acquire(&server_spin); - ptr = allServers; - while (i < *rowno && ptr) + server = allServers; + while (i < *rowno && server) { i++; - ptr = ptr->next; + server = server->next; } - if (ptr == NULL) + if (server == NULL) { spinlock_release(&server_spin); free(data); @@ -789,13 +804,13 @@ SERVER *ptr; } (*rowno)++; row = resultset_make_row(set); - resultset_row_set(row, 0, ptr->unique_name); - resultset_row_set(row, 1, ptr->name); - sprintf(buf, "%d", ptr->port); + resultset_row_set(row, 0, server->unique_name); + resultset_row_set(row, 1, server->name); + sprintf(buf, "%d", server->port); resultset_row_set(row, 2, buf); - sprintf(buf, "%d", ptr->stats.n_current); + sprintf(buf, "%d", server->stats.n_current); resultset_row_set(row, 3, buf); - stat = server_status(ptr); + stat = server_status(server); resultset_row_set(row, 4, stat); free(stat); spinlock_release(&server_spin); diff --git a/server/core/service.c b/server/core/service.c index 4584ded24..c7b669c4f 100644 --- a/server/core/service.c +++ b/server/core/service.c @@ -163,19 +163,19 @@ SERVICE *service; int service_isvalid(SERVICE *service) { -SERVICE *ptr; +SERVICE *checkservice; int rval = 0; spinlock_acquire(&service_spin); - ptr = allServices; - while (ptr) + checkservice = allServices; + while (checkservice) { - if (ptr == service) + if (checkservice == service) { rval = 1; break; } - ptr = ptr->next; + checkservice = checkservice->next; } spinlock_release(&service_spin); return rval; @@ -1142,11 +1142,11 @@ int i; void dListServices(DCB *dcb) { -SERVICE *ptr; +SERVICE *service; spinlock_acquire(&service_spin); - ptr = allServices; - if (ptr) + service = allServices; + if (service) { dcb_printf(dcb, "Services.\n"); dcb_printf(dcb, "--------------------------+----------------------+--------+---------------\n"); @@ -1154,13 +1154,13 @@ SERVICE *ptr; "Service Name", "Router Module"); dcb_printf(dcb, "--------------------------+----------------------+--------+---------------\n"); } - while (ptr) + while (service) { - ss_dassert(ptr->stats.n_current >= 0); + ss_dassert(service->stats.n_current >= 0); dcb_printf(dcb, "%-25s | %-20s | %6d | %5d\n", - ptr->name, ptr->routerModule, - ptr->stats.n_current, ptr->stats.n_sessions); - ptr = ptr->next; + service->name, service->routerModule, + service->stats.n_current, service->stats.n_sessions); + service = service->next; } if (allServices) dcb_printf(dcb, "--------------------------+----------------------+--------+---------------\n\n"); @@ -1175,12 +1175,12 @@ SERVICE *ptr; void dListListeners(DCB *dcb) { -SERVICE *ptr; +SERVICE *service; SERV_PROTOCOL *lptr; spinlock_acquire(&service_spin); - ptr = allServices; - if (ptr) + service = allServices; + if (service) { dcb_printf(dcb, "Listeners.\n"); dcb_printf(dcb, "---------------------+--------------------+-----------------+-------+--------\n"); @@ -1188,13 +1188,13 @@ SERV_PROTOCOL *lptr; "Service Name", "Protocol Module", "Address"); dcb_printf(dcb, "---------------------+--------------------+-----------------+-------+--------\n"); } - while (ptr) + while (service) { - lptr = ptr->ports; + lptr = service->ports; while (lptr) { dcb_printf(dcb, "%-20s | %-18s | %-15s | %5d | %s\n", - ptr->name, lptr->protocol, + service->name, lptr->protocol, (lptr && lptr->address) ? lptr->address : "*", lptr->port, (!lptr->listener || @@ -1205,7 +1205,7 @@ SERV_PROTOCOL *lptr; lptr = lptr->next; } - ptr = ptr->next; + service = service->next; } if (allServices) dcb_printf(dcb, "---------------------+--------------------+-----------------+-------+--------\n\n"); @@ -1613,15 +1613,15 @@ void service_shutdown() int serviceSessionCountAll() { -SERVICE *ptr; +SERVICE *service; int rval = 0; spinlock_acquire(&service_spin); - ptr = allServices; - while (ptr) + service = allServices; + while (service) { - rval += ptr->stats.n_current; - ptr = ptr->next; + rval += service->stats.n_current; + service = service->next; } spinlock_release(&service_spin); return rval; @@ -1642,16 +1642,16 @@ int *rowno = (int *)data; int i = 0;; char buf[20]; RESULT_ROW *row; -SERVICE *ptr; +SERVICE *service; SERV_PROTOCOL *lptr = NULL; spinlock_acquire(&service_spin); - ptr = allServices; - if (ptr) - lptr = ptr->ports; - while (i < *rowno && ptr) + service = allServices; + if (service) + lptr = service->ports; + while (i < *rowno && service) { - lptr = ptr->ports; + lptr = service->ports; while (i < *rowno && lptr) { if ((lptr = lptr->next) != NULL) @@ -1659,8 +1659,8 @@ SERV_PROTOCOL *lptr = NULL; } if (i < *rowno) { - ptr = ptr->next; - if (ptr && (lptr = ptr->ports) != NULL) + service = service->next; + if (service && (lptr = service->ports) != NULL) i++; } } @@ -1672,7 +1672,7 @@ SERV_PROTOCOL *lptr = NULL; } (*rowno)++; row = resultset_make_row(set); - resultset_row_set(row, 0, ptr->name); + resultset_row_set(row, 0, service->name); resultset_row_set(row, 1, lptr->protocol); resultset_row_set(row, 2, (lptr && lptr->address) ? lptr->address : "*"); sprintf(buf, "%d", lptr->port); @@ -1727,16 +1727,16 @@ int *rowno = (int *)data; int i = 0;; char buf[20]; RESULT_ROW *row; -SERVICE *ptr; +SERVICE *service; spinlock_acquire(&service_spin); - ptr = allServices; - while (i < *rowno && ptr) + service = allServices; + while (i < *rowno && service) { i++; - ptr = ptr->next; + service = service->next; } - if (ptr == NULL) + if (service == NULL) { spinlock_release(&service_spin); free(data); @@ -1744,11 +1744,11 @@ SERVICE *ptr; } (*rowno)++; row = resultset_make_row(set); - resultset_row_set(row, 0, ptr->name); - resultset_row_set(row, 1, ptr->routerModule); - sprintf(buf, "%d", ptr->stats.n_current); + resultset_row_set(row, 0, service->name); + resultset_row_set(row, 1, service->routerModule); + sprintf(buf, "%d", service->stats.n_current); resultset_row_set(row, 2, buf); - sprintf(buf, "%d", ptr->stats.n_sessions); + sprintf(buf, "%d", service->stats.n_sessions); resultset_row_set(row, 3, buf); spinlock_release(&service_spin); return row;