in cloudprober/spannerprobers.go [116:156]
func executeSqlProber(client *spanner.Client, metrics map[string]int64) error {
ctx := context.Background()
session := createSession(client)
defer deleteSession(client, session)
reqSql := &spannerpb.ExecuteSqlRequest{
Sql: "select * FROM " + table,
Session: session.Name,
}
// ExecuteSql
start := time.Now()
respSql, err1 := client.ExecuteSql(ctx, reqSql)
if err1 != nil {
return err1
}
if respSql == nil || len(respSql.Rows) != 1 || respSql.Rows[0].Values[0].GetStringValue() != testUsername {
return errors.New("execute sql failed")
}
metrics["execute_sql_latency_ms"] = int64(time.Now().Sub(start) / time.Millisecond)
// ExecuteStreamingSql
start = time.Now()
stream, err2 := client.ExecuteStreamingSql(ctx, reqSql)
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("execute streaming sql failed")
}
}
metrics["execute_streaming_sql_latency_ms"] = int64(time.Now().Sub(start) / time.Millisecond)
return nil
}