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
}