Ciao a tutti
Tempo fa avevo scoperto un bug in un sito, casualmente. E mi piacerebbero però chiedervi secondo voi da cosa era dovuto questo bug, e posto qui, su database, la domanda, in quanto attraverso il buco della serratura dal quale io guardo credo fosse un problema di database. Ma chiedo a chi ha una esperienza maggiore e a chi ha una visione più completa.
Per farla breve c'era un sito dove ogni volta che premevi un pulsante, si inviava una richiesta per un libro, come se fosse un acquisto, solo che invece al posto dei soldi ti scalavano i punti. Accumulati in quanto a mia volta io inviavo i libri che mi richiedevano: +1 punto per ogni libro che mi chiedevano e -1 punto per ogni libro che chiedevo io.
Un giorno dovevo inviare la richiesta per 2 libri. Causalmente, con la fretta, ho inviato le due richieste in un lasso di tempo brevissimo tra l'uno e l'altro.
Mi ritrovai 2 libri in attesa di ricezione MA solo 1 punto tolto...
Il tentativo allora era quello di provare più richieste possibili in meno tempo possibile...
Allora preparai una quindicina di browser Chrome aperti (non schede, ma proprio browser), tutte puntavano a un libro diverso.
Modificai le dimensioni di ogni browser della dimensione giusta del pulsante, in modo tale che inquadrassero solamente il pulsante, trovandomi quindi con 15 pulsanti uno vicino all'altro. Anche quasi totalmente sovrapposti in modo da abbreviare ancora di più il lasso di tempo tra un click e l'altro.
Cliccai su tutti e 15 i pulsanti nell'arco di pochissimi secondi
Mi ritrovai con 15 libri in lista di attesa di essere ricevuti e mi tolsero solo 5 o 6 punti, invece che 15.
Siccome si poteva vedere anche quanti punti aveva gli altri utenti, mi rendevo conto però che gli altri ricevevano comunque 15 punti in totale... così come tutti avevano nella loro lista di libri da inviare tutti i libri che avevo richiesto.
Insomma dei 15 libri non si perdeva traccia, 15 ne chiedevo, 15 mi arrivano, 15 erano i punti che gli altri ottenevano in totale. L'unica differenza è che ne toglievano meno a me.
È come se il programma che c'era dietro non facesse in tempo a registrare -1 punto prima che io inviassi un'altra richiesta...
Come se a livello procedurale segnasse prima i libri richiesti sugli account delle 2 persone interessate, mettesse un +1, ma facendo un'altra richiesta si bloccasse e non avesse il tempo di aggiornare il -1 a me... salvo giusto 5 o 6 volte su 15 click...
Mi piacerebbe molto capire perché, secondo voi, avveniva questo.
Mi sono sempre chiesto infatti, se uno fa partire una pagina e la blocca, mi blocca anche lo script a metà non facendo terminare allo script tutte le operazioni?
Come si deve ovviare a questa cosa?
Come funziona il meccanico di modifica di una riga del database se allo stesso tempo 2 script vanno a modificarla?
Grazie per l'attenzione