func transactionProber()

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
}