Abstract server active checks
The checks for the server active status are now hidden behind a macro. This allows for the conditions of the activity to change without having to alter the code that uses it.
This commit is contained in:
@ -140,6 +140,11 @@ typedef struct server
|
|||||||
#define SERVER_STALE_SLAVE 0x2000 /**<< Slave status is possible even without a master */
|
#define SERVER_STALE_SLAVE 0x2000 /**<< Slave status is possible even without a master */
|
||||||
#define SERVER_RELAY_MASTER 0x4000 /**<< Server is a relay master */
|
#define SERVER_RELAY_MASTER 0x4000 /**<< Server is a relay master */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Is the server valid and active
|
||||||
|
*/
|
||||||
|
#define SERVER_IS_ACTIVE(server) (server->is_active)
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Is the server running - the macro returns true if the server is marked as running
|
* Is the server running - the macro returns true if the server is marked as running
|
||||||
* regardless of it's state as a master or slave
|
* regardless of it's state as a master or slave
|
||||||
|
@ -105,7 +105,7 @@ typedef struct server_ref_t
|
|||||||
} SERVER_REF;
|
} SERVER_REF;
|
||||||
|
|
||||||
/** Macro to check whether a SERVER_REF is active */
|
/** Macro to check whether a SERVER_REF is active */
|
||||||
#define SERVER_REF_IS_ACTIVE(ref) (ref->active)
|
#define SERVER_REF_IS_ACTIVE(ref) (ref->active && SERVER_IS_ACTIVE(ref->server))
|
||||||
|
|
||||||
#define SERVICE_MAX_RETRY_INTERVAL 3600 /*< The maximum interval between service start retries */
|
#define SERVICE_MAX_RETRY_INTERVAL 3600 /*< The maximum interval between service start retries */
|
||||||
|
|
||||||
|
@ -250,6 +250,16 @@ server_get_persistent(SERVER *server, char *user, const char *protocol)
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static inline SERVER* next_active_server(SERVER *server)
|
||||||
|
{
|
||||||
|
while (server && !server->is_active)
|
||||||
|
{
|
||||||
|
server = server->next;
|
||||||
|
}
|
||||||
|
|
||||||
|
return server;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Find a server with the specified name
|
* @brief Find a server with the specified name
|
||||||
*
|
*
|
||||||
@ -259,16 +269,17 @@ server_get_persistent(SERVER *server, char *user, const char *protocol)
|
|||||||
SERVER * server_find_by_unique_name(const char *name)
|
SERVER * server_find_by_unique_name(const char *name)
|
||||||
{
|
{
|
||||||
spinlock_acquire(&server_spin);
|
spinlock_acquire(&server_spin);
|
||||||
SERVER *server = allServers;
|
SERVER *server = next_active_server(allServers);
|
||||||
|
|
||||||
while (server)
|
while (server)
|
||||||
{
|
{
|
||||||
if (server->is_active && 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 = next_active_server(server->next);
|
||||||
}
|
}
|
||||||
|
|
||||||
spinlock_release(&server_spin);
|
spinlock_release(&server_spin);
|
||||||
|
|
||||||
return server;
|
return server;
|
||||||
@ -284,19 +295,20 @@ SERVER * server_find_by_unique_name(const char *name)
|
|||||||
SERVER *
|
SERVER *
|
||||||
server_find(char *servname, unsigned short port)
|
server_find(char *servname, unsigned short port)
|
||||||
{
|
{
|
||||||
SERVER *server;
|
|
||||||
|
|
||||||
spinlock_acquire(&server_spin);
|
spinlock_acquire(&server_spin);
|
||||||
server = allServers;
|
SERVER *server = next_active_server(allServers);
|
||||||
|
|
||||||
while (server)
|
while (server)
|
||||||
{
|
{
|
||||||
if (server->is_active && strcmp(server->name, servname) == 0 && server->port == port)
|
if (strcmp(server->name, servname) == 0 && server->port == port)
|
||||||
{
|
{
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
server = server->next;
|
server = next_active_server(server->next);
|
||||||
}
|
}
|
||||||
|
|
||||||
spinlock_release(&server_spin);
|
spinlock_release(&server_spin);
|
||||||
|
|
||||||
return server;
|
return server;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -327,18 +339,15 @@ printServer(SERVER *server)
|
|||||||
void
|
void
|
||||||
printAllServers()
|
printAllServers()
|
||||||
{
|
{
|
||||||
SERVER *server;
|
|
||||||
|
|
||||||
spinlock_acquire(&server_spin);
|
spinlock_acquire(&server_spin);
|
||||||
server = allServers;
|
SERVER *server = next_active_server(allServers);
|
||||||
|
|
||||||
while (server)
|
while (server)
|
||||||
{
|
{
|
||||||
if (server->is_active)
|
printServer(server);
|
||||||
{
|
server = next_active_server(server->next);
|
||||||
printServer(server);
|
|
||||||
}
|
|
||||||
server = server->next;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
spinlock_release(&server_spin);
|
spinlock_release(&server_spin);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -351,18 +360,15 @@ printAllServers()
|
|||||||
void
|
void
|
||||||
dprintAllServers(DCB *dcb)
|
dprintAllServers(DCB *dcb)
|
||||||
{
|
{
|
||||||
SERVER *server;
|
|
||||||
|
|
||||||
spinlock_acquire(&server_spin);
|
spinlock_acquire(&server_spin);
|
||||||
server = allServers;
|
SERVER *server = next_active_server(allServers);
|
||||||
|
|
||||||
while (server)
|
while (server)
|
||||||
{
|
{
|
||||||
if (server->is_active)
|
dprintServer(dcb, server);
|
||||||
{
|
server = next_active_server(server->next);
|
||||||
dprintServer(dcb, server);
|
|
||||||
}
|
|
||||||
server = server->next;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
spinlock_release(&server_spin);
|
spinlock_release(&server_spin);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -375,27 +381,23 @@ dprintAllServers(DCB *dcb)
|
|||||||
void
|
void
|
||||||
dprintAllServersJson(DCB *dcb)
|
dprintAllServersJson(DCB *dcb)
|
||||||
{
|
{
|
||||||
SERVER *server;
|
|
||||||
char *stat;
|
char *stat;
|
||||||
int len = 0;
|
int len = 0;
|
||||||
int el = 1;
|
int el = 1;
|
||||||
|
|
||||||
spinlock_acquire(&server_spin);
|
spinlock_acquire(&server_spin);
|
||||||
server = allServers;
|
SERVER *server = next_active_server(allServers);
|
||||||
while (server)
|
while (server)
|
||||||
{
|
{
|
||||||
server = server->next;
|
server = next_active_server(server->next);
|
||||||
len++;
|
len++;
|
||||||
}
|
}
|
||||||
server = allServers;
|
|
||||||
|
server = next_active_server(allServers);
|
||||||
|
|
||||||
dcb_printf(dcb, "[\n");
|
dcb_printf(dcb, "[\n");
|
||||||
while (server)
|
while (server)
|
||||||
{
|
{
|
||||||
if (!server->is_active)
|
|
||||||
{
|
|
||||||
server = server->next;
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
dcb_printf(dcb, " {\n \"server\": \"%s\",\n",
|
dcb_printf(dcb, " {\n \"server\": \"%s\",\n",
|
||||||
server->name);
|
server->name);
|
||||||
stat = server_status(server);
|
stat = server_status(server);
|
||||||
@ -459,9 +461,10 @@ dprintAllServersJson(DCB *dcb)
|
|||||||
{
|
{
|
||||||
dcb_printf(dcb, " }\n");
|
dcb_printf(dcb, " }\n");
|
||||||
}
|
}
|
||||||
server = server->next;
|
server = next_active_server(server->next);
|
||||||
el++;
|
el++;
|
||||||
}
|
}
|
||||||
|
|
||||||
dcb_printf(dcb, "]\n");
|
dcb_printf(dcb, "]\n");
|
||||||
spinlock_release(&server_spin);
|
spinlock_release(&server_spin);
|
||||||
}
|
}
|
||||||
@ -476,7 +479,7 @@ dprintAllServersJson(DCB *dcb)
|
|||||||
void
|
void
|
||||||
dprintServer(DCB *dcb, SERVER *server)
|
dprintServer(DCB *dcb, SERVER *server)
|
||||||
{
|
{
|
||||||
if (!server->is_active)
|
if (!SERVER_IS_ACTIVE(server))
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -610,17 +613,8 @@ dprintPersistentDCBs(DCB *pdcb, SERVER *server)
|
|||||||
void
|
void
|
||||||
dListServers(DCB *dcb)
|
dListServers(DCB *dcb)
|
||||||
{
|
{
|
||||||
SERVER *server;
|
|
||||||
char *stat;
|
|
||||||
|
|
||||||
spinlock_acquire(&server_spin);
|
spinlock_acquire(&server_spin);
|
||||||
server = allServers;
|
SERVER *server = next_active_server(allServers);
|
||||||
|
|
||||||
while (server && !server->is_active)
|
|
||||||
{
|
|
||||||
server = server->next;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool have_servers = false;
|
bool have_servers = false;
|
||||||
|
|
||||||
if (server)
|
if (server)
|
||||||
@ -635,17 +629,15 @@ dListServers(DCB *dcb)
|
|||||||
|
|
||||||
while (server)
|
while (server)
|
||||||
{
|
{
|
||||||
if (server->is_active)
|
char *stat = server_status(server);
|
||||||
{
|
dcb_printf(dcb, "%-18s | %-15s | %5d | %11d | %s\n",
|
||||||
stat = server_status(server);
|
server->unique_name, server->name,
|
||||||
dcb_printf(dcb, "%-18s | %-15s | %5d | %11d | %s\n",
|
server->port,
|
||||||
server->unique_name, server->name,
|
server->stats.n_current, stat);
|
||||||
server->port,
|
MXS_FREE(stat);
|
||||||
server->stats.n_current, stat);
|
server = next_active_server(server->next);
|
||||||
MXS_FREE(stat);
|
|
||||||
}
|
|
||||||
server = server->next;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (have_servers)
|
if (have_servers)
|
||||||
{
|
{
|
||||||
dcb_printf(dcb, "-------------------+-----------------+-------+-------------+--------------------\n");
|
dcb_printf(dcb, "-------------------+-----------------+-------+-------------+--------------------\n");
|
||||||
@ -935,7 +927,7 @@ serverRowCallback(RESULTSET *set, void *data)
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
(*rowno)++;
|
(*rowno)++;
|
||||||
if (server->is_active)
|
if (SERVER_IS_ACTIVE(server))
|
||||||
{
|
{
|
||||||
row = resultset_make_row(set);
|
row = resultset_make_row(set);
|
||||||
resultset_row_set(row, 0, server->unique_name);
|
resultset_row_set(row, 0, server->unique_name);
|
||||||
|
@ -1365,7 +1365,7 @@ void dprintService(DCB *dcb, SERVICE *service)
|
|||||||
dcb_printf(dcb, "\tBackend databases:\n");
|
dcb_printf(dcb, "\tBackend databases:\n");
|
||||||
while (server)
|
while (server)
|
||||||
{
|
{
|
||||||
if (server->active && server->server->is_active)
|
if (SERVER_REF_IS_ACTIVE(server))
|
||||||
{
|
{
|
||||||
dcb_printf(dcb, "\t\t%s:%d Protocol: %s\n", server->server->name,
|
dcb_printf(dcb, "\t\t%s:%d Protocol: %s\n", server->server->name,
|
||||||
server->server->port, server->server->protocol);
|
server->server->port, server->server->protocol);
|
||||||
|
Reference in New Issue
Block a user