in cloudprober/spannerprobers.go [204:259]
func transactionProber(client *spanner.Client, metrics map[string]int64) error {
ctx := context.Background()
session := createSession(client)
reqBegin := &spannerpb.BeginTransactionRequest{
Session: session.Name,
Options: &spannerpb.TransactionOptions{
Mode: &spannerpb.TransactionOptions_ReadWrite_{
ReadWrite: &spannerpb.TransactionOptions_ReadWrite{},
},
},
}
// BeginTransaction
start := time.Now()
txn, err1 := client.BeginTransaction(ctx, reqBegin)
if err1 != nil {
return err1
}
metrics["begin_transaction_latency_ms"] = int64(time.Now().Sub(start) / time.Millisecond)
// Commit
reqCommit := &spannerpb.CommitRequest{
Session: session.Name,
Transaction: &spannerpb.CommitRequest_TransactionId{
TransactionId: txn.Id,
},
}
start = time.Now()
_, err2 := client.Commit(ctx, reqCommit)
if err2 != nil {
return err2
}
metrics["commit_latency_ms"] = int64(time.Now().Sub(start) / time.Millisecond)
// Rollback
txn, err1 = client.BeginTransaction(ctx, reqBegin)
if err1 != nil {
return err1
}
reqRollback := &spannerpb.RollbackRequest{
Session: session.Name,
TransactionId: txn.Id,
}
start = time.Now()
err2 = client.Rollback(ctx, reqRollback)
if err2 != nil {
return err2
}
metrics["rollback_latency_ms"] = int64(time.Now().Sub(start) / time.Millisecond)
reqDelete := &spannerpb.DeleteSessionRequest{
Name: session.Name,
}
client.DeleteSession(ctx, reqDelete)
return nil
}