Fix some bugs; add info for maxadmin.

This commit is contained in:
counterpoint
2015-05-22 11:17:17 +01:00
parent 6f31357372
commit 462bfe677b
3 changed files with 14 additions and 6 deletions

View File

@ -637,6 +637,9 @@ char *user;
user = session_getUser(session); user = session_getUser(session);
if (NULL != user && strlen(user)) if (NULL != user && strlen(user))
{ {
LOGIF(LD, (skygw_log_write(
LOGFILE_DEBUG,
"About to attempt to get a persistent connection DCB")));
dcb = server_get_persistent(server, user); dcb = server_get_persistent(server, user);
if (NULL != dcb) if (NULL != dcb)
{ {
@ -1281,6 +1284,8 @@ dcb_close(DCB *dcb)
} }
if (rc == 0) if (rc == 0)
{
if (NULL != dcb->server)
{ {
spinlock_acquire(&dcb->server->persistlock); spinlock_acquire(&dcb->server->persistlock);
dcb->nextpersistent = dcb->server->persistent; dcb->nextpersistent = dcb->server->persistent;
@ -1288,6 +1293,7 @@ dcb_close(DCB *dcb)
spinlock_release(&dcb->server->persistlock); spinlock_release(&dcb->server->persistlock);
atomic_add(&dcb->server->stats.n_persistent, 1); atomic_add(&dcb->server->stats.n_persistent, 1);
return; return;
}
/** /**
* close protocol and router session * close protocol and router session

View File

@ -42,6 +42,7 @@
#include <server.h> #include <server.h>
#include <spinlock.h> #include <spinlock.h>
#include <dcb.h> #include <dcb.h>
#include <poll.h>
#include <skygw_utils.h> #include <skygw_utils.h>
#include <log_manager.h> #include <log_manager.h>
@ -79,7 +80,7 @@ SERVER *server;
server->master_id = -1; server->master_id = -1;
server->depth = -1; server->depth = -1;
server->persistent = NULL; server->persistent = NULL;
spinlock_init(server->persistlock); spinlock_init(&server->persistlock);
spinlock_acquire(&server_spin); spinlock_acquire(&server_spin);
server->next = allServers; server->next = allServers;
@ -142,12 +143,12 @@ server_get_persistent(SERVER *server, char *user)
DCB *dcb, *previous; DCB *dcb, *previous;
int rc; int rc;
spinlock_acquire(server->persistlock); spinlock_acquire(&server->persistlock);
dcb = server->persistent; dcb = server->persistent;
previous = NULL; previous = NULL;
while (dcb) { while (dcb) {
/* Test for expired, free and remove from list if it is */ /* Test for expired, free and remove from list if it is */
if (0 == strcmp(dcb->user, user)) if (NULL != dcb->user && 0 == strcmp(dcb->user, user))
{ {
if (NULL == previous) if (NULL == previous)
{ {
@ -164,7 +165,7 @@ server_get_persistent(SERVER *server, char *user)
} }
else else
{ {
spinlock_release(server->persistlock); spinlock_release(&server->persistlock);
atomic_add(&server->stats.n_persistent, -1); atomic_add(&server->stats.n_persistent, -1);
return dcb; return dcb;
} }
@ -176,7 +177,7 @@ server_get_persistent(SERVER *server, char *user)
{ {
/* Change user, remove DCB from list, release spinlock, return dcb */ /* Change user, remove DCB from list, release spinlock, return dcb */
} }
spinlock_release(server->persistlock); spinlock_release(&server->persistlock);
return NULL; return NULL;
} }
@ -255,6 +256,7 @@ printServer(SERVER *server)
printf("\tPort: %d\n", server->port); printf("\tPort: %d\n", server->port);
printf("\tTotal connections: %d\n", server->stats.n_connections); printf("\tTotal connections: %d\n", server->stats.n_connections);
printf("\tCurrent connections: %d\n", server->stats.n_current); printf("\tCurrent connections: %d\n", server->stats.n_current);
printf("\tPersistent connections: %d\n", server->stats.n_persistent);
} }
/** /**

View File

@ -96,7 +96,7 @@ typedef struct server {
long *slaves; /**< Slaves of this node */ long *slaves; /**< Slaves of this node */
bool master_err_is_logged; /*< If node failed, this indicates whether it is logged */ bool master_err_is_logged; /*< If node failed, this indicates whether it is logged */
DCB *persistent; /**< List of unused persistent connections to the server */ DCB *persistent; /**< List of unused persistent connections to the server */
SPINLOCK *persistlock; /**< Lock for adjusting the persistent connections list */ SPINLOCK persistlock; /**< Lock for adjusting the persistent connections list */
} SERVER; } SERVER;
/** /**