Channel exclusivity: een apparaat staat op Market, op Auction of gaat direct - nooit twee tegelijk
De atomische guard die dubbel publiceren voorkomt, en waarom hij op het apparaat zit en niet op de batch.
Als hetzelfde apparaat tegelijk op Market gepubliceerd en in een veiling gelist kon worden, zou het platform tegen twee verschillende kopersgroepen liegen over beschikbaarheid. De koper die de veiling wint, verwacht het lot te krijgen. De koper die op “Nu kopen” klikt in de market verwacht hetzelfde. Eén van beiden wordt teleurgesteld, en disputes volgen.
De guard
De guard zit op elk verkoopbaar apparaat, niet op de batch. Elke rij in de gedeelde sellable pool draagt een huidig channel — geen, market, auction, of directe verkoop voor voorraad die vastzit aan een directe verkoop vanuit Core — samen met een verwijzing naar de publicatie die hem vasthoudt, en een check constraint die een channel zonder publicatie weigert. De Market-publicatie, de Auction-publicatie en de directe-verkoopflow doen alle drie hetzelfde: een update die het channel alleen zet waar het op dit moment geen is. Is de rij al bezet, dan raakt de update niets aan, faalt de publicatie en rolt de transactie terug. De channelhistoriek op de rij registreert elke omschakeling.
Waarom atomisch
Zonder atomiciteit zouden twee gelijktijdige publicatieverzoeken allebei het channel als geen kunnen lezen en allebei hun eigen waarde kunnen schrijven. De voorwaardelijke update garandeert dat er exact één wint; wanneer twee transacties echt botsen, verliest er één met een serialisatiefout en wordt haar publicatie teruggerold. Atomisch op databaseniveau, niet op applicatieniveau — want de applicatie kan met zichzelf racen over twee serverprocessen, en het enige veilige ijkpunt is de databaserij.
Een batch wisselt nooit van channel
Ook de voorbereiding is channel-bewust. Een Market-batch is een Market-voorbereiding en kan alleen naar Market publiceren; een concept-auction-lot is een aparte voorbereiding met zijn eigen doelchannel en kan alleen naar Auction publiceren. Zolang een apparaat in een van beide concepten zit, is het gereserveerd voor dat channel en verdwijnt het uit de normale selectie van het andere — “alles tonen” brengt het terug als een geblokkeerde rij met een link naar het record dat uitlegt waarom. Wil je dezelfde apparaten toch onder de hamer? Start een concept-lot vanuit Auction inventory; het platform zal een batch niet stilletjes omleiden. Beschikbaarheid is een derde, aparte grendel: een apparaat in hold (niet beschikbaar) of geregistreerd als vernietigd kan op geen enkel channel gezet worden, en de wizards bieden het niet aan.
Van channel wisselen
Na elkaar wisselen mag wel. Depubliceer de Market-listing, of laat een veiling zonder winnaar aflopen, en het channel keert terug naar geen; de volgende publicatie op het andere channel verloopt gewoon. De no-sale relist na een veiling gebruikt precies dat pad: wanneer een lot settelt als reserve niet gehaald of geen biedingen, zet de settlement de apparaten terug op geen en publiceert ze in dezelfde run een Market-listing, met de naam van de batch en “— relisted from auction” erachter. De relist onthoudt uit welk lot hij kwam, zodat een settlement die twee keer draait één listing maakt, geen twee.