On Sunday, June 17, 2018 at 9:41:57 AM UTC-7, Ian Murray wrote:
>
> Background
>
> We're currently running an Aurora MySQL cluster in AWS. This cluster 
> consists of one writer and several read-replicas. Whenever the writer 
> fails-over, one of the readers gets promoted to writer and the writer 
> becomes a reader. The way one connects to this cluster is via two different 
> endpoints, a writer endpoint (which obviously also allows reading) and a 
> read-only endpoint. These endpoints basically translate to an instance's ip 
> address whenever one connects. For the read-only endpoint, amazon 
> apparently round-robins between the read replicas.
>
> The problem
>
> If the write instance fails, aws promotes one of the read replicas to a 
> writer, meaning the old instance will become a reader. Now, when sequel 
> connects to the write endpoint, it connects to a write instance. If this 
> instance fails, eventually sequel will reattempt to execute write 
> statements to this instance, which has now become a read-only instance. The 
> instance will error with the message The MySQL server is running with the 
> --read-only option so it cannot execute this statement. The problem is 
> that sequel does not recongnize this as a disconnect error, so it keeps 
> trying to execute commands which fail.
>
> What should happen
>
> I would expect sequel to attempt to reconnect to the cluster's write 
> endpoint after receiving an error like this, which should solve the issue, 
> since aws would route the connection to the new write instance.
>
> How I think this can be solved
>
> Adding the error to 
> https://github.com/jeremyevans/sequel/blob/master/lib/sequel/adapters/utils/mysql_mysql2.rb#L12-L20
>  
> should get rid of the issue. Unfortunately, I'm not quite sure how an 
> Aurora Postgres cluster behaves in the same situation. I hope someone can 
> shed some light if they have encountered this in a Postgres cluster.
>
> I prefer to ask about this here before attempting to submit a PR about it.
>

I think treating the error as a disconnect error makes sense and have made 
the change locally.  It should be pushed to GitHub tomorrow after I have a 
chance to do more thorough testing.

Thanks,
Jeremy

-- 
You received this message because you are subscribed to the Google Groups 
"sequel-talk" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at https://groups.google.com/group/sequel-talk.
For more options, visit https://groups.google.com/d/optout.

Reply via email to