Questa pagina mostra come sostituire la configurazione del timeout predefinita e configurare una policy di nuovi tentativi utilizzando le librerie client di Spanner.
Le librerie client utilizzano le impostazioni predefinite di timeout e policy di nuovi tentativi definite nei seguenti file di configurazione.
- spanner_grpc_service_config.json
- spanner_admin_instance_grpc_service_config.json
- spanner_admin_database_grpc_service_config.json
Nei file di configurazione, il timeout predefinito per le operazioni che richiedono un breve periodo di tempo, ad esempio CreateSession, è di 30 secondi. Le operazioni più lunghe, come query o letture, hanno un timeout predefinito di 3600 secondi. Ti consigliamo di utilizzare questi valori predefiniti. Tuttavia, se necessario, puoi impostare un timeout personalizzato o una policy di nuovi tentativi nella tua applicazione.
Se decidi di modificare il timeout, impostalo sul periodo di tempo effettivo per cui l'applicazione è configurata per attendere il risultato.
Non configurare una policy di nuovi tentativi più aggressiva di quella predefinita, perché troppi nuovi tentativi potrebbero sovraccaricare il backend e limitare le richieste.
Una policy di nuovi tentativi è definita in ogni snippet, con le seguenti caratteristiche:
- La durata del tempo di attesa iniziale, o di avvio, prima di riprovare la richiesta.
- Un ritardo massimo.
- Un moltiplicatore da utilizzare con il tempo di attesa precedente per calcolare il tempo di attesa successivo, fino al raggiungimento del valore massimo.
- Un insieme di codici di errore per le operazioni di nuovi tentativi.
Nell'esempio seguente, per l'operazione specificata viene impostato un timeout di 60 secondi.
Se l'operazione richiede più tempo di questo timeout, non va a buon fine e viene restituito un errore DEADLINE_EXCEEDED.
Se l'operazione non va a buon fine con un codice di errore UNAVAILABLE, ad esempio se si verifica un problema di rete temporaneo, viene eseguito un nuovo tentativo. Il client attende 500 ms prima di avviare il primo tentativo. Se il primo tentativo non va a buon fine, il client attende 1,5 * 500 ms = 750 ms prima di avviare il secondo tentativo. Questo ritardo di nuovi tentativi continua ad aumentare finché l'operazione non va a buon fine o non raggiunge il ritardo massimo di nuovi tentativi di 16 secondi. L'operazione non va a buon fine e viene restituito un errore DEADLINE_EXCEEDED se il tempo totale trascorso per provare l'operazione supera il valore di timeout totale di 60 secondi.