Reindent server/core/server.c

This commit is contained in:
Johan Wikman
2015-11-30 18:42:07 +02:00
parent 02da87f737
commit ed06d4f14c
2 changed files with 747 additions and 658 deletions

View File

@ -69,7 +69,9 @@ server_alloc(char *servname, char *protocol, unsigned short port)
SERVER *server; SERVER *server;
if ((server = (SERVER *)calloc(1, sizeof(SERVER))) == NULL) if ((server = (SERVER *)calloc(1, sizeof(SERVER))) == NULL)
{
return NULL; return NULL;
}
#if defined(SS_DEBUG) #if defined(SS_DEBUG)
server->server_chk_top = CHK_NUM_SERVER; server->server_chk_top = CHK_NUM_SERVER;
server->server_chk_tail = CHK_NUM_SERVER; server->server_chk_tail = CHK_NUM_SERVER;
@ -121,19 +123,27 @@ SERVER *server;
server = server->next; server = server->next;
} }
if (server) if (server)
{
server->next = tofreeserver->next; server->next = tofreeserver->next;
} }
}
spinlock_release(&server_spin); spinlock_release(&server_spin);
/* Clean up session and free the memory */ /* Clean up session and free the memory */
free(tofreeserver->name); free(tofreeserver->name);
free(tofreeserver->protocol); free(tofreeserver->protocol);
if (tofreeserver->unique_name) if (tofreeserver->unique_name)
{
free(tofreeserver->unique_name); free(tofreeserver->unique_name);
}
if (tofreeserver->server_string) if (tofreeserver->server_string)
{
free(tofreeserver->server_string); free(tofreeserver->server_string);
}
if (tofreeserver->persistent) if (tofreeserver->persistent)
{
dcb_persistent_clean_count(tofreeserver->persistent, true); dcb_persistent_clean_count(tofreeserver->persistent, true);
}
free(tofreeserver); free(tofreeserver);
return 1; return 1;
} }
@ -157,7 +167,8 @@ server_get_persistent(SERVER *server, char *user, const char *protocol)
{ {
spinlock_acquire(&server->persistlock); spinlock_acquire(&server->persistlock);
dcb = server->persistent; dcb = server->persistent;
while (dcb) { while (dcb)
{
if (dcb->user if (dcb->user
&& dcb->protoname && dcb->protoname
&& !dcb-> dcb_errhandle_called && !dcb-> dcb_errhandle_called
@ -232,7 +243,9 @@ SERVER *server;
while (server) while (server)
{ {
if (server->unique_name && strcmp(server->unique_name, name) == 0) if (server->unique_name && strcmp(server->unique_name, name) == 0)
{
break; break;
}
server = server->next; server = server->next;
} }
spinlock_release(&server_spin); spinlock_release(&server_spin);
@ -256,7 +269,9 @@ SERVER *server;
while (server) while (server)
{ {
if (strcmp(server->name, servname) == 0 && server->port == port) if (strcmp(server->name, servname) == 0 && server->port == port)
{
break; break;
}
server = server->next; server = server->next;
} }
spinlock_release(&server_spin); spinlock_release(&server_spin);
@ -336,26 +351,34 @@ char *stat;
server->node_id); server->node_id);
dcb_printf(dcb, "\tMaster Id: %d\n", dcb_printf(dcb, "\tMaster Id: %d\n",
server->master_id); server->master_id);
if (server->slaves) { if (server->slaves)
{
int i; int i;
dcb_printf(dcb, "\tSlave Ids: "); dcb_printf(dcb, "\tSlave Ids: ");
for (i = 0; server->slaves[i]; i++) for (i = 0; server->slaves[i]; i++)
{ {
if (i == 0) if (i == 0)
{
dcb_printf(dcb, "%li", server->slaves[i]); dcb_printf(dcb, "%li", server->slaves[i]);
}
else else
{
dcb_printf(dcb, ", %li ", server->slaves[i]); dcb_printf(dcb, ", %li ", server->slaves[i]);
} }
}
dcb_printf(dcb, "\n"); dcb_printf(dcb, "\n");
} }
dcb_printf(dcb, "\tRepl Depth: %d\n", dcb_printf(dcb, "\tRepl Depth: %d\n",
server->depth); server->depth);
if (SERVER_IS_SLAVE(server) || SERVER_IS_RELAY_SERVER(server)) { if (SERVER_IS_SLAVE(server) || SERVER_IS_RELAY_SERVER(server))
if (server->rlag >= 0) { {
if (server->rlag >= 0)
{
dcb_printf(dcb, "\tSlave delay:\t\t%d\n", server->rlag); dcb_printf(dcb, "\tSlave delay:\t\t%d\n", server->rlag);
} }
} }
if (server->node_ts > 0) { if (server->node_ts > 0)
{
dcb_printf(dcb, "\tLast Repl Heartbeat:\t%lu\n", server->node_ts); dcb_printf(dcb, "\tLast Repl Heartbeat:\t%lu\n", server->node_ts);
} }
dcb_printf(dcb, "\tNumber of connections: %d\n", dcb_printf(dcb, "\tNumber of connections: %d\n",
@ -418,32 +441,42 @@ int el = 1;
dcb_printf(dcb, " \"port\": \"%d\",\n", dcb_printf(dcb, " \"port\": \"%d\",\n",
server->port); server->port);
if (server->server_string) if (server->server_string)
{
dcb_printf(dcb, " \"version\": \"%s\",\n", dcb_printf(dcb, " \"version\": \"%s\",\n",
server->server_string); server->server_string);
}
dcb_printf(dcb, " \"nodeId\": \"%d\",\n", dcb_printf(dcb, " \"nodeId\": \"%d\",\n",
server->node_id); server->node_id);
dcb_printf(dcb, " \"masterId\": \"%d\",\n", dcb_printf(dcb, " \"masterId\": \"%d\",\n",
server->master_id); server->master_id);
if (server->slaves) { if (server->slaves)
{
int i; int i;
dcb_printf(dcb, " \"slaveIds\": [ "); dcb_printf(dcb, " \"slaveIds\": [ ");
for (i = 0; server->slaves[i]; i++) for (i = 0; server->slaves[i]; i++)
{ {
if (i == 0) if (i == 0)
{
dcb_printf(dcb, "%li", server->slaves[i]); dcb_printf(dcb, "%li", server->slaves[i]);
}
else else
{
dcb_printf(dcb, ", %li ", server->slaves[i]); dcb_printf(dcb, ", %li ", server->slaves[i]);
} }
}
dcb_printf(dcb, "],\n"); dcb_printf(dcb, "],\n");
} }
dcb_printf(dcb, " \"replDepth\": \"%d\",\n", dcb_printf(dcb, " \"replDepth\": \"%d\",\n",
server->depth); server->depth);
if (SERVER_IS_SLAVE(server) || SERVER_IS_RELAY_SERVER(server)) { if (SERVER_IS_SLAVE(server) || SERVER_IS_RELAY_SERVER(server))
if (server->rlag >= 0) { {
if (server->rlag >= 0)
{
dcb_printf(dcb, " \"slaveDelay\": \"%d\",\n", server->rlag); dcb_printf(dcb, " \"slaveDelay\": \"%d\",\n", server->rlag);
} }
} }
if (server->node_ts > 0) { if (server->node_ts > 0)
{
dcb_printf(dcb, " \"lastReplHeartbeat\": \"%lu\",\n", server->node_ts); dcb_printf(dcb, " \"lastReplHeartbeat\": \"%lu\",\n", server->node_ts);
} }
dcb_printf(dcb, " \"totalConnections\": \"%d\",\n", dcb_printf(dcb, " \"totalConnections\": \"%d\",\n",
@ -452,10 +485,12 @@ int el = 1;
server->stats.n_current); server->stats.n_current);
dcb_printf(dcb, " \"currentOps\": \"%d\"\n", dcb_printf(dcb, " \"currentOps\": \"%d\"\n",
server->stats.n_current_ops); server->stats.n_current_ops);
if (el < len) { if (el < len)
{
dcb_printf(dcb, " },\n"); dcb_printf(dcb, " },\n");
} }
else { else
{
dcb_printf(dcb, " }\n"); dcb_printf(dcb, " }\n");
} }
server = server->next; server = server->next;
@ -486,28 +521,38 @@ SERVER_PARAM *param;
dcb_printf(dcb, "\tProtocol: %s\n", server->protocol); dcb_printf(dcb, "\tProtocol: %s\n", server->protocol);
dcb_printf(dcb, "\tPort: %d\n", server->port); dcb_printf(dcb, "\tPort: %d\n", server->port);
if (server->server_string) if (server->server_string)
{
dcb_printf(dcb, "\tServer Version:\t\t\t%s\n", server->server_string); dcb_printf(dcb, "\tServer Version:\t\t\t%s\n", server->server_string);
}
dcb_printf(dcb, "\tNode Id: %d\n", server->node_id); dcb_printf(dcb, "\tNode Id: %d\n", server->node_id);
dcb_printf(dcb, "\tMaster Id: %d\n", server->master_id); dcb_printf(dcb, "\tMaster Id: %d\n", server->master_id);
if (server->slaves) { if (server->slaves)
{
int i; int i;
dcb_printf(dcb, "\tSlave Ids: "); dcb_printf(dcb, "\tSlave Ids: ");
for (i = 0; server->slaves[i]; i++) for (i = 0; server->slaves[i]; i++)
{ {
if (i == 0) if (i == 0)
{
dcb_printf(dcb, "%li", server->slaves[i]); dcb_printf(dcb, "%li", server->slaves[i]);
}
else else
{
dcb_printf(dcb, ", %li ", server->slaves[i]); dcb_printf(dcb, ", %li ", server->slaves[i]);
} }
}
dcb_printf(dcb, "\n"); dcb_printf(dcb, "\n");
} }
dcb_printf(dcb, "\tRepl Depth: %d\n", server->depth); dcb_printf(dcb, "\tRepl Depth: %d\n", server->depth);
if (SERVER_IS_SLAVE(server) || SERVER_IS_RELAY_SERVER(server)) { if (SERVER_IS_SLAVE(server) || SERVER_IS_RELAY_SERVER(server))
if (server->rlag >= 0) { {
if (server->rlag >= 0)
{
dcb_printf(dcb, "\tSlave delay:\t\t%d\n", server->rlag); dcb_printf(dcb, "\tSlave delay:\t\t%d\n", server->rlag);
} }
} }
if (server->node_ts > 0) { if (server->node_ts > 0)
{
struct tm result; struct tm result;
char buf[40]; char buf[40];
dcb_printf(dcb, "\tLast Repl Heartbeat:\t%s", dcb_printf(dcb, "\tLast Repl Heartbeat:\t%s",
@ -612,7 +657,9 @@ char *stat;
server = server->next; server = server->next;
} }
if (allServers) if (allServers)
{
dcb_printf(dcb, "-------------------+-----------------+-------+-------------+--------------------\n"); dcb_printf(dcb, "-------------------+-----------------+-------+-------------+--------------------\n");
}
spinlock_release(&server_spin); spinlock_release(&server_spin);
} }
@ -629,30 +676,54 @@ server_status(SERVER *server)
char *status = NULL; char *status = NULL;
if (NULL == server || (status = (char *)malloc(256)) == NULL) if (NULL == server || (status = (char *)malloc(256)) == NULL)
{
return NULL; return NULL;
}
status[0] = 0; status[0] = 0;
if (server->status & SERVER_MAINT) if (server->status & SERVER_MAINT)
{
strcat(status, "Maintenance, "); strcat(status, "Maintenance, ");
}
if (server->status & SERVER_MASTER) if (server->status & SERVER_MASTER)
{
strcat(status, "Master, "); strcat(status, "Master, ");
}
if (server->status & SERVER_SLAVE) if (server->status & SERVER_SLAVE)
{
strcat(status, "Slave, "); strcat(status, "Slave, ");
}
if (server->status & SERVER_JOINED) if (server->status & SERVER_JOINED)
{
strcat(status, "Synced, "); strcat(status, "Synced, ");
}
if (server->status & SERVER_NDB) if (server->status & SERVER_NDB)
{
strcat(status, "NDB, "); strcat(status, "NDB, ");
}
if (server->status & SERVER_SLAVE_OF_EXTERNAL_MASTER) if (server->status & SERVER_SLAVE_OF_EXTERNAL_MASTER)
{
strcat(status, "Slave of External Server, "); strcat(status, "Slave of External Server, ");
}
if (server->status & SERVER_STALE_STATUS) if (server->status & SERVER_STALE_STATUS)
{
strcat(status, "Stale Status, "); strcat(status, "Stale Status, ");
}
if (server->status & SERVER_MASTER_STICKINESS) if (server->status & SERVER_MASTER_STICKINESS)
{
strcat(status, "Master Stickiness, "); strcat(status, "Master Stickiness, ");
}
if (server->status & SERVER_AUTH_ERROR) if (server->status & SERVER_AUTH_ERROR)
{
strcat(status, "Auth Error, "); strcat(status, "Auth Error, ");
}
if (server->status & SERVER_RUNNING) if (server->status & SERVER_RUNNING)
{
strcat(status, "Running"); strcat(status, "Running");
}
else else
{
strcat(status, "Down"); strcat(status, "Down");
}
return status; return status;
} }
@ -760,7 +831,8 @@ server_update(SERVER *server, char *protocol, char *user, char *passwd)
server->protocol = strdup(protocol); server->protocol = strdup(protocol);
} }
if (user != NULL && passwd != NULL) { if (user != NULL && passwd != NULL)
{
if (strcmp(server->monuser, user) == 0 || if (strcmp(server->monuser, user) == 0 ||
strcmp(server->monpw, passwd) == 0) strcmp(server->monpw, passwd) == 0)
{ {
@ -824,7 +896,9 @@ SERVER_PARAM *param = server->parameters;
while (param) while (param)
{ {
if (strcmp(param->name, name) == 0) if (strcmp(param->name, name) == 0)
{
return param->value; return param->value;
}
param = param->next; param = param->next;
} }
return NULL; return NULL;
@ -841,7 +915,7 @@ static RESULT_ROW *
serverRowCallback(RESULTSET *set, void *data) serverRowCallback(RESULTSET *set, void *data)
{ {
int *rowno = (int *)data; int *rowno = (int *)data;
int i = 0;; int i = 0;
char *stat, buf[20]; char *stat, buf[20];
RESULT_ROW *row; RESULT_ROW *row;
SERVER *server; SERVER *server;
@ -886,7 +960,9 @@ RESULTSET *set;
int *data; int *data;
if ((data = (int *)malloc(sizeof(int))) == NULL) if ((data = (int *)malloc(sizeof(int))) == NULL)
{
return NULL; return NULL;
}
*data = 0; *data = 0;
if ((set = resultset_create(serverRowCallback, data)) == NULL) if ((set = resultset_create(serverRowCallback, data)) == NULL)
{ {
@ -913,8 +989,10 @@ void
server_update_address(SERVER *server, char *address) server_update_address(SERVER *server, char *address)
{ {
spinlock_acquire(&server_spin); spinlock_acquire(&server_spin);
if (server && address) { if (server && address)
if (server->name) { {
if (server->name)
{
free(server->name); free(server->name);
} }
server->name = strdup(address); server->name = strdup(address);
@ -933,13 +1011,15 @@ void
server_update_port(SERVER *server, unsigned short port) server_update_port(SERVER *server, unsigned short port)
{ {
spinlock_acquire(&server_spin); spinlock_acquire(&server_spin);
if (server && port > 0) { if (server && port > 0)
{
server->port = port; server->port = port;
} }
spinlock_release(&server_spin); spinlock_release(&server_spin);
} }
static struct { static struct
{
char *str; char *str;
unsigned int bit; unsigned int bit;
} ServerBits[] = { } ServerBits[] = {
@ -965,8 +1045,12 @@ server_map_status(char *str)
int i; int i;
for (i = 0; ServerBits[i].str; i++) for (i = 0; ServerBits[i].str; i++)
{
if (!strcasecmp(str, ServerBits[i].str)) if (!strcasecmp(str, ServerBits[i].str))
{
return ServerBits[i].bit; return ServerBits[i].bit;
}
}
return 0; return 0;
} }

View File

@ -55,18 +55,19 @@
* The server parameters used for weighting routing decissions * The server parameters used for weighting routing decissions
* *
*/ */
typedef struct server_params { typedef struct server_params
{
char *name; /**< Parameter name */ char *name; /**< Parameter name */
char *value; /**< Parameter value */ char *value; /**< Parameter value */
struct server_params struct server_params *next; /**< Next Paramter in the linked list */
*next; /**< Next Paramter in the linked list */
} SERVER_PARAM; } SERVER_PARAM;
/** /**
* The server statistics structure * The server statistics structure
* *
*/ */
typedef struct { typedef struct
{
int n_connections; /**< Number of connections */ int n_connections; /**< Number of connections */
int n_current; /**< Current connections */ int n_current; /**< Current connections */
int n_current_ops; /**< Current active operations */ int n_current_ops; /**< Current active operations */
@ -124,7 +125,8 @@ typedef struct server {
#define SERVER_JOINED 0x0008 /**<< The server is joined in a Galera cluster */ #define SERVER_JOINED 0x0008 /**<< The server is joined in a Galera cluster */
#define SERVER_NDB 0x0010 /**<< The server is part of a MySQL cluster setup */ #define SERVER_NDB 0x0010 /**<< The server is part of a MySQL cluster setup */
#define SERVER_MAINT 0x0020 /**<< Server is in maintenance mode */ #define SERVER_MAINT 0x0020 /**<< Server is in maintenance mode */
#define SERVER_SLAVE_OF_EXTERNAL_MASTER 0x0040 /**<< Server is slave of a Master outside the provided replication topology */ #define SERVER_SLAVE_OF_EXTERNAL_MASTER 0x0040 /**<< Server is slave of a Master outside
the provided replication topology */
#define SERVER_STALE_STATUS 0x0080 /**<< Server stale status, monitor didn't update it */ #define SERVER_STALE_STATUS 0x0080 /**<< Server stale status, monitor didn't update it */
#define SERVER_MASTER_STICKINESS 0x0100 /**<< Server Master stickiness */ #define SERVER_MASTER_STICKINESS 0x0100 /**<< Server Master stickiness */
#define SERVER_AUTH_ERROR 0x1000 /**<< Authentication erorr from monitor */ #define SERVER_AUTH_ERROR 0x1000 /**<< Authentication erorr from monitor */
@ -161,7 +163,8 @@ typedef struct server {
* in order for the macro to return true * in order for the macro to return true
*/ */
#define SERVER_IS_SLAVE(server) \ #define SERVER_IS_SLAVE(server) \
(((server)->status & (SERVER_RUNNING|SERVER_MASTER|SERVER_SLAVE|SERVER_MAINT)) == (SERVER_RUNNING|SERVER_SLAVE)) (((server)->status & (SERVER_RUNNING|SERVER_MASTER|SERVER_SLAVE|SERVER_MAINT)) == \
(SERVER_RUNNING|SERVER_SLAVE))
/** /**
* Is the server joined Galera node? The server must be running and joined. * Is the server joined Galera node? The server must be running and joined.
@ -186,7 +189,8 @@ typedef struct server {
#define SERVER_IS_IN_CLUSTER(s) (((s)->status & (SERVER_MASTER|SERVER_SLAVE|SERVER_JOINED|SERVER_NDB)) != 0) #define SERVER_IS_IN_CLUSTER(s) (((s)->status & (SERVER_MASTER|SERVER_SLAVE|SERVER_JOINED|SERVER_NDB)) != 0)
#define SERVER_IS_RELAY_SERVER(server) \ #define SERVER_IS_RELAY_SERVER(server) \
(((server)->status & (SERVER_RUNNING|SERVER_MASTER|SERVER_SLAVE|SERVER_MAINT)) == (SERVER_RUNNING|SERVER_MASTER|SERVER_SLAVE)) (((server)->status & (SERVER_RUNNING|SERVER_MASTER|SERVER_SLAVE|SERVER_MAINT)) == \
(SERVER_RUNNING|SERVER_MASTER|SERVER_SLAVE))
extern SERVER *server_alloc(char *, char *, unsigned short); extern SERVER *server_alloc(char *, char *, unsigned short);
extern int server_free(SERVER *); extern int server_free(SERVER *);
@ -215,4 +219,5 @@ extern void server_update_port(SERVER *, unsigned short);
extern RESULTSET *serverGetList(); extern RESULTSET *serverGetList();
extern unsigned int server_map_status(char *str); extern unsigned int server_map_status(char *str);
extern bool server_set_version_string(SERVER* server, const char* string); extern bool server_set_version_string(SERVER* server, const char* string);
#endif #endif