Added debug messages for persistent connections; additional information via maxadmin re persistent connections.
This commit is contained in:
@ -659,6 +659,13 @@ char *user;
|
||||
dcb->persistentstart = 0;
|
||||
return dcb;
|
||||
}
|
||||
else
|
||||
{
|
||||
LOGIF(LD, (skygw_log_write(
|
||||
LOGFILE_DEBUG,
|
||||
"%lu [dcb_connect] Failed to find a reusable persistent connection.\n",
|
||||
pthread_self())));
|
||||
}
|
||||
}
|
||||
|
||||
if ((dcb = dcb_alloc(DCB_ROLE_REQUEST_HANDLER)) == NULL)
|
||||
@ -1319,6 +1326,7 @@ static bool
|
||||
dcb_maybe_add_persistent(DCB *dcb)
|
||||
{
|
||||
char *user;
|
||||
int poolcount = -1;
|
||||
user = session_getUser(dcb->session);
|
||||
if (user
|
||||
&& strlen(user)
|
||||
@ -1326,8 +1334,13 @@ dcb_maybe_add_persistent(DCB *dcb)
|
||||
&& dcb->server->persistpoolmax
|
||||
&& !dcb->dcb_errhandle_called
|
||||
&& !(dcb->flags & DCBF_HUNG)
|
||||
&& dcb_persistent_clean_count(dcb, false) < dcb->server->persistpoolmax)
|
||||
&& (poolcount = dcb_persistent_clean_count(dcb, false)) < dcb->server->persistpoolmax)
|
||||
{
|
||||
LOGIF(LD, (skygw_log_write(
|
||||
LOGFILE_DEBUG,
|
||||
"%lu [dcb_connect] Adding DCB to persistent pool, user %s.\n",
|
||||
user,
|
||||
pthread_self())));
|
||||
dcb->user = strdup(user);
|
||||
dcb->persistentstart = time(NULL);
|
||||
spinlock_acquire(&dcb->server->persistlock);
|
||||
@ -1339,6 +1352,19 @@ dcb_maybe_add_persistent(DCB *dcb)
|
||||
atomic_add(&dcb->server->stats.n_current, -1);
|
||||
return true;
|
||||
}
|
||||
else
|
||||
{
|
||||
LOGIF(LD, (skygw_log_write(
|
||||
LOGFILE_DEBUG,
|
||||
"%lu [dcb_connect] Not adding DCB to persistent pool, user %s, "
|
||||
"max for pool %d, error handle called %s, hung flag %s, pool count %d.\n",
|
||||
user ? user : "",
|
||||
(dcb->server && dcb->server>persistpoolmax) ? dcb->server->persistpoolmax : 0,
|
||||
dcb->dcb_errhandle_called ? "true" : "false",
|
||||
(dcb->flags & DCBF_HUNG) ? "true" : "false",
|
||||
poolcount,
|
||||
pthread_self())));
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
@ -1489,6 +1515,14 @@ dprintOneDCB(DCB *pdcb, DCB *dcb)
|
||||
dcb_printf(pdcb, "\t\tNo. of Low Water Events: %d\n", dcb->stats.n_low_water);
|
||||
if (dcb->flags & DCBF_CLONE)
|
||||
dcb_printf(pdcb, "\t\tDCB is a clone.\n");
|
||||
if (dcb->persistentstart)
|
||||
{
|
||||
char buff[20];
|
||||
struct tm * timeinfo;
|
||||
timeinfo = localtime (&dcb->persistentstart);
|
||||
strftime(buff, sizeof(buff), "%b %d %H:%M", timeinfo);
|
||||
dcb_printf(pdcb, "\t\tAdded to persistent pool: %s", buff);
|
||||
}
|
||||
}
|
||||
/**
|
||||
* Diagnostic to print all DCB allocated in the system
|
||||
@ -1652,6 +1686,14 @@ dprintDCB(DCB *pdcb, DCB *dcb)
|
||||
dcb_printf(pdcb, "\tCallback Lock Statistics:\n");
|
||||
spinlock_stats(&dcb->cb_lock, spin_reporter, pdcb);
|
||||
#endif
|
||||
if (dcb->persistentstart)
|
||||
{
|
||||
char buff[20];
|
||||
struct tm * timeinfo;
|
||||
timeinfo = localtime (&dcb->persistentstart);
|
||||
strftime(buff, sizeof(buff), "%b %d %H:%M", timeinfo);
|
||||
dcb_printf(pdcb, "\t\tAdded to persistent pool: %s", buff);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@ -2332,7 +2374,7 @@ dcb_persistent_clean_count(DCB *dcb, bool cleanall)
|
||||
else
|
||||
{
|
||||
count++;
|
||||
previousdcb = persistentdcb;
|
||||
previousdcb = persistentdcb;
|
||||
}
|
||||
persistentdcb = nextdcb;
|
||||
}
|
||||
|
||||
@ -286,62 +286,71 @@ SERVER *ptr;
|
||||
void
|
||||
dprintAllServers(DCB *dcb)
|
||||
{
|
||||
SERVER *ptr;
|
||||
SERVER *server;
|
||||
char *stat;
|
||||
|
||||
spinlock_acquire(&server_spin);
|
||||
ptr = allServers;
|
||||
while (ptr)
|
||||
server = allServers;
|
||||
while (server)
|
||||
{
|
||||
dcb_printf(dcb, "Server %p (%s)\n", ptr, ptr->unique_name);
|
||||
dcb_printf(dcb, "Server %p (%s)\n", server, server->unique_name);
|
||||
dcb_printf(dcb, "\tServer: %s\n",
|
||||
ptr->name);
|
||||
stat = server_status(ptr);
|
||||
server->name);
|
||||
stat = server_status(server);
|
||||
dcb_printf(dcb, "\tStatus: %s\n",
|
||||
stat);
|
||||
free(stat);
|
||||
dcb_printf(dcb, "\tProtocol: %s\n",
|
||||
ptr->protocol);
|
||||
server->protocol);
|
||||
dcb_printf(dcb, "\tPort: %d\n",
|
||||
ptr->port);
|
||||
if (ptr->server_string)
|
||||
server->port);
|
||||
if (server->server_string)
|
||||
dcb_printf(dcb, "\tServer Version:\t\t\t%s\n",
|
||||
ptr->server_string);
|
||||
server->server_string);
|
||||
dcb_printf(dcb, "\tNode Id: %d\n",
|
||||
ptr->node_id);
|
||||
server->node_id);
|
||||
dcb_printf(dcb, "\tMaster Id: %d\n",
|
||||
ptr->master_id);
|
||||
if (ptr->slaves) {
|
||||
server->master_id);
|
||||
if (server->slaves) {
|
||||
int i;
|
||||
dcb_printf(dcb, "\tSlave Ids: ");
|
||||
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, "\tRepl Depth: %d\n",
|
||||
ptr->depth);
|
||||
if (SERVER_IS_SLAVE(ptr) || SERVER_IS_RELAY_SERVER(ptr)) {
|
||||
if (ptr->rlag >= 0) {
|
||||
dcb_printf(dcb, "\tSlave delay:\t\t%d\n", ptr->rlag);
|
||||
server->depth);
|
||||
if (SERVER_IS_SLAVE(server) || SERVER_IS_RELAY_SERVER(server)) {
|
||||
if (server->rlag >= 0) {
|
||||
dcb_printf(dcb, "\tSlave delay:\t\t%d\n", server->rlag);
|
||||
}
|
||||
}
|
||||
if (ptr->node_ts > 0) {
|
||||
dcb_printf(dcb, "\tLast Repl Heartbeat:\t%lu\n", ptr->node_ts);
|
||||
if (server->node_ts > 0) {
|
||||
dcb_printf(dcb, "\tLast Repl Heartbeat:\t%lu\n", server->node_ts);
|
||||
}
|
||||
dcb_printf(dcb, "\tNumber of connections: %d\n",
|
||||
ptr->stats.n_connections);
|
||||
server->stats.n_connections);
|
||||
dcb_printf(dcb, "\tCurrent no. of conns: %d\n",
|
||||
ptr->stats.n_current);
|
||||
server->stats.n_current);
|
||||
dcb_printf(dcb, "\tCurrent no. of operations: %d\n",
|
||||
ptr->stats.n_current_ops);
|
||||
dcb_printf(dcb, "\tPersistent pool size: %d\n",
|
||||
ptr->stats.n_persistent);
|
||||
ptr = ptr->next;
|
||||
server->stats.n_current_ops);
|
||||
if (server->persistpoolmax)
|
||||
{
|
||||
dcb_printf(dcb, "\tPersistent pool size: %d\n",
|
||||
server->stats.n_persistent);
|
||||
dcb_printf(dcb, "\tPersistent measured pool size: %d\n",
|
||||
dcb_persistent_clean_count(server, false));
|
||||
dcb_printf(dcb, "\tPersistent pool max size: %d\n",
|
||||
server->persistpoolmax);
|
||||
dcb_printf(dcb, "\tPersistent max time (secs): %d\n",
|
||||
server->persistmaxtime);
|
||||
}
|
||||
server = server->next;
|
||||
}
|
||||
spinlock_release(&server_spin);
|
||||
}
|
||||
@ -492,6 +501,17 @@ SERVER_PARAM *param;
|
||||
dcb_printf(dcb, "\tCurrent no. of conns: %d\n",
|
||||
server->stats.n_current);
|
||||
dcb_printf(dcb, "\tCurrent no. of operations: %d\n", server->stats.n_current_ops);
|
||||
if (server->persistpoolmax)
|
||||
{
|
||||
dcb_printf(dcb, "\tPersistent pool size: %d\n",
|
||||
server->stats.n_persistent);
|
||||
dcb_printf(dcb, "\tPersistent measured pool size: %d\n",
|
||||
dcb_persistent_clean_count(server, false));
|
||||
dcb_printf(dcb, "\tPersistent pool max size: %d\n",
|
||||
server->persistpoolmax);
|
||||
dcb_printf(dcb, "\tPersistent max time (secs): %d\n",
|
||||
server->persistmaxtime);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user