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

@ -66,10 +66,12 @@ static void spin_reporter(void *, char *, int);
SERVER *
server_alloc(char *servname, char *protocol, unsigned short port)
{
SERVER *server;
SERVER *server;
if ((server = (SERVER *)calloc(1, sizeof(SERVER))) == NULL)
{
return NULL;
}
#if defined(SS_DEBUG)
server->server_chk_top = CHK_NUM_SERVER;
server->server_chk_tail = CHK_NUM_SERVER;
@ -105,7 +107,7 @@ SERVER *server;
int
server_free(SERVER *tofreeserver)
{
SERVER *server;
SERVER *server;
/* First of all remove from the linked list */
spinlock_acquire(&server_spin);
@ -121,19 +123,27 @@ SERVER *server;
server = server->next;
}
if (server)
{
server->next = tofreeserver->next;
}
}
spinlock_release(&server_spin);
/* Clean up session and free the memory */
free(tofreeserver->name);
free(tofreeserver->protocol);
if (tofreeserver->unique_name)
{
free(tofreeserver->unique_name);
}
if (tofreeserver->server_string)
{
free(tofreeserver->server_string);
}
if (tofreeserver->persistent)
{
dcb_persistent_clean_count(tofreeserver->persistent, true);
}
free(tofreeserver);
return 1;
}
@ -157,7 +167,8 @@ server_get_persistent(SERVER *server, char *user, const char *protocol)
{
spinlock_acquire(&server->persistlock);
dcb = server->persistent;
while (dcb) {
while (dcb)
{
if (dcb->user
&& dcb->protoname
&& !dcb-> dcb_errhandle_called
@ -225,14 +236,16 @@ server_set_unique_name(SERVER *server, char *name)
SERVER *
server_find_by_unique_name(char *name)
{
SERVER *server;
SERVER *server;
spinlock_acquire(&server_spin);
server = allServers;
while (server)
{
if (server->unique_name && strcmp(server->unique_name, name) == 0)
{
break;
}
server = server->next;
}
spinlock_release(&server_spin);
@ -249,14 +262,16 @@ SERVER *server;
SERVER *
server_find(char *servname, unsigned short port)
{
SERVER *server;
SERVER *server;
spinlock_acquire(&server_spin);
server = allServers;
while (server)
{
if (strcmp(server->name, servname) == 0 && server->port == port)
{
break;
}
server = server->next;
}
spinlock_release(&server_spin);
@ -290,7 +305,7 @@ printServer(SERVER *server)
void
printAllServers()
{
SERVER *server;
SERVER *server;
spinlock_acquire(&server_spin);
server = allServers;
@ -311,8 +326,8 @@ SERVER *server;
void
dprintAllServers(DCB *dcb)
{
SERVER *server;
char *stat;
SERVER *server;
char *stat;
spinlock_acquire(&server_spin);
server = allServers;
@ -336,26 +351,34 @@ char *stat;
server->node_id);
dcb_printf(dcb, "\tMaster Id: %d\n",
server->master_id);
if (server->slaves) {
if (server->slaves)
{
int i;
dcb_printf(dcb, "\tSlave Ids: ");
for (i = 0; server->slaves[i]; i++)
{
if (i == 0)
{
dcb_printf(dcb, "%li", server->slaves[i]);
}
else
{
dcb_printf(dcb, ", %li ", server->slaves[i]);
}
}
dcb_printf(dcb, "\n");
}
dcb_printf(dcb, "\tRepl Depth: %d\n",
server->depth);
if (SERVER_IS_SLAVE(server) || SERVER_IS_RELAY_SERVER(server)) {
if (server->rlag >= 0) {
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 (server->node_ts > 0) {
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",
@ -391,10 +414,10 @@ char *stat;
void
dprintAllServersJson(DCB *dcb)
{
SERVER *server;
char *stat;
int len = 0;
int el = 1;
SERVER *server;
char *stat;
int len = 0;
int el = 1;
spinlock_acquire(&server_spin);
server = allServers;
@ -418,32 +441,42 @@ int el = 1;
dcb_printf(dcb, " \"port\": \"%d\",\n",
server->port);
if (server->server_string)
{
dcb_printf(dcb, " \"version\": \"%s\",\n",
server->server_string);
}
dcb_printf(dcb, " \"nodeId\": \"%d\",\n",
server->node_id);
dcb_printf(dcb, " \"masterId\": \"%d\",\n",
server->master_id);
if (server->slaves) {
if (server->slaves)
{
int i;
dcb_printf(dcb, " \"slaveIds\": [ ");
for (i = 0; server->slaves[i]; i++)
{
if (i == 0)
{
dcb_printf(dcb, "%li", server->slaves[i]);
}
else
{
dcb_printf(dcb, ", %li ", server->slaves[i]);
}
}
dcb_printf(dcb, "],\n");
}
dcb_printf(dcb, " \"replDepth\": \"%d\",\n",
server->depth);
if (SERVER_IS_SLAVE(server) || SERVER_IS_RELAY_SERVER(server)) {
if (server->rlag >= 0) {
if (SERVER_IS_SLAVE(server) || SERVER_IS_RELAY_SERVER(server))
{
if (server->rlag >= 0)
{
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, " \"totalConnections\": \"%d\",\n",
@ -452,10 +485,12 @@ int el = 1;
server->stats.n_current);
dcb_printf(dcb, " \"currentOps\": \"%d\"\n",
server->stats.n_current_ops);
if (el < len) {
if (el < len)
{
dcb_printf(dcb, " },\n");
}
else {
else
{
dcb_printf(dcb, " }\n");
}
server = server->next;
@ -475,8 +510,8 @@ int el = 1;
void
dprintServer(DCB *dcb, SERVER *server)
{
char *stat;
SERVER_PARAM *param;
char *stat;
SERVER_PARAM *param;
dcb_printf(dcb, "Server %p (%s)\n", server, server->unique_name);
dcb_printf(dcb, "\tServer: %s\n", server->name);
@ -486,28 +521,38 @@ SERVER_PARAM *param;
dcb_printf(dcb, "\tProtocol: %s\n", server->protocol);
dcb_printf(dcb, "\tPort: %d\n", server->port);
if (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, "\tMaster Id: %d\n", server->master_id);
if (server->slaves) {
if (server->slaves)
{
int i;
dcb_printf(dcb, "\tSlave Ids: ");
for (i = 0; server->slaves[i]; i++)
{
if (i == 0)
{
dcb_printf(dcb, "%li", server->slaves[i]);
}
else
{
dcb_printf(dcb, ", %li ", server->slaves[i]);
}
}
dcb_printf(dcb, "\n");
}
dcb_printf(dcb, "\tRepl Depth: %d\n", server->depth);
if (SERVER_IS_SLAVE(server) || SERVER_IS_RELAY_SERVER(server)) {
if (server->rlag >= 0) {
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 (server->node_ts > 0) {
if (server->node_ts > 0)
{
struct tm result;
char buf[40];
dcb_printf(dcb, "\tLast Repl Heartbeat:\t%s",
@ -565,7 +610,7 @@ spin_reporter(void *dcb, char *desc, int value)
void
dprintPersistentDCBs(DCB *pdcb, SERVER *server)
{
DCB *dcb;
DCB *dcb;
spinlock_acquire(&server->persistlock);
#if SPINLOCK_PROFILE
@ -588,8 +633,8 @@ DCB *dcb;
void
dListServers(DCB *dcb)
{
SERVER *server;
char *stat;
SERVER *server;
char *stat;
spinlock_acquire(&server_spin);
server = allServers;
@ -612,7 +657,9 @@ char *stat;
server = server->next;
}
if (allServers)
{
dcb_printf(dcb, "-------------------+-----------------+-------+-------------+--------------------\n");
}
spinlock_release(&server_spin);
}
@ -626,33 +673,57 @@ char *stat;
char *
server_status(SERVER *server)
{
char *status = NULL;
char *status = NULL;
if (NULL == server || (status = (char *)malloc(256)) == NULL)
{
return NULL;
}
status[0] = 0;
if (server->status & SERVER_MAINT)
{
strcat(status, "Maintenance, ");
}
if (server->status & SERVER_MASTER)
{
strcat(status, "Master, ");
}
if (server->status & SERVER_SLAVE)
{
strcat(status, "Slave, ");
}
if (server->status & SERVER_JOINED)
{
strcat(status, "Synced, ");
}
if (server->status & SERVER_NDB)
{
strcat(status, "NDB, ");
}
if (server->status & SERVER_SLAVE_OF_EXTERNAL_MASTER)
{
strcat(status, "Slave of External Server, ");
}
if (server->status & SERVER_STALE_STATUS)
{
strcat(status, "Stale Status, ");
}
if (server->status & SERVER_MASTER_STICKINESS)
{
strcat(status, "Master Stickiness, ");
}
if (server->status & SERVER_AUTH_ERROR)
{
strcat(status, "Auth Error, ");
}
if (server->status & SERVER_RUNNING)
{
strcat(status, "Running");
}
else
{
strcat(status, "Down");
}
return status;
}
@ -760,7 +831,8 @@ server_update(SERVER *server, char *protocol, char *user, char *passwd)
server->protocol = strdup(protocol);
}
if (user != NULL && passwd != NULL) {
if (user != NULL && passwd != NULL)
{
if (strcmp(server->monuser, user) == 0 ||
strcmp(server->monpw, passwd) == 0)
{
@ -787,7 +859,7 @@ server_update(SERVER *server, char *protocol, char *user, char *passwd)
void
serverAddParameter(SERVER *server, char *name, char *value)
{
SERVER_PARAM *param;
SERVER_PARAM *param;
if ((param = (SERVER_PARAM *)malloc(sizeof(SERVER_PARAM))) == NULL)
{
@ -819,12 +891,14 @@ SERVER_PARAM *param;
char *
serverGetParameter(SERVER *server, char *name)
{
SERVER_PARAM *param = server->parameters;
SERVER_PARAM *param = server->parameters;
while (param)
{
if (strcmp(param->name, name) == 0)
{
return param->value;
}
param = param->next;
}
return NULL;
@ -840,11 +914,11 @@ SERVER_PARAM *param = server->parameters;
static RESULT_ROW *
serverRowCallback(RESULTSET *set, void *data)
{
int *rowno = (int *)data;
int i = 0;;
char *stat, buf[20];
RESULT_ROW *row;
SERVER *server;
int *rowno = (int *)data;
int i = 0;
char *stat, buf[20];
RESULT_ROW *row;
SERVER *server;
spinlock_acquire(&server_spin);
server = allServers;
@ -882,11 +956,13 @@ SERVER *server;
RESULTSET *
serverGetList()
{
RESULTSET *set;
int *data;
RESULTSET *set;
int *data;
if ((data = (int *)malloc(sizeof(int))) == NULL)
{
return NULL;
}
*data = 0;
if ((set = resultset_create(serverRowCallback, data)) == NULL)
{
@ -913,8 +989,10 @@ void
server_update_address(SERVER *server, char *address)
{
spinlock_acquire(&server_spin);
if (server && address) {
if (server->name) {
if (server && address)
{
if (server->name)
{
free(server->name);
}
server->name = strdup(address);
@ -933,13 +1011,15 @@ void
server_update_port(SERVER *server, unsigned short port)
{
spinlock_acquire(&server_spin);
if (server && port > 0) {
if (server && port > 0)
{
server->port = port;
}
spinlock_release(&server_spin);
}
static struct {
static struct
{
char *str;
unsigned int bit;
} ServerBits[] = {
@ -962,11 +1042,15 @@ static struct {
unsigned int
server_map_status(char *str)
{
int i;
int i;
for (i = 0; ServerBits[i].str; i++)
{
if (!strcasecmp(str, ServerBits[i].str))
{
return ServerBits[i].bit;
}
}
return 0;
}

View File

@ -55,18 +55,19 @@
* The server parameters used for weighting routing decissions
*
*/
typedef struct server_params {
typedef struct server_params
{
char *name; /**< Parameter name */
char *value; /**< Parameter value */
struct server_params
*next; /**< Next Paramter in the linked list */
struct server_params *next; /**< Next Paramter in the linked list */
} SERVER_PARAM;
/**
* The server statistics structure
*
*/
typedef struct {
typedef struct
{
int n_connections; /**< Number of connections */
int n_current; /**< Current connections */
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_NDB 0x0010 /**<< The server is part of a MySQL cluster setup */
#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_MASTER_STICKINESS 0x0100 /**<< Server Master stickiness */
#define SERVER_AUTH_ERROR 0x1000 /**<< Authentication erorr from monitor */
@ -154,14 +156,15 @@ typedef struct server {
* marked as master and not have maintenance bit set.
*/
#define SERVER_IS_ROOT_MASTER(server) \
(((server)->status & (SERVER_RUNNING|SERVER_MASTER|SERVER_MAINT)) == (SERVER_RUNNING|SERVER_MASTER))
(((server)->status & (SERVER_RUNNING|SERVER_MASTER|SERVER_MAINT)) == (SERVER_RUNNING|SERVER_MASTER))
/**
/**
* Is the server a slave? The server must be both running and marked as a slave
* in order for the macro to return true
*/
#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.
@ -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_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 int server_free(SERVER *);
@ -215,4 +219,5 @@ extern void server_update_port(SERVER *, unsigned short);
extern RESULTSET *serverGetList();
extern unsigned int server_map_status(char *str);
extern bool server_set_version_string(SERVER* server, const char* string);
#endif