Fix some bugs; add info for maxadmin.
This commit is contained in:
@ -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
|
||||||
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -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;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
Reference in New Issue
Block a user