diff --git a/pkg/query-service/app/logparsingpipeline/pipelineBuilder.go b/pkg/query-service/app/logparsingpipeline/pipelineBuilder.go index aebe4e3890..e569d88a82 100644 --- a/pkg/query-service/app/logparsingpipeline/pipelineBuilder.go +++ b/pkg/query-service/app/logparsingpipeline/pipelineBuilder.go @@ -352,6 +352,13 @@ type logFieldsInExprExtractor struct { func (v *logFieldsInExprExtractor) Visit(node *ast.Node) { if n, ok := (*node).(*ast.MemberNode); ok { memberRef := n.String() + + // coalesce ops end up as MemberNode right now for some reason. + // ignore such member nodes. + if strings.Contains(memberRef, "??") { + return + } + if strings.HasPrefix(memberRef, "attributes") || strings.HasPrefix(memberRef, "resource") { v.referencedFields = append(v.referencedFields, memberRef) } diff --git a/pkg/query-service/app/logparsingpipeline/pipelineBuilder_test.go b/pkg/query-service/app/logparsingpipeline/pipelineBuilder_test.go index d90f74a61e..19ffd4780f 100644 --- a/pkg/query-service/app/logparsingpipeline/pipelineBuilder_test.go +++ b/pkg/query-service/app/logparsingpipeline/pipelineBuilder_test.go @@ -698,6 +698,13 @@ func TestMembershipOpInProcessorFieldExpressions(t *testing.T) { Name: "add3", Field: `attributes["attrs.test.value"]`, Value: `EXPR(attributes.test?.value)`, + }, { + ID: "add4", + Type: "add", + Enabled: true, + Name: "add4", + Field: `attributes["attrs.test.value"]`, + Value: `EXPR((attributes.temp?.request_context?.scraper ?? [nil])[0])`, }, }, } diff --git a/pkg/query-service/app/opamp/model/agent.go b/pkg/query-service/app/opamp/model/agent.go index 758531f345..4bc5f2f3f0 100644 --- a/pkg/query-service/app/opamp/model/agent.go +++ b/pkg/query-service/app/opamp/model/agent.go @@ -4,6 +4,7 @@ import ( "bytes" "context" "crypto/sha256" + "fmt" "sync" "time" @@ -276,8 +277,8 @@ func (agent *Agent) processStatusUpdate( func (agent *Agent) updateRemoteConfig(configProvider AgentConfigProvider) bool { recommendedConfig, confId, err := configProvider.RecommendAgentConfig([]byte(agent.EffectiveConfig)) if err != nil { - zap.S().Errorf("could not generate config recommendation for agent %d: %w", agent.ID, err) - return false + // The server must always recommend a config. + panic(fmt.Errorf("could not generate config recommendation for agent %s: %w", agent.ID, err)) } cfg := protobufs.AgentRemoteConfig{