Periodicamente, as tentativas de conexão com o servidor MySQL de 2ª geração recebem este erro:
OperationalError: (2062, 'Cloud SQL socket open failed with error: Transport endpoint is not connected')
Isso persistirá por cerca de 10 minutos e depois desaparecerá.
A única referência a esse erro em conjunto com o Cloud SQL que encontrei é que ele pode estar relacionado a limites de conexão (https://groups.google.com/d/msg/google-cloud-sql-discuss/sdeD17oDBOQ/wtTewl4-EgAJ), mas há muito pouco acontecendo com a instância fora de uma tarefa TaskQueue, então acho improvável que estejamos atingindo o limite de 12 por instância (e definitivamente não o limite geral de 4k).
O código que causa essa exceção usa as mesmas configurações de banco de dados que o restante do aplicativo e está simplesmente tentando SELECT
uma linha por chave primária (portanto, uma pequena consulta).
Nos logs do banco de dados, há muitas entradas do erro como segue.
[Note] Aborted connection 39643 to db: 'my_schema' user: 'root' host: 'cloudsqlproxy~<instance_ip>' (Got an error reading communication packets)
mas não tenho certeza se eles estão relacionados, pois ocorrem de forma bastante consistente ao longo do dia e o erro acima ocorre apenas em um determinado horário por cerca de 10 minutos.
Isso só começou após a atualização para o Cloud SQL de segunda geração.
Alguém mais viu isso ou sabe mais alguma informação?
Responder1
Acontece que a origem disso foram os limites de conexão, conforme sugerido originalmente pelo bate-papo dos Grupos do Google vinculado na pergunta.
O bug apareceu porque a API Pipelines usa webapp enquanto o resto do aplicativo usa Django. Como o Django fecha as conexões para nós, não havia código para lidar com isso manualmente, mas as rotas que passavam pelo webapp e acessavam o banco de dados (usando o código de conexão do Django) as deixavam abertas, resultando no limite eventualmente atingido.