MXS-1777: Add an EMAverage to the server struct, and a new slave selection criteria.
This is to support calculating the average from a session, and the slave selection criteria to be able to route based on averages. This commit, like the next one, have TODOs which you should feel free to comment on. Undecided things.
This commit is contained in:
@ -86,14 +86,15 @@ static bool rwsplit_process_router_options(Config& config, char **options)
|
||||
select_criteria_t c = GET_SELECT_CRITERIA(value);
|
||||
mxb_assert(c == LEAST_GLOBAL_CONNECTIONS ||
|
||||
c == LEAST_ROUTER_CONNECTIONS || c == LEAST_BEHIND_MASTER ||
|
||||
c == LEAST_CURRENT_OPERATIONS || c == UNDEFINED_CRITERIA);
|
||||
c == LEAST_CURRENT_OPERATIONS || c == LOWEST_RESPONSE_TIME ||
|
||||
c == UNDEFINED_CRITERIA);
|
||||
|
||||
if (c == UNDEFINED_CRITERIA)
|
||||
{
|
||||
MXS_ERROR("Unknown slave selection criteria \"%s\". "
|
||||
"Allowed values are LEAST_GLOBAL_CONNECTIONS, "
|
||||
"LEAST_ROUTER_CONNECTIONS, LEAST_BEHIND_MASTER,"
|
||||
"and LEAST_CURRENT_OPERATIONS.",
|
||||
"LEAST_ROUTER_CONNECTIONS, LEAST_BEHIND_MASTER, "
|
||||
"LEAST_CURRENT_OPERATIONS and LOWEST_RESPONSE_TIME.",
|
||||
STRCRITERIA(config.slave_selection_criteria));
|
||||
success = false;
|
||||
}
|
||||
|
@ -66,7 +66,7 @@ enum select_criteria_t
|
||||
LEAST_ROUTER_CONNECTIONS, /**< connections established by this router */
|
||||
LEAST_BEHIND_MASTER,
|
||||
LEAST_CURRENT_OPERATIONS,
|
||||
DEFAULT_CRITERIA = LEAST_CURRENT_OPERATIONS,
|
||||
LOWEST_RESPONSE_TIME,
|
||||
LAST_CRITERIA /**< not used except for an index */
|
||||
};
|
||||
|
||||
@ -103,6 +103,7 @@ static const MXS_ENUM_VALUE slave_selection_criteria_values[] =
|
||||
{"LEAST_ROUTER_CONNECTIONS", LEAST_ROUTER_CONNECTIONS},
|
||||
{"LEAST_BEHIND_MASTER", LEAST_BEHIND_MASTER},
|
||||
{"LEAST_CURRENT_OPERATIONS", LEAST_CURRENT_OPERATIONS},
|
||||
{"LOWEST_RESPONSE_TIME", LOWEST_RESPONSE_TIME},
|
||||
{NULL}
|
||||
};
|
||||
|
||||
@ -134,7 +135,9 @@ static const MXS_ENUM_VALUE master_failure_mode_values[] =
|
||||
strncmp(s,"LEAST_ROUTER_CONNECTIONS", strlen("LEAST_ROUTER_CONNECTIONS")) == 0 ? \
|
||||
LEAST_ROUTER_CONNECTIONS : ( \
|
||||
strncmp(s,"LEAST_CURRENT_OPERATIONS", strlen("LEAST_CURRENT_OPERATIONS")) == 0 ? \
|
||||
LEAST_CURRENT_OPERATIONS : UNDEFINED_CRITERIA))))
|
||||
LEAST_CURRENT_OPERATIONS : ( \
|
||||
strncmp(s,"LOWEST_RESPONSE_TIME", strlen("LOWEST_RESPONSE_TIME")) == 0 ? \
|
||||
LOWEST_RESPONSE_TIME : UNDEFINED_CRITERIA)))))
|
||||
|
||||
#define BACKEND_TYPE(b) (server_is_master((b)->backend_server) ? BE_MASTER : \
|
||||
(server_is_slave((b)->backend_server) ? BE_SLAVE : BE_UNDEFINED));
|
||||
@ -337,6 +340,9 @@ static inline const char* select_criteria_to_str(select_criteria_t type)
|
||||
case LEAST_CURRENT_OPERATIONS:
|
||||
return "LEAST_CURRENT_OPERATIONS";
|
||||
|
||||
case LOWEST_RESPONSE_TIME:
|
||||
return "LOWEST_RESPONSE_TIME";
|
||||
|
||||
default:
|
||||
return "UNDEFINED_CRITERIA";
|
||||
}
|
||||
|
Reference in New Issue
Block a user