Mantieni tutto organizzato con le raccolte
Salva e classifica i contenuti in base alle tue preferenze.
Questa pagina descrive come impostare un timeout per l'esecuzione di una singola istruzione utilizzando le librerie client Spanner. Può essere utilizzato per sostituire la configurazione del timeout predefinito della libreria client. L'istruzione ha esito negativo
DEADLINE_EXCEEDED errore se l'istruzione non può essere completata all'interno del campo specificato
di timeout.
Questi esempi mostrano come impostare un timeout per l'esecuzione di una singola istruzione in
libreria client di Cloud Spanner.
Vai
import("context""fmt""io""time""cloud.google.com/go/spanner""google.golang.org/grpc/codes")funcsetStatementTimeout(wio.Writer,dbstring)error{client,err:=spanner.NewClient(context.Background(),db)iferr!=nil{returnerr}deferclient.Close()_,err=client.ReadWriteTransaction(context.Background(),func(ctxcontext.Context,txn*spanner.ReadWriteTransaction)error{// Create a context with a 60-second timeout and apply this timeout to the insert statement.ctxWithTimeout,cancel:=context.WithTimeout(context.Background(),60*time.Second)defercancel()stmt:=spanner.Statement{SQL:`INSERT Singers (SingerId, FirstName, LastName) VALUES (39, 'George', 'Washington')`,}rowCount,err:=txn.Update(ctxWithTimeout,stmt)// Get the error code from the error. This function returns codes.OK if err == nil.code:=spanner.ErrCode(err)ifcode==codes.DeadlineExceeded{fmt.Fprintf(w,"Insert statement timed out.\n")}elseifcode==codes.OK{fmt.Fprintf(w,"%d record(s) inserted.\n",rowCount)}else{fmt.Fprintf(w,"Insert statement failed with error %v\n",err)}returnerr})iferr!=nil{returnerr}returnnil}
Java
staticvoidexecuteSqlWithTimeout(){// TODO(developer): Replace these variables before running the sample.StringprojectId="my-project";StringinstanceId="my-instance";StringdatabaseId="my-database";try(Spannerspanner=SpannerOptions.newBuilder().setProjectId(projectId).build().getService()){DatabaseClientclient=spanner.getDatabaseClient(DatabaseId.of(projectId,instanceId,databaseId));executeSqlWithTimeout(client);}}staticvoidexecuteSqlWithTimeout(DatabaseClientclient){CallContextConfiguratorconfigurator=newCallContextConfigurator(){public<ReqT,RespT>ApiCallContextconfigure(ApiCallContextcontext,ReqTrequest,MethodDescriptor<ReqT,RespT>method){// DML uses the ExecuteSql RPC.if(method==SpannerGrpc.getExecuteSqlMethod()){// NOTE: You can use a GrpcCallContext to set a custom timeout for a single RPC// invocation. This timeout can however ONLY BE SHORTER than the default timeout// for the RPC. If you set a timeout that is longer than the default timeout, then// the default timeout will be used.returnGrpcCallContext.createDefault().withCallOptions(CallOptions.DEFAULT.withDeadlineAfter(60L,TimeUnit.SECONDS));}// Return null to indicate that the default should be used for other methods.returnnull;}};// Create a context that uses the custom call configuration.Contextcontext=Context.current().withValue(SpannerOptions.CALL_CONTEXT_CONFIGURATOR_KEY,configurator);// Run the transaction in the custom context.context.run(()->
client.readWriteTransaction().<long[]>run(transaction->{Stringsql="INSERT INTO Singers (SingerId, FirstName, LastName)\n"+"VALUES (20, 'George', 'Washington')";longrowCount=transaction.executeUpdate(Statement.of(sql));System.out.printf("%d record inserted.%n",rowCount);returnnull;}));}
[[["Facile da capire","easyToUnderstand","thumb-up"],["Il problema è stato risolto","solvedMyProblem","thumb-up"],["Altra","otherUp","thumb-up"]],[["Hard to understand","hardToUnderstand","thumb-down"],["Incorrect information or sample code","incorrectInformationOrSampleCode","thumb-down"],["Missing the information/samples I need","missingTheInformationSamplesINeed","thumb-down"],["Problema di traduzione","translationIssue","thumb-down"],["Altra","otherDown","thumb-down"]],["Ultimo aggiornamento 2024-10-14 UTC."],[],[]]