Hemos tenido un problema recurrente en nuestro foro de Discourse durante un tiempo y finalmente logramos identificarlo y reproducirlo de manera fiable.
Estos son los pasos para reproducirlo:
Tener un tema con miles de respuestas.
Marcar con un marcador (bookmark) una publicación dentro de ese tema.
Abrir el tema.
El tema ahora tarda mucho en cargar. En algunos casos, la carga se agota y recibimos un error de Nginx en su lugar (502 Bad Gateway).
Aquí hay algunos tiempos de carga aproximados de nuestro foro:
Para un tema con alrededor de 1.000 respuestas, el tiempo de carga adicional es de unos pocos segundos después de crear el marcador. Es notable, pero no representa un problema grave.
Para un tema con alrededor de 4.000 respuestas, el tiempo de carga suele ser de 20 a 30 segundos y, a veces, se agota el tiempo en lugar de cargar la página correctamente.
Para un tema con más de 9.000 respuestas, la mayoría de las veces se agota el tiempo. En algunos casos carga, pero solo después de más de 30 segundos.
Cabe señalar que estos temas cargan sin ningún problema si no tienen marcadores. El problema solo ocurre para los usuarios que tienen marcadores en un tema determinado y, tan pronto como eliminan el marcador, el tema vuelve a cargar con normalidad.
Si no es mucha molestia, ¿podrías intentar configurar una alarma programada al establecer el marcador en el paso 2 de la descripción de la reproducción y ver si algo cambia? Eso es lo que finalmente hizo que fuera reproducible para mí (específicamente, configurar una alarma para el “lunes” en mi caso).
Esto hizo que mi solicitud .json relacionada con el ID de la publicación marcada comenzara a devolver 302 después de intentar durante 30 segundos, como se ve en la imagen a continuación. (ocurre cuando hago clic en el enlace del marcador en mi menú de perfil).
Por coincidencia, también noté que las consultas de búsqueda comenzaron a exhibir un comportamiento similar, aunque solo ralentizándose enormemente, al buscar cualquier cosa en cualquier subformulario, incluidos aquellos sin publicaciones marcadas en absoluto.
[Imagen censurada de consultas de búsqueda lentas desde las herramientas de desarrollo de Chromium, ya que solo se permitió 1 incrustación]
Por otras experiencias, me parece que huele a algún tipo de problema de SQL N+1, pero no estoy lo suficientemente versado ni en el código de Discourse ni en Ruby mismo para saber si quizás un modelo JSON cíclico o algo similar se presentaría de la misma manera.