MXS-1156: added configuration entry point for connection retry parameters.
MXS-1156: added configuration entry points for connection retry parameters. Variable names have been also changed.
This commit is contained in:
@ -230,6 +230,8 @@ MXS_MODULE* MXS_CREATE_MODULE()
|
|||||||
{"longburst", MXS_MODULE_PARAM_COUNT, DEF_LONG_BURST},
|
{"longburst", MXS_MODULE_PARAM_COUNT, DEF_LONG_BURST},
|
||||||
{"burstsize", MXS_MODULE_PARAM_SIZE, DEF_BURST_SIZE},
|
{"burstsize", MXS_MODULE_PARAM_SIZE, DEF_BURST_SIZE},
|
||||||
{"heartbeat", MXS_MODULE_PARAM_COUNT, BLR_HEARTBEAT_DEFAULT_INTERVAL},
|
{"heartbeat", MXS_MODULE_PARAM_COUNT, BLR_HEARTBEAT_DEFAULT_INTERVAL},
|
||||||
|
{"connect_retry", MXS_MODULE_PARAM_COUNT, BLR_MASTER_CONNECT_RETRY},
|
||||||
|
{"master_retry_count", MXS_MODULE_PARAM_COUNT, BLR_MASTER_RETRY_COUNT},
|
||||||
{"send_slave_heartbeat", MXS_MODULE_PARAM_BOOL, "false"},
|
{"send_slave_heartbeat", MXS_MODULE_PARAM_BOOL, "false"},
|
||||||
{
|
{
|
||||||
"binlogdir",
|
"binlogdir",
|
||||||
@ -326,7 +328,7 @@ createInstance(SERVICE *service, char **options)
|
|||||||
|
|
||||||
inst->user = MXS_STRDUP_A(service->credentials.name);
|
inst->user = MXS_STRDUP_A(service->credentials.name);
|
||||||
inst->password = MXS_STRDUP_A(service->credentials.authdata);
|
inst->password = MXS_STRDUP_A(service->credentials.authdata);
|
||||||
inst->retry_backoff = 0;
|
inst->retry_count = 0;
|
||||||
inst->m_errno = 0;
|
inst->m_errno = 0;
|
||||||
inst->m_errmsg = NULL;
|
inst->m_errmsg = NULL;
|
||||||
|
|
||||||
@ -367,6 +369,8 @@ createInstance(SERVICE *service, char **options)
|
|||||||
inst->burst_size = config_get_size(params, "burstsize");
|
inst->burst_size = config_get_size(params, "burstsize");
|
||||||
inst->binlogdir = config_copy_string(params, "binlogdir");
|
inst->binlogdir = config_copy_string(params, "binlogdir");
|
||||||
inst->heartbeat = config_get_integer(params, "heartbeat");
|
inst->heartbeat = config_get_integer(params, "heartbeat");
|
||||||
|
inst->retry_interval = config_get_integer(params, "connect_retry");
|
||||||
|
inst->retry_limit = config_get_integer(params, "master_retry_count");
|
||||||
inst->ssl_cert_verification_depth = config_get_integer(params, "ssl_cert_verification_depth");
|
inst->ssl_cert_verification_depth = config_get_integer(params, "ssl_cert_verification_depth");
|
||||||
inst->mariadb10_compat = config_get_bool(params, "mariadb10-compatibility");
|
inst->mariadb10_compat = config_get_bool(params, "mariadb10-compatibility");
|
||||||
inst->maxwell_compat = config_get_bool(params, "maxwell-compatibility");
|
inst->maxwell_compat = config_get_bool(params, "maxwell-compatibility");
|
||||||
@ -1585,7 +1589,11 @@ diagnostics(MXS_ROUTER *router, DCB *dcb)
|
|||||||
dcb_printf(dcb, "\tNumber of delayed reconnects: %d\n",
|
dcb_printf(dcb, "\tNumber of delayed reconnects: %d\n",
|
||||||
router_inst->stats.n_delayedreconnects);
|
router_inst->stats.n_delayedreconnects);
|
||||||
dcb_printf(dcb, "\tNumber of connect retries: %d\n",
|
dcb_printf(dcb, "\tNumber of connect retries: %d\n",
|
||||||
router_inst->retry_backoff);
|
router_inst->retry_count);
|
||||||
|
dcb_printf(dcb, "\tConnect retry interval: %d\n",
|
||||||
|
router_inst->retry_interval);
|
||||||
|
dcb_printf(dcb, "\tConnect retry count limit: %d\n",
|
||||||
|
router_inst->retry_limit);
|
||||||
dcb_printf(dcb, "\tCurrent binlog file: %s\n",
|
dcb_printf(dcb, "\tCurrent binlog file: %s\n",
|
||||||
router_inst->binlog_name);
|
router_inst->binlog_name);
|
||||||
dcb_printf(dcb, "\tCurrent binlog position: %lu\n",
|
dcb_printf(dcb, "\tCurrent binlog position: %lu\n",
|
||||||
|
|||||||
@ -242,8 +242,8 @@ typedef enum
|
|||||||
* BLR_BLR_MASTER_RETRY_COUNT Maximum value of retries
|
* BLR_BLR_MASTER_RETRY_COUNT Maximum value of retries
|
||||||
*/
|
*/
|
||||||
#define BLR_MASTER_BACKOFF_TIME 10
|
#define BLR_MASTER_BACKOFF_TIME 10
|
||||||
#define BLR_MASTER_CONNECT_RETRY 60
|
#define BLR_MASTER_CONNECT_RETRY "60"
|
||||||
#define BLR_MASTER_RETRY_COUNT 1000
|
#define BLR_MASTER_RETRY_COUNT "1000"
|
||||||
|
|
||||||
/* max size for error message returned to client */
|
/* max size for error message returned to client */
|
||||||
#define BINLOG_ERROR_MSG_LEN 700
|
#define BINLOG_ERROR_MSG_LEN 700
|
||||||
@ -706,7 +706,9 @@ typedef struct router_instance
|
|||||||
ROUTER_STATS stats; /*< Statistics for this router */
|
ROUTER_STATS stats; /*< Statistics for this router */
|
||||||
int active_logs;
|
int active_logs;
|
||||||
int reconnect_pending;
|
int reconnect_pending;
|
||||||
int retry_backoff;
|
int retry_interval; /*< Connect retry interval */
|
||||||
|
int retry_count; /*< Connect retry counter */
|
||||||
|
int retry_limit; /*< Retry limit */
|
||||||
time_t connect_time;
|
time_t connect_time;
|
||||||
int handling_threads;
|
int handling_threads;
|
||||||
unsigned long m_errno; /*< master response mysql errno */
|
unsigned long m_errno; /*< master response mysql errno */
|
||||||
|
|||||||
@ -224,15 +224,19 @@ static void blr_start_master(void* data)
|
|||||||
"Replication is stopped.",
|
"Replication is stopped.",
|
||||||
router->service->name,
|
router->service->name,
|
||||||
router->service->dbref->server->unique_name,
|
router->service->dbref->server->unique_name,
|
||||||
BLR_MASTER_RETRY_COUNT);
|
router->retry_limit);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Increment retry counter */
|
||||||
|
if (router->master_state != BLRM_CONNECTING)
|
||||||
|
{
|
||||||
|
router->retry_count++;
|
||||||
|
}
|
||||||
|
|
||||||
/* Force connecting state */
|
/* Force connecting state */
|
||||||
router->master_state = BLRM_CONNECTING;
|
router->master_state = BLRM_CONNECTING;
|
||||||
|
|
||||||
/* Increment retry counter */
|
|
||||||
router->retry_backoff++;
|
|
||||||
spinlock_release(&router->lock);
|
spinlock_release(&router->lock);
|
||||||
|
|
||||||
DCB* client = dcb_alloc(DCB_ROLE_INTERNAL, NULL);
|
DCB* client = dcb_alloc(DCB_ROLE_INTERNAL, NULL);
|
||||||
@ -272,7 +276,7 @@ static void blr_start_master(void* data)
|
|||||||
{
|
{
|
||||||
/* Set reconnection task */
|
/* Set reconnection task */
|
||||||
static const char master[] = "Master";
|
static const char master[] = "Master";
|
||||||
char *name = MXS_MALLOC(strlen(router->service->name) + sizeof(master));
|
char *name = (char *)MXS_MALLOC(strlen(router->service->name) + sizeof(master));
|
||||||
if (name)
|
if (name)
|
||||||
{
|
{
|
||||||
sprintf(name, "%s %s", router->service->name, master);
|
sprintf(name, "%s %s", router->service->name, master);
|
||||||
@ -393,7 +397,7 @@ blr_restart_master(ROUTER_INSTANCE *router)
|
|||||||
"Replication is stopped.",
|
"Replication is stopped.",
|
||||||
router->service->name,
|
router->service->name,
|
||||||
router->service->dbref->server->unique_name,
|
router->service->dbref->server->unique_name,
|
||||||
BLR_MASTER_RETRY_COUNT);
|
router->retry_limit);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -403,7 +407,7 @@ blr_restart_master(ROUTER_INSTANCE *router)
|
|||||||
|
|
||||||
/* Set reconnection task */
|
/* Set reconnection task */
|
||||||
static const char master[] = "Master";
|
static const char master[] = "Master";
|
||||||
char *name = MXS_MALLOC(strlen(router->service->name) + sizeof(master));
|
char *name = (char *)MXS_MALLOC(strlen(router->service->name) + sizeof(master));
|
||||||
|
|
||||||
if (name)
|
if (name)
|
||||||
{
|
{
|
||||||
@ -423,8 +427,8 @@ blr_restart_master(ROUTER_INSTANCE *router)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
/* Force unconnected state */
|
/* Force connecting state */
|
||||||
router->master_state = BLRM_UNCONNECTED;
|
router->master_state = BLRM_CONNECTING;
|
||||||
spinlock_release(&router->lock);
|
spinlock_release(&router->lock);
|
||||||
|
|
||||||
blr_start_master_in_main(router);
|
blr_start_master_in_main(router);
|
||||||
@ -494,7 +498,7 @@ blr_master_close(ROUTER_INSTANCE *router)
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Mark this master connection for a delayed reconnect, used during
|
* Mark this master connection for a delayed reconnect, used during
|
||||||
* error recovery to cause a reconnect after 60 seconds.
|
* error recovery to cause a reconnect after router->retry_interval seconds.
|
||||||
*
|
*
|
||||||
* @param router The router instance
|
* @param router The router instance
|
||||||
*/
|
*/
|
||||||
@ -502,7 +506,7 @@ void
|
|||||||
blr_master_delayed_connect(ROUTER_INSTANCE *router)
|
blr_master_delayed_connect(ROUTER_INSTANCE *router)
|
||||||
{
|
{
|
||||||
static const char master[] = "Master Recovery";
|
static const char master[] = "Master Recovery";
|
||||||
char *name = (char*)MXS_MALLOC(strlen(router->service->name) + sizeof(master))
|
char *name = (char *)MXS_MALLOC(strlen(router->service->name) + sizeof(master));
|
||||||
|
|
||||||
if (name)
|
if (name)
|
||||||
{
|
{
|
||||||
@ -510,7 +514,7 @@ blr_master_delayed_connect(ROUTER_INSTANCE *router)
|
|||||||
hktask_oneshot(name,
|
hktask_oneshot(name,
|
||||||
blr_start_master_in_main,
|
blr_start_master_in_main,
|
||||||
router,
|
router,
|
||||||
BLR_MASTER_CONNECT_RETRY);
|
router->retry_interval);
|
||||||
MXS_FREE(name);
|
MXS_FREE(name);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -2932,7 +2936,7 @@ static void blr_start_master_registration(ROUTER_INSTANCE *router, GWBUF *buf)
|
|||||||
blr_register_send_command(router,
|
blr_register_send_command(router,
|
||||||
"SHOW VARIABLES LIKE 'SERVER_ID'",
|
"SHOW VARIABLES LIKE 'SERVER_ID'",
|
||||||
BLRM_SERVERID);
|
BLRM_SERVERID);
|
||||||
router->retry_backoff = 0;
|
router->retry_count = 0;
|
||||||
break;
|
break;
|
||||||
case BLRM_SERVERID:
|
case BLRM_SERVERID:
|
||||||
// If set heartbeat is not being sent, next state is BLRM_HBPERIOD
|
// If set heartbeat is not being sent, next state is BLRM_HBPERIOD
|
||||||
@ -3535,18 +3539,18 @@ static bool blr_handle_missing_files(ROUTER_INSTANCE *router,
|
|||||||
static int blr_check_connect_retry(ROUTER_INSTANCE *router)
|
static int blr_check_connect_retry(ROUTER_INSTANCE *router)
|
||||||
{
|
{
|
||||||
/* Stop reconnection to master */
|
/* Stop reconnection to master */
|
||||||
if (router->retry_backoff >= BLR_MASTER_RETRY_COUNT)
|
if (router->retry_count >= router->retry_limit)
|
||||||
{
|
{
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Return the interval for next reconnect */
|
/* Return the interval for next reconnect */
|
||||||
if (router->retry_backoff >= BLR_MASTER_CONNECT_RETRY / BLR_MASTER_BACKOFF_TIME)
|
if (router->retry_count >= router->retry_interval / BLR_MASTER_BACKOFF_TIME)
|
||||||
{
|
{
|
||||||
return BLR_MASTER_CONNECT_RETRY;
|
return router->retry_interval;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
return BLR_MASTER_BACKOFF_TIME * (1 + router->retry_backoff);
|
return BLR_MASTER_BACKOFF_TIME * (1 + router->retry_count);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1343,7 +1343,7 @@ blr_slave_send_slave_status(ROUTER_INSTANCE *router,
|
|||||||
memcpy((char *)ptr, column, col_len); // Result string
|
memcpy((char *)ptr, column, col_len); // Result string
|
||||||
ptr += col_len;
|
ptr += col_len;
|
||||||
|
|
||||||
sprintf(column, "%d", 60); // Connect retry
|
sprintf(column, "%d", router->retry_interval); // Connect retry
|
||||||
col_len = strlen(column);
|
col_len = strlen(column);
|
||||||
*ptr++ = col_len; // Length of result string
|
*ptr++ = col_len; // Length of result string
|
||||||
memcpy((char *)ptr, column, col_len); // Result string
|
memcpy((char *)ptr, column, col_len); // Result string
|
||||||
@ -1632,7 +1632,7 @@ blr_slave_send_slave_status(ROUTER_INSTANCE *router,
|
|||||||
ptr += col_len;
|
ptr += col_len;
|
||||||
|
|
||||||
/* Master_Retry_Count */
|
/* Master_Retry_Count */
|
||||||
sprintf(column, "%d", 1000);
|
sprintf(column, "%d", router->retry_limit);
|
||||||
col_len = strlen(column);
|
col_len = strlen(column);
|
||||||
*ptr++ = col_len; // Length of result string
|
*ptr++ = col_len; // Length of result string
|
||||||
memcpy((char *)ptr, column, col_len); // Result string
|
memcpy((char *)ptr, column, col_len); // Result string
|
||||||
@ -3632,7 +3632,7 @@ blr_start_slave(ROUTER_INSTANCE* router, ROUTER_SLAVE* slave)
|
|||||||
|
|
||||||
spinlock_acquire(&router->lock);
|
spinlock_acquire(&router->lock);
|
||||||
router->master_state = BLRM_UNCONNECTED;
|
router->master_state = BLRM_UNCONNECTED;
|
||||||
router->retry_backoff = 0;
|
router->retry_count = 0;
|
||||||
spinlock_release(&router->lock);
|
spinlock_release(&router->lock);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
Reference in New Issue
Block a user