Mi sono sentito a disagio quando un compito ROBO ha mostrato annullato nella coda, è tornato al pool, poi ha fatto inciampare il prossimo corridore sullo stesso blocco dello strumento esattamente 6 minuti dopo. Dopo di che, il numero che continuavo a guardare è stato riassegnato dopo l'annullamento.
È allora che "annullato" ha smesso di sembrare finale.
Su ROBO, interrompere il lavoro dovrebbe far parte del protocollo, non solo di uno stato dell'interfaccia utente. Un compito può attraversare chiamate agli strumenti, prenotazioni, scritture parziali e controlli esterni prima che qualcuno decida di annullarlo. Se il percorso di aborto non lascia ricevute di pulizia abbastanza forti da dimostrare cosa è stato rilasciato, cosa è stato annullato e cosa è ancora vivo, il prossimo corridore eredita un pasticcio travestito da un nuovo inizio. Il cruscotto dice che la corsia è pulita. La superficie dello strumento dice il contrario.
Se questo fosse solo un'infrastruttura più lenta, lo stesso compito semplicemente aspetterebbe più a lungo. La versione più brutta è diversa. Il lavoro viene riassegnato mentre l'ultima esecuzione sta ancora perdendo nella corsia di esecuzione.
Questo è davvero un problema di semantica dell'aborto. Una pulizia debole trasforma l'annullamento in contaminazione. Una pulizia forte rende la riassegnazione sicura.
Quella disciplina è costosa. Le ricevute di pulizia, i controlli di rollback, la verifica del rilascio dello stato, nessuna di queste è gratuita.
$ROBO inizia a contare quando si paga per rendere gli aborti reali, non cosmetici.
Fidandomi di più dell'annullato quando il prossimo corridore smette di scoprire che il precedente è ancora lì.