diff --git a/pkg/registry/apis/query/query.go b/pkg/registry/apis/query/query.go index be8b24886c8..bdd1a8f227e 100644 --- a/pkg/registry/apis/query/query.go +++ b/pkg/registry/apis/query/query.go @@ -125,7 +125,7 @@ func (r *queryREST) Connect(connectCtx context.Context, name string, _ runtime.O var refError ErrorWithRefID statusCode := http.StatusBadRequest message := err - refID := "" + refID := "A" if errors.Is(err, datasources.ErrDataSourceNotFound) { statusCode = http.StatusNotFound @@ -187,6 +187,11 @@ func (b *QueryAPIBuilder) execute(ctx context.Context, req parsedRequestInfo) (q qdr, err = b.executeConcurrentQueries(ctx, req.Requests) } + if err != nil { + b.log.Debug("error in query phase, skipping expressions", "error", err) + return qdr, err //return early here to prevent expressions from being executed if we got an error during the query phase + } + if len(req.Expressions) > 0 { b.log.Debug("executing expressions") qdr, err = b.handleExpressions(ctx, req, qdr) @@ -232,7 +237,9 @@ func (b *QueryAPIBuilder) handleQuerySingleDatasource(ctx context.Context, req d req.Headers, ) if err != nil { - return nil, err + b.log.Debug("error getting single datasource client", "error", err, "reqUid", req.UID) + qdr := buildErrorResponse(err, req) + return qdr, err } code, rsp, err := client.QueryData(ctx, *req.Request) diff --git a/pkg/tests/apis/query/query_test.go b/pkg/tests/apis/query/query_test.go index 66ca6696637..40143e3804b 100644 --- a/pkg/tests/apis/query/query_test.go +++ b/pkg/tests/apis/query/query_test.go @@ -140,7 +140,7 @@ func TestIntegrationSimpleQuery(t *testing.T) { require.Error(t, err, "expecting a 400") require.JSONEq(t, `{ "results": { - "": { + "A": { "error": "[sse.dependencyError] did not execute expression [Y] due to a failure to of the dependent expression or query [X]", "status": 400, "errorSource": ""