Fixed authentication failing due to unknown database even though it exists
When the shard maps are being updated they are set into a stale state. This means that one client connection is updating the shard maps and the information in the shard map is not the most recent. This does mean that the information is valid and authentication should succeed even if the shard map is stale.
This commit is contained in:
@ -1805,7 +1805,7 @@ bool send_database_list(ROUTER_INSTANCE* router, ROUTER_CLIENT_SES* client)
|
||||
{
|
||||
bool rval = false;
|
||||
spinlock_acquire(&client->shardmap->lock);
|
||||
if (client->shardmap->state == SHMAP_READY)
|
||||
if (client->shardmap->state != SHMAP_UNINIT)
|
||||
{
|
||||
struct string_array strarray;
|
||||
const int size = hashtable_size(client->shardmap->hash);
|
||||
@ -1888,11 +1888,6 @@ static int routeQuery(
|
||||
char errbuf[26+MYSQL_DATABASE_MAXLEN];
|
||||
CHK_CLIENT_RSES(router_cli_ses);
|
||||
|
||||
/** Dirty read for quick check if router is closed. */
|
||||
if (router_cli_ses->rses_closed)
|
||||
{
|
||||
rses_is_closed = true;
|
||||
}
|
||||
ss_dassert(!GWBUF_IS_TYPE_UNDEFINED(querybuf));
|
||||
|
||||
if (!rses_begin_locked_router_action(router_cli_ses))
|
||||
@ -4398,7 +4393,7 @@ int process_show_shards(ROUTER_CLIENT_SES* rses)
|
||||
int rval = 0;
|
||||
|
||||
spinlock_acquire(&rses->shardmap->lock);
|
||||
if(rses->shardmap->state == SHMAP_READY)
|
||||
if(rses->shardmap->state != SHMAP_UNINIT)
|
||||
{
|
||||
HASHITERATOR* iter = hashtable_iterator(rses->shardmap->hash);
|
||||
struct shard_list sl;
|
||||
@ -4465,7 +4460,7 @@ bool handle_default_db(ROUTER_CLIENT_SES *router_cli_ses)
|
||||
char* target = NULL;
|
||||
|
||||
spinlock_acquire(&router_cli_ses->shardmap->lock);
|
||||
if(router_cli_ses->shardmap->state == SHMAP_READY)
|
||||
if(router_cli_ses->shardmap->state != SHMAP_UNINIT)
|
||||
{
|
||||
target = hashtable_fetch(router_cli_ses->shardmap->hash, router_cli_ses->connect_db);
|
||||
}
|
||||
|
Reference in New Issue
Block a user