func partitionProber()

in cloudprober/spannerprobers.go [261:305]


func partitionProber(client *spanner.Client, metrics map[string]int64) error {
	ctx := context.Background()
	session := createSession(client)
	defer deleteSession(client, session)
	selector := &spannerpb.TransactionSelector{
		Selector: &spannerpb.TransactionSelector_Begin{
			Begin: &spannerpb.TransactionOptions{
				Mode: &spannerpb.TransactionOptions_ReadOnly_{
					ReadOnly: &spannerpb.TransactionOptions_ReadOnly{},
				},
			},
		},
	}

	// PartitionQuery
	reqQuery := &spannerpb.PartitionQueryRequest{
		Session:     session.Name,
		Sql:         "select * FROM " + table,
		Transaction: selector,
	}
	start := time.Now()
	_, err := client.PartitionQuery(ctx, reqQuery)
	if err != nil {
		return err
	}
	metrics["partition_query_latency_ms"] = int64(time.Now().Sub(start) / time.Millisecond)

	// PartitionRead
	reqRead := &spannerpb.PartitionReadRequest{
		Session: session.Name,
		Table:   table,
		KeySet: &spannerpb.KeySet{
			All: true,
		},
		Columns:     []string{"username", "firstname", "lastname"},
		Transaction: selector,
	}
	start = time.Now()
	_, err = client.PartitionRead(ctx, reqRead)
	if err != nil {
		return err
	}
	metrics["partition_read_latency_ms"] = int64(time.Now().Sub(start) / time.Millisecond)
	return nil
}