MXS-1379: Route conflicting queries to current shard

All conflicting queries are routed to the shard which contains the
currently active database.
This commit is contained in:
Markus Mäkelä
2017-08-30 17:36:38 +03:00
parent 7cb3c68d1e
commit 63c803a818

View File

@ -496,6 +496,8 @@ char* get_shard_target_name(ROUTER_INSTANCE* router,
if (sz > 0)
{
bool conflict = false;
for (i = 0; i < sz; i++)
{
char* name;
@ -510,9 +512,11 @@ char* get_shard_target_name(ROUTER_INSTANCE* router,
/** Warn about improper usage of the router */
if (rval && strcmp(name, rval) != 0)
{
MXS_ERROR("Query targets databases on servers '%s' and '%s'. "
"Cross database queries across servers are not supported.",
rval, name);
MXS_WARNING("Query targets databases on servers '%s' and '%s'. "
"Cross database queries across servers are not supported. "
"Routing query to server with the current active database.",
rval, name);
conflict = true;
}
else if (rval == NULL)
{
@ -525,6 +529,11 @@ char* get_shard_target_name(ROUTER_INSTANCE* router,
MXS_FREE(dbnms[i]);
}
MXS_FREE(dbnms);
if (conflict)
{
return (char*)hashtable_fetch(ht, client->current_db);
}
}
/* Check if the query is a show tables query with a specific database */