- Enviado
- 27 de septiembre de 2026 a las 6:14 UTC
- Autor
- Kamo
- Commit
- 279a389
El chat ha estado fallando de dos maneras que un miembro nota de inmediato: abrir una conversación mostró "No podría cargar mensajes" hasta que Retry fue presionado, y un mensaje enviado a veces nunca llegó. Ambos fueron MediaService respondiendo 500 con YugabyteDB SQLState 40001, "Restart read required" — Se registró diariamente en ambas cápsulas, y cada 500 la web BFF grabó esta semana líneas con una. Yugabyte reinicia una lectura gratuita sólo cuando es la declaración FIRST de su transacción. El historial de carga controla el acceso en su tercera declaración leyendo la fila de membresía del callador — la fila que abre las marcas de conversación leídas en el mismo instante. Un mensaje escribe el mensaje y entonces lee la lista y el dominio del org en la misma transacción. O leer una reunión seguida escrito un momento antes fracasó toda la solicitud; un momento más tarde se había resuelto la escritura, que es Por qué Retry siempre funcionó. - Las solicitudes de la ventana de chat (enviar, historia, marcador, lista de chat, editar, caras, miembros, los recibos) llevan @RetryOnDbConflict, y sus captura-todos permiten un conflicto Para que el asesor pueda volver a operarlo en una nueva transacción. Tragadas en 500 era invisible para la retry. Seguro: todo lo que un envío anuncia es post-commit. - La lectura de marca ya no reescribirá la fila de membresía cuando el puntero ya está allí (ChatReadPointerRepository, un UPDATE protegido). Se llamaba varias veces por abierto, y cada reescritura fue una oportunidad para la propia carga de historia del miembro o enviar a fracasar. El recibo de lectura sigue saliendo como antes. - Un envío puede llevar un clienteMessageId (ChatSendLedger, Redis): una reinicia de un envío que ya comprometido es contestado con la respuesta de ese envío, y uno todavía en vuelo con 409 SEND IN PROGRESS, por lo que el cliente puede volver a entrar sin publicar un mensaje dos veces. Fails open. Un ratchet ********** mantiene cada manipulador de chat @Transactional al la retórica y la retórica a una captura que deja salir el conflicto. MediaControllerDbConflictTest replays el fracaso de la producción a través de un verdadero proxy: el intento conflictivo retrocede, un segundo transacción se compromete una vez, y nada se anuncia para el intento que falló. Pasan 1384 pruebas.
