Only print servers that aren't destroyed

If a server were to be destroyed, it should not show up among
non-destroyed servers. Even though the servers aren't actually destroyed,
it hides unnecessary information from the user.
This commit is contained in:
Markus Makela
2016-11-10 13:45:25 +02:00
parent 7499630614
commit f0082256f5
2 changed files with 55 additions and 21 deletions

View File

@ -115,6 +115,7 @@ typedef struct server
long persistpoolmax; /**< Maximum size of persistent connections pool */ long persistpoolmax; /**< Maximum size of persistent connections pool */
long persistmaxtime; /**< Maximum number of seconds connection can live */ long persistmaxtime; /**< Maximum number of seconds connection can live */
int persistmax; /**< Maximum pool size actually achieved since startup */ int persistmax; /**< Maximum pool size actually achieved since startup */
bool is_active; /**< Server is active and has not been "destroyed" */
#if defined(SS_DEBUG) #if defined(SS_DEBUG)
skygw_chk_t server_chk_tail; skygw_chk_t server_chk_tail;
#endif #endif

View File

@ -133,6 +133,7 @@ server_alloc(char *servname, char *protocol, unsigned short port, char *authenti
server->persistpoolmax = 0; server->persistpoolmax = 0;
server->monuser[0] = '\0'; server->monuser[0] = '\0';
server->monpw[0] = '\0'; server->monpw[0] = '\0';
server->is_active = true;
spinlock_init(&server->persistlock); spinlock_init(&server->persistlock);
spinlock_acquire(&server_spin); spinlock_acquire(&server_spin);
@ -283,7 +284,7 @@ server_find_by_unique_name(char *name)
server = allServers; server = allServers;
while (server) while (server)
{ {
if (server->unique_name && strcmp(server->unique_name, name) == 0) if (server->is_active && server->unique_name && strcmp(server->unique_name, name) == 0)
{ {
break; break;
} }
@ -309,7 +310,7 @@ server_find(char *servname, unsigned short port)
server = allServers; server = allServers;
while (server) while (server)
{ {
if (strcmp(server->name, servname) == 0 && server->port == port) if (server->is_active && strcmp(server->name, servname) == 0 && server->port == port)
{ {
break; break;
} }
@ -352,7 +353,10 @@ printAllServers()
server = allServers; server = allServers;
while (server) while (server)
{ {
printServer(server); if (server->is_active)
{
printServer(server);
}
server = server->next; server = server->next;
} }
spinlock_release(&server_spin); spinlock_release(&server_spin);
@ -373,7 +377,10 @@ dprintAllServers(DCB *dcb)
server = allServers; server = allServers;
while (server) while (server)
{ {
dprintServer(dcb, server); if (server->is_active)
{
dprintServer(dcb, server);
}
server = server->next; server = server->next;
} }
spinlock_release(&server_spin); spinlock_release(&server_spin);
@ -404,6 +411,11 @@ dprintAllServersJson(DCB *dcb)
dcb_printf(dcb, "[\n"); dcb_printf(dcb, "[\n");
while (server) while (server)
{ {
if (!server->is_active)
{
server = server->next;
continue;
}
dcb_printf(dcb, " {\n \"server\": \"%s\",\n", dcb_printf(dcb, " {\n \"server\": \"%s\",\n",
server->name); server->name);
stat = server_status(server); stat = server_status(server);
@ -484,6 +496,11 @@ dprintAllServersJson(DCB *dcb)
void void
dprintServer(DCB *dcb, SERVER *server) dprintServer(DCB *dcb, SERVER *server)
{ {
if (!server->is_active)
{
return;
}
dcb_printf(dcb, "Server %p (%s)\n", server, server->unique_name); dcb_printf(dcb, "Server %p (%s)\n", server, server->unique_name);
dcb_printf(dcb, "\tServer: %s\n", server->name); dcb_printf(dcb, "\tServer: %s\n", server->name);
char* stat = server_status(server); char* stat = server_status(server);
@ -618,25 +635,38 @@ dListServers(DCB *dcb)
spinlock_acquire(&server_spin); spinlock_acquire(&server_spin);
server = allServers; server = allServers;
while (server && !server->is_active)
{
server = server->next;
}
bool have_servers = false;
if (server) if (server)
{ {
have_servers = true;
dcb_printf(dcb, "Servers.\n"); dcb_printf(dcb, "Servers.\n");
dcb_printf(dcb, "-------------------+-----------------+-------+-------------+--------------------\n"); dcb_printf(dcb, "-------------------+-----------------+-------+-------------+--------------------\n");
dcb_printf(dcb, "%-18s | %-15s | Port | Connections | %-20s\n", dcb_printf(dcb, "%-18s | %-15s | Port | Connections | %-20s\n",
"Server", "Address", "Status"); "Server", "Address", "Status");
dcb_printf(dcb, "-------------------+-----------------+-------+-------------+--------------------\n"); dcb_printf(dcb, "-------------------+-----------------+-------+-------------+--------------------\n");
} }
while (server) while (server)
{ {
stat = server_status(server); if (server->is_active)
dcb_printf(dcb, "%-18s | %-15s | %5d | %11d | %s\n", {
server->unique_name, server->name, stat = server_status(server);
server->port, dcb_printf(dcb, "%-18s | %-15s | %5d | %11d | %s\n",
server->stats.n_current, stat); server->unique_name, server->name,
MXS_FREE(stat); server->port,
server->stats.n_current, stat);
MXS_FREE(stat);
}
server = server->next; server = server->next;
} }
if (allServers) if (have_servers)
{ {
dcb_printf(dcb, "-------------------+-----------------+-------+-------------+--------------------\n"); dcb_printf(dcb, "-------------------+-----------------+-------+-------------+--------------------\n");
} }
@ -918,16 +948,19 @@ serverRowCallback(RESULTSET *set, void *data)
return NULL; return NULL;
} }
(*rowno)++; (*rowno)++;
row = resultset_make_row(set); if (server->is_active)
resultset_row_set(row, 0, server->unique_name); {
resultset_row_set(row, 1, server->name); row = resultset_make_row(set);
sprintf(buf, "%d", server->port); resultset_row_set(row, 0, server->unique_name);
resultset_row_set(row, 2, buf); resultset_row_set(row, 1, server->name);
sprintf(buf, "%d", server->stats.n_current); sprintf(buf, "%d", server->port);
resultset_row_set(row, 3, buf); resultset_row_set(row, 2, buf);
stat = server_status(server); sprintf(buf, "%d", server->stats.n_current);
resultset_row_set(row, 4, stat); resultset_row_set(row, 3, buf);
MXS_FREE(stat); stat = server_status(server);
resultset_row_set(row, 4, stat);
MXS_FREE(stat);
}
spinlock_release(&server_spin); spinlock_release(&server_spin);
return row; return row;
} }