func executeSqlProber()

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
}