Fix some bugs; add info for maxadmin.
This commit is contained in:
@ -637,6 +637,9 @@ char *user;
|
||||
user = session_getUser(session);
|
||||
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);
|
||||
if (NULL != dcb)
|
||||
{
|
||||
@ -1281,6 +1284,8 @@ dcb_close(DCB *dcb)
|
||||
}
|
||||
|
||||
if (rc == 0)
|
||||
{
|
||||
if (NULL != dcb->server)
|
||||
{
|
||||
spinlock_acquire(&dcb->server->persistlock);
|
||||
dcb->nextpersistent = dcb->server->persistent;
|
||||
@ -1288,6 +1293,7 @@ dcb_close(DCB *dcb)
|
||||
spinlock_release(&dcb->server->persistlock);
|
||||
atomic_add(&dcb->server->stats.n_persistent, 1);
|
||||
return;
|
||||
}
|
||||
|
||||
/**
|
||||
* close protocol and router session
|
||||
|
@ -42,6 +42,7 @@
|
||||
#include <server.h>
|
||||
#include <spinlock.h>
|
||||
#include <dcb.h>
|
||||
#include <poll.h>
|
||||
#include <skygw_utils.h>
|
||||
#include <log_manager.h>
|
||||
|
||||
@ -79,7 +80,7 @@ SERVER *server;
|
||||
server->master_id = -1;
|
||||
server->depth = -1;
|
||||
server->persistent = NULL;
|
||||
spinlock_init(server->persistlock);
|
||||
spinlock_init(&server->persistlock);
|
||||
|
||||
spinlock_acquire(&server_spin);
|
||||
server->next = allServers;
|
||||
@ -142,12 +143,12 @@ server_get_persistent(SERVER *server, char *user)
|
||||
DCB *dcb, *previous;
|
||||
int rc;
|
||||
|
||||
spinlock_acquire(server->persistlock);
|
||||
spinlock_acquire(&server->persistlock);
|
||||
dcb = server->persistent;
|
||||
previous = NULL;
|
||||
while (dcb) {
|
||||
/* 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)
|
||||
{
|
||||
@ -164,7 +165,7 @@ server_get_persistent(SERVER *server, char *user)
|
||||
}
|
||||
else
|
||||
{
|
||||
spinlock_release(server->persistlock);
|
||||
spinlock_release(&server->persistlock);
|
||||
atomic_add(&server->stats.n_persistent, -1);
|
||||
return dcb;
|
||||
}
|
||||
@ -176,7 +177,7 @@ server_get_persistent(SERVER *server, char *user)
|
||||
{
|
||||
/* Change user, remove DCB from list, release spinlock, return dcb */
|
||||
}
|
||||
spinlock_release(server->persistlock);
|
||||
spinlock_release(&server->persistlock);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
@ -255,6 +256,7 @@ printServer(SERVER *server)
|
||||
printf("\tPort: %d\n", server->port);
|
||||
printf("\tTotal connections: %d\n", server->stats.n_connections);
|
||||
printf("\tCurrent connections: %d\n", server->stats.n_current);
|
||||
printf("\tPersistent connections: %d\n", server->stats.n_persistent);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -96,7 +96,7 @@ typedef struct server {
|
||||
long *slaves; /**< Slaves of this node */
|
||||
bool master_err_is_logged; /*< If node failed, this indicates whether it is logged */
|
||||
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;
|
||||
|
||||
/**
|
||||
|
Reference in New Issue
Block a user