Destiny 2 - Manutenzione e ripristino

11, feb 2020 - Destiny Dev Team

Oggi (martedì 11 febbraio), dopo la pubblicazione dell'aggiornamento rapido 2.7.1.1, siamo venuti a conoscenza di un problema che si è riproposto e che ha comportato la perdita di valuta e materiali per alcuni giocatori. Questo problema si era verificato la prima volta il 28 gennaio con l'aggiornamento rapido 2.7.1, risolto poi con il ripristino dell'account dei giocatori. Per l'incidente di oggi abbiamo agito nello stesso modo e ripristinato gli account allo stato in cui erano alle 17:30 ora italiana (prima della pubblicazione dell'aggiornamento 2.7.1.1).

Siccome entrambi gli incidenti sono identici nella causa e nell'effetto sui nostri giocatori e poiché si sono verificati in un lasso di tempo ravvicinato, volevamo spiegarvi ciò che è andato storto, come l'abbiamo risolto e come stiamo pensando di assicurarci che ciò non accada di nuovo in futuro. Innanzitutto, diamo un'occhiata a ciò che ha causato questo problema in primo luogo: un bug di gioco che coinvolge la gestione dell'inventario e una serie di configurazioni del server che hanno reintrodotto il bug dopo la sua risoluzione.

Gestione dell'inventario

In Destiny 2, le imprese vengono trattate al pari di altri oggetti dell'inventario, come valuta e materiali. Tutti gli oggetti hanno una marca temporale, stabilita in base a quando vengono aggiunti per la prima volta all'inventario. Questa marca temporale viene usata per disporre le imprese nell'ordine in cui vengono ottenute. Il gioco verifica l'inventario di un giocatore a ogni accesso per assicurare che sia coerente con eventuali modifiche ai contenuti, come ad esempio il numero massimo di oggetti di un particolare tipo che il giocatore può trasportare.

Mesi fa, i giocatori hanno segnalato che il sistema di ordinamento delle imprese non funzionava e abbiamo voluto sistemarlo. Il team ha indagato e ha scoperto che la procedura di verifica reimpostava la marca temporale di una serie di imprese, impedendo così l'ordinamento cronologico. Abbiamo deciso di risolvere disattivando il reset della marca temporale delle imprese. Questa soluzione era concettualmente esatta, ma degli impercettibili effetti collaterali hanno disattivato la procedura di verifica in misura maggiore. Il risultato è stato il calcolo errato del numero massimo di oggetti cumulabili (come valute e materiali), cosa che ha comportato la perdita degli oggetti oltre questo limite massimo. Sapevamo che questo codice era fondamentale e, secondo le nostre procedure abituali, abbiamo fatto revisionare il codice a due esperti di dominio, ma purtroppo non abbiamo intercettato il problema.

Qualche giorno dopo, il nostro team di testing interno lo ha individuato. Tuttavia abbiamo poi concluso, sbagliando, che era causato da un problema con il sistema di debug che usiamo per il testing, e non da un reale problema del gioco. Non essendocene accorti, il problema è stato introdotto nell'aggiornamento 2.7.1. Una volta identificato nel gioco, il passo successivo era capire come risolverlo, il che ci porta al prossimo argomento: server di gioco e rispettive configurazioni.

Configurazioni dei server

Prima di ogni uscita importante (per esempio, Ombre dal Profondo), effettuiamo stress test per provare a determinare il comportamento dell'utente e il suo impatto sulla nostra architettura di rete. Siccome non è possibile sostituire il comportamento di milioni di giocatori reali, a supplemento di questo test monitoriamo i parametri di servizio dopo il lancio.

A ottobre, allo scopo di gestire il carico supplementare di giocatori ed elaborazione dati per il lancio di Ombre dal Profondo, abbiamo allestito server aggiuntivi (chiamati WorldServers). Non avevamo mai usato così tanti server per questo compito. Tenere operativi tutti questi server ha comportato effetti collaterali minimi, da noi individuati ma generalmente invisibili ai giocatori. Esempio di effetto collaterale minimo: una piccola percentuale (meno dell'1%) di questi server si bloccava all'avvio poiché il volume dei server era eccessivo rispetto a quello dei database di supporto. La nostra soluzione è stata di riavviare manualmente i server in crash ogni volta che si presentava il problema, e ci è sembrata una soluzione senza alcun effetto collaterale per i giocatori.

Arriviamo quindi a due settimane fa. L'aggiornamento 2.7.1 conteneva il bug che causava la corruzione dei dati del personaggio, costringendoci a effettuare il nostro primo ripristino dei dati del personaggio. Per risolvere il problema rapidamente, abbiamo applicato una patch ai server invece di introdurre una build di codice di gioco completa. Abbiamo quindi apportato una modifica a un'impostazione dei server per ignorare il codice di gioco usato per elaborare i dati del personaggio e riavviato i WorldServers affinché applicassero tale modifica. 

E arriviamo a oggi, 11 febbraio, quando abbiamo pubblicato l'aggiornamento 2.7.1.1 coincidente con il lancio dei Giorni Scarlatti. Dopo il lancio, alcuni dei WorldServers si sono nuovamente bloccati all'avvio poiché è partito un elevato volume di server contemporaneamente. Ancora una volta abbiamo riavviato manualmente quei server pensando che tutto fosse a posto. Ci sbagliavamo. 

A nostra insaputa, questo blocco ha indotto quei WorldServers a non applicare la precedente soluzione per la corruzione dei dati del personaggio. Di conseguenza, su una piccola percentuale di WorldServers stava girando il vecchio codice e c'era il bug che corrompeva i dati del personaggio. Abbiamo dei sistemi di verifica che rilevano questo genere di problema di configurazione non conforme, ma il blocco dei WorldServers e il riavvio manuale hanno indotto i server a saltare la procedura di verifica. Prima di questa mattina, eravamo sicuri che saltare queste verifiche fosse impossibile.

Come parte della nostra verifica standard di una nuova build, il nostro team di testing accede con un gran numero di account creati per verificare l'esperienza del giocatore. Siccome abbiamo centinaia di server nel nostro ambiente, ogni test manuale da noi eseguito ha avuto la (s)fortuna di incappare nei server "buoni" e di mancare quella piccola percentuale di server in cattivo stato. E così abbiamo dato il via libera.

Oggi, quando il gioco è tornato operativo dopo il lancio del 2.7.1.1, sono cominciate ad arrivare segnalazioni di valuta e materiali persi. Il team ha indagato prontamente e ha disattivato il gioco alle 19:30. In quel lasso di tempo, centinaia di migliaia di giocatori unici avevano eseguito l'accesso al gioco o l'accesso ai propri personaggi con servizi di terze parti. La nostra indagine ha rivelato una situazione che ritenevamo impossibile: un piccolo numero di WorldServers erano partiti senza la configurazione corretta che aveva risolto i problemi di corruzione del 2.7.1. Sfortunatamente, chiunque abbia eseguito l'accesso usando uno di questi server non aggiornati ha riscontrato l'errore di corruzione del personaggio.

Stabilito che si trattava dello stesso problema del 28 gennaio e capita la causa, il team ha deciso che il modo migliore di risolverlo sarebbe stato ripristinare tutti i dati del personaggio dal backup fatto prima del 2.7.1.1, invece di provare a individuare ogni singolo account rischiando di perderci qualcos'altro per strada. 


Misure preventive

Il team ha identificato una serie di precauzioni da adottare affinché il problema non si ripresenti in futuro. 

1) Abbiamo aggiunto ulteriori sistemi di sicurezza alla procedura di aggiornamento rapido affinché i server non partano con una versione sbagliata. Questa modifica sarà già in atto quando rimetteremo il gioco online oggi.
2) Abbiamo risolto il problema che causava il blocco all'avvio di alcuni WorldServers. La soluzione verrà introdotta con la stagione 10. 
3) La soluzione permanente alla corruzione dei personaggi verrà introdotta al prossimo aggiornamento come modifica eseguibile, accantonando la necessità di ignorare la configurazione. (Sfortunatamente l'aggiornamento 2.7.1.1 non ha potuto beneficiarne).
4) Per il futuro, stiamo cercando un modo per velocizzare i meccanismi di recupero e ripristino.
5) In un prossimo aggiornamento, risolveremo il problema che induce i server a saltare il caricamento dei dati di configurazione.
6) Aggiungeremo altre protezioni alla verifica del codice in fase di accesso allo scopo di impedire che altri problemi possano sorgere in futuro in un momento così critico.
7) Stiamo aggiornando i nostri metodi di sviluppo per individuare prontamente problemi come questo. 

Con il ripristino di oggi, tutti i personaggi torneranno allo stato in cui erano intorno alle 17:30. Il team è inoltre al lavoro sull'aggiornamento rapido 2.7.1.2 previsto per il 13 febbraio. Questo aggiornamento conterrà una soluzione al problema di Lama dell'alba infinita.

Sappiamo che l'interruzione di servizio e il ripristino di oggi sono molto frustranti per voi, soprattutto considerato l'arrivo dei Giorni Scarlatti. È stato frustrante anche per noi capire che era un problema che avremmo potuto evitare. Ci dispiace per il disagio causato e continueremo a lavorare sodo per impedire che simili problemi si verifichino ancora. Come sempre, se riscontrate problemi in Destiny, contattateci sul sito di assistenza di Bungie e su Twitter @BungieHelp. Vi ringraziamo per la pazienza.

Questo sito utilizza cookie per fornire un migliore servizio agli utenti. Cliccando su "Accetto", accetti le politiche esposte su Politica sui cookie e Politica sulla privacy.