Added debug messages for persistent connections; additional information via maxadmin re persistent connections.

This commit is contained in:
counterpoint
2015-06-19 15:01:40 +01:00
parent 4417f2bbf4
commit ef428b9229
2 changed files with 92 additions and 30 deletions

View File

@ -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;
}

View File

@ -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);
}
}
/**