get session transation state from backend via session track mechanism
This commit is contained in:
@ -147,6 +147,7 @@ const char CN_USER[] = "user";
|
||||
const char CN_USERS[] = "users";
|
||||
const char CN_VERSION_STRING[] = "version_string";
|
||||
const char CN_WEIGHTBY[] = "weightby";
|
||||
const char CN_SESSION_TRACK_TRX_STATE[] = "session_track_trx_state";
|
||||
|
||||
typedef struct duplicate_context
|
||||
{
|
||||
@ -233,6 +234,7 @@ const char *config_listener_params[] =
|
||||
CN_SSL_VERSION,
|
||||
CN_SSL_CERT_VERIFY_DEPTH,
|
||||
CN_SSL_VERIFY_PEER_CERTIFICATE,
|
||||
CN_SESSION_TRACK_TRX_STATE,
|
||||
NULL
|
||||
};
|
||||
|
||||
@ -3369,7 +3371,7 @@ int create_new_listener(CONFIG_CONTEXT *obj)
|
||||
char *socket = config_get_value(obj->parameters, CN_SOCKET);
|
||||
char *authenticator = config_get_value(obj->parameters, CN_AUTHENTICATOR);
|
||||
char *authenticator_options = config_get_value(obj->parameters, CN_AUTHENTICATOR_OPTIONS);
|
||||
|
||||
bool session_track_trx_state = config_get_bool(obj->parameters, CN_SESSION_TRACK_TRX_STATE);
|
||||
if (raw_service_name && protocol && (socket || port))
|
||||
{
|
||||
char service_name[strlen(raw_service_name) + 1];
|
||||
@ -3391,7 +3393,7 @@ int create_new_listener(CONFIG_CONTEXT *obj)
|
||||
else
|
||||
{
|
||||
serviceCreateListener(service, obj->object, protocol, socket, 0,
|
||||
authenticator, authenticator_options, ssl_info);
|
||||
authenticator, authenticator_options, ssl_info, session_track_trx_state);
|
||||
}
|
||||
}
|
||||
|
||||
@ -3408,7 +3410,7 @@ int create_new_listener(CONFIG_CONTEXT *obj)
|
||||
else
|
||||
{
|
||||
serviceCreateListener(service, obj->object, protocol, address, atoi(port),
|
||||
authenticator, authenticator_options, ssl_info);
|
||||
authenticator, authenticator_options, ssl_info, session_track_trx_state);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -795,7 +795,7 @@ bool runtime_create_listener(SERVICE *service, const char *name, const char *add
|
||||
const char *port, const char *proto, const char *auth,
|
||||
const char *auth_opt, const char *ssl_key,
|
||||
const char *ssl_cert, const char *ssl_ca,
|
||||
const char *ssl_version, const char *ssl_depth)
|
||||
const char *ssl_version, const char *ssl_depth, bool session_track_trx_state)
|
||||
{
|
||||
|
||||
if (addr == NULL || strcasecmp(addr, CN_DEFAULT) == 0)
|
||||
@ -842,7 +842,7 @@ bool runtime_create_listener(SERVICE *service, const char *name, const char *add
|
||||
{
|
||||
const char *print_addr = addr ? addr : "::";
|
||||
SERV_LISTENER *listener = serviceCreateListener(service, name, proto, addr,
|
||||
u_port, auth, auth_opt, ssl);
|
||||
u_port, auth, auth_opt, ssl, session_track_trx_state);
|
||||
|
||||
if (listener && listener_serialize(listener))
|
||||
{
|
||||
@ -1961,11 +1961,12 @@ bool runtime_create_listener_from_json(SERVICE* service, json_t* json)
|
||||
const char* ssl_ca_cert = get_string_or_null(json, MXS_JSON_PTR_PARAM_SSL_CA_CERT);
|
||||
const char* ssl_version = get_string_or_null(json, MXS_JSON_PTR_PARAM_SSL_VERSION);
|
||||
const char* ssl_cert_verify_depth = get_string_or_null(json, MXS_JSON_PTR_PARAM_SSL_CERT_VERIFY_DEPTH);
|
||||
bool session_track_trx_state = is_bool_or_null(json, MXS_JSON_PTR_PARAM_SESSION_TRACK_TRX_STATE);
|
||||
|
||||
rval = runtime_create_listener(service, id, address, port.c_str(), protocol,
|
||||
authenticator, authenticator_options,
|
||||
ssl_key, ssl_cert, ssl_ca_cert, ssl_version,
|
||||
ssl_cert_verify_depth);
|
||||
ssl_cert_verify_depth, session_track_trx_state);
|
||||
}
|
||||
|
||||
return rval;
|
||||
|
@ -166,7 +166,8 @@ bool runtime_create_listener(SERVICE *service, const char *name, const char *add
|
||||
const char *port, const char *proto, const char *auth,
|
||||
const char *auth_opt, const char *ssl_key,
|
||||
const char *ssl_cert, const char *ssl_ca,
|
||||
const char *ssl_version, const char *ssl_depth);
|
||||
const char *ssl_version, const char *ssl_depth,
|
||||
bool session_track_trx_state);
|
||||
|
||||
/**
|
||||
* @brief Destroy a listener
|
||||
|
@ -84,7 +84,7 @@ bool service_thread_init();
|
||||
SERV_LISTENER* serviceCreateListener(SERVICE *service, const char *name,
|
||||
const char *protocol, const char *address,
|
||||
unsigned short port, const char *authenticator,
|
||||
const char *options, SSL_LISTENER *ssl);
|
||||
const char *options, SSL_LISTENER *ssl, bool session_track_trx_state);
|
||||
|
||||
void serviceRemoveBackend(SERVICE *service, const SERVER *server);
|
||||
|
||||
|
@ -62,7 +62,7 @@ static RSA *tmp_rsa_callback(SSL *s, int is_export, int keylength);
|
||||
SERV_LISTENER *
|
||||
listener_alloc(struct service* service, const char* name, const char *protocol,
|
||||
const char *address, unsigned short port, const char *authenticator,
|
||||
const char* auth_options, SSL_LISTENER *ssl)
|
||||
const char* auth_options, SSL_LISTENER *ssl, bool session_track_trx_state)
|
||||
{
|
||||
char *my_address = NULL;
|
||||
if (address)
|
||||
@ -135,6 +135,7 @@ listener_alloc(struct service* service, const char* name, const char *protocol,
|
||||
proto->users = NULL;
|
||||
proto->next = NULL;
|
||||
proto->auth_instance = auth_instance;
|
||||
proto->session_track_trx_state = session_track_trx_state;
|
||||
spinlock_init(&proto->lock);
|
||||
|
||||
return proto;
|
||||
|
@ -755,10 +755,10 @@ static void service_add_listener(SERVICE* service, SERV_LISTENER* proto)
|
||||
*/
|
||||
SERV_LISTENER* serviceCreateListener(SERVICE *service, const char *name, const char *protocol,
|
||||
const char *address, unsigned short port, const char *authenticator,
|
||||
const char *options, SSL_LISTENER *ssl)
|
||||
const char *options, SSL_LISTENER *ssl, bool session_track_trx_state)
|
||||
{
|
||||
SERV_LISTENER *proto = listener_alloc(service, name, protocol, address,
|
||||
port, authenticator, options, ssl);
|
||||
port, authenticator, options, ssl, session_track_trx_state);
|
||||
|
||||
if (proto)
|
||||
{
|
||||
|
@ -71,7 +71,7 @@ test1()
|
||||
ss_dfprintf(stderr, "\t..done\nAdding protocol testprotocol.");
|
||||
set_libdir(MXS_STRDUP_A("../../modules/authenticator/MySQLAuth/"));
|
||||
ss_info_dassert(serviceCreateListener(service, "TestProtocol", "testprotocol",
|
||||
"localhost", 9876, "MySQLAuth", NULL, NULL),
|
||||
"localhost", 9876, "MySQLAuth", NULL, NULL, false),
|
||||
"Add Protocol should succeed");
|
||||
ss_info_dassert(0 != serviceHasListener(service, "TestProtocol", "testprotocol", "localhost", 9876),
|
||||
"Service should have new protocol as requested");
|
||||
|
Reference in New Issue
Block a user