func readProber()

in cloudprober/spannerprobers.go [158:202]


func readProber(client *spanner.Client, metrics map[string]int64) error {
	ctx := context.Background()
	session := createSession(client)
	defer deleteSession(client, session)
	reqRead := &spannerpb.ReadRequest{
		Session: session.Name,
		Table:   table,
		KeySet: &spannerpb.KeySet{
			All: true,
		},
		Columns: []string{"username", "firstname", "lastname"},
	}

	// Read
	start := time.Now()
	respRead, err1 := client.Read(ctx, reqRead)
	if err1 != nil {
		return err1
	}
	if respRead == nil || len(respRead.Rows) != 1 || respRead.Rows[0].Values[0].GetStringValue() != testUsername {
		return errors.New("execute read failed")
	}
	metrics["read_latency_ms"] = int64(time.Now().Sub(start) / time.Millisecond)

	// StreamingRead
	start = time.Now()
	stream, err2 := client.StreamingRead(ctx, reqRead)
	if err2 != nil {
		return err2
	}
	for {
		resp, err := stream.Recv()
		if err == io.EOF {
			break
		}
		if err != nil {
			return err
		}
		if resp == nil || resp.Values[0].GetStringValue() != testUsername {
			return errors.New("streaming read failed")
		}
	}
	metrics["streaming_read_latency_ms"] = int64(time.Now().Sub(start) / time.Millisecond)
	return nil
}