Scarica MarkdownDocumento originale su GitHub
Correzione della concorrenza delle mappature tra piani e prodotti Launch
Corretto AUTH-03 emerso dalla revisione delle autorizzazioni. Sono stati modificati soltanto il server Launch e i relativi test di regressione, senza distribuzioni né pubblicazioni dell'SDK; i limiti delle decisioni di autorizzazione di Licentivo e dell'SDK rimangono invariati.
Modifiche
- Durante il salvataggio di una mappatura, nella transazione viene prima bloccato il record del prodotto Launch comune, quindi la versione del piano. Le richieste di salvataggio di piani o processi diversi rispettano quindi lo stesso blocco del prodotto; le richieste in conflitto restituiscono HTTP 409
PRODUCT_MAPPING_CONFLICT. products.licentivo_product_idconserva una rotta pubblica stabile del prodotto. Dopo il primo salvataggio riuscito di una mappatura, gli altri piani dello stesso prodotto Launch possono scegliere soltanto questo prodotto Licentivo; possono selezionare politiche diverse di quel prodotto. Il campo non conserva permessi delle funzionalità, quote dei dispositivi o stati di autorizzazione dei clienti.- L'identità del cliente legge la rotta stabile e non seleziona più il prodotto in base alla versione massima tra tutti i piani. La pubblicazione dei piani e la generazione della configurazione di integrazione SDK verificano la stessa associazione.
- Ai vecchi database viene aggiunto automaticamente un campo che ammette null. Per i dati ancora privi del campo stabile vengono consultati, in ordine, la cronologia degli acquisti, compresi quelli pagati, i record delle pubblicazioni precedenti e le altre mappature. Se allo stesso livello di priorità compaiono più prodotti, viene segnalato esplicitamente un conflitto, senza tentare di indovinare. L'unico prodotto acquistato ha la precedenza sulle bozze non pertinenti; il successivo salvataggio di una mappatura compatibile può rendere stabile l'associazione. La modifica dei contenuti del prodotto conserva l'associazione.
I dati storici errati relativi a vendite su più prodotti Licentivo richiedono comunque una verifica manuale; questa modifica non riscrive i record degli acquisti né le licenze remote. Per passare a un altro prodotto Licentivo occorre creare un nuovo prodotto Launch; non è possibile usare un nuovo piano per riscrivere la rotta del prodotto originale.
Per l'implementazione, consultare Salvataggio delle mappature, Instradamento dei prodotti, Emissione dell'identità, Convalida della pubblicazione, Verifica dell'integrazione e Modello dei dati.
Verifica locale
| Verifiche | Risultato |
|---|---|
| Confronto con l'implementazione precedente alla correzione | Lo stesso test di regressione rileva stabilmente il successo simultaneo di due salvataggi in conflitto e fallisce come previsto |
| Regressione specifica delle mappature dopo la correzione | Tra le richieste in conflitto, una riesce e l'altra restituisce 409; entrambi i salvataggi compatibili riescono; dopo la sincronizzazione del pagamento l'identità non è influenzata da bozze errate; il livello di integrazione SDK accetta il contesto corretto del prodotto |
| Protezione dei dati storici | Tutti i controlli superati: priorità della rotta acquistata, errore in caso di ambiguità, divieto di pubblicazione delle bozze errate, impossibilità di generare configurazioni SDK da pubblicazioni storiche errate e conservazione dell'associazione durante la modifica dei contenuti |
| Tutti i pacchetti sorgente Go e regressione MySQL | 192 record di test superati, inclusi i sottocasi; nessun errore. TestProductUploadRoundTrip saltato, non conteggiato tra i test superati |
| Aggiornamento della struttura del vecchio database | Dopo l'inizializzazione, alle strutture prive della colonna di instradamento viene aggiunto il campo che ammette null; inizializzazioni ripetute superate |
| Test di integrazione con Launch, Licentivo e SDK Go reali | 13 fasi applicative superate, comprendenti acquisti, esecuzione delle funzionalità con firme reali, ripristino dopo la chiusura ordinaria, disconnessione, scollegamento remoto, vecchie generazioni, rinnovi e rimborsi, revoca degli account e rifiuto dell'esecuzione dopo rimborsi/storni |
| Test aggiuntivi finali | Regressione specifica delle mappature superata in un nuovo database vuoto, includendo la verifica della configurazione di integrazione delle pubblicazioni storiche; go vet superato |
Dopo il completamento della regressione completa e dei test di integrazione con i servizi reali, è stata infine aggiunta una verifica di coerenza del controllo di integrazione SDK; la regressione specifica comprendente questo scenario e go vet sono stati rieseguiti separatamente. Il fallimento atteso della vecchia implementazione dimostra che il test rileva la condizione di concorrenza originale e non è un errore di regressione irrisolto.
I test di integrazione usano un MySQL 8.0.32 locale indipendente, il servizio Licentivo corrente e l'SDK Go effettivo; i canali di pagamento e DeepL usano servizi simulati isolati, senza addebiti effettivi o traduzioni a pagamento. I test specifici della concorrenza e delle mappature storiche errate usano la logica applicativa reale di Launch, MySQL e un simulatore del protocollo; non si afferma che tutti e nove gli SDK abbiano completato questa sessione di integrazione con servizi reali.
In questa sessione non è stato effettuato alcun accesso a 192.168.2.177. I processi temporanei MySQL e Licentivo avviati per queste attività sono stati arrestati; i servizi preesistenti sono stati conservati. I materiali originali si trovano nella directory ignorata .local/mapping-fix-20261024/; un riepilogo condivisibile è disponibile nelle prove di verifica.