Exclusividad de canal: un lote está en Auction o Market; nunca en ambos
La guardia atómica que evita la doble publicación y por qué es importante que los compradores vean el mismo lote en dos lugares.
Si el mismo lote pudiera publicarse en el mercado y cotizarse en una subasta a la vez, la plataforma estaría mintiendo a dos grupos de compradores diferentes sobre la disponibilidad. El comprador que gana la subasta espera quedarse con el lote. El comprador que encuentra "Buy now" en el mercado espera lo mismo. Uno de ellos se va a decepcionar y siguen las disputas.
El guardia
Los RPC de publicación (publicación en el mercado, creación de subasta) comparten una protección de base de datos atómica: una fila por lotes lleva una enumeración published_channel (none / market / auction), y los RPC utilizan una actualización CAS (comparar e intercambiar) que solo se realiza correctamente si el canal actual es none. Si el intercambio falla (lo que significa que el otro canal llegó primero), el segundo RPC devuelve un error y retrocede.
Por qué atómico
Sin atomicidad, dos solicitudes de "publicación" simultáneas podrían leer published_channel = none y ambas escribir su propio canal. El TAS garantiza que exactamente uno gane. Atómico a nivel de base de datos, no a nivel de aplicación, porque la aplicación puede competir contra sí misma a través de dos procesos de servidor, y el único punto seguro y verdadero es la fila de la base de datos.
Interruptor de canal
Si un lote necesita cambiar de canal (no se vendió en una subasta, quiere volver a cotizar en el mercado), el RPC de despublicación establece published_channel = none y se procede a la nueva publicación. La relista automática de no venta de subasta F5 utiliza esta ruta exacta: cuando un lote de subasta no llega a la reserva, el cron anula la publicación de la subasta y la vuelve a publicar en el mercado en una transacción.