Skip to content

Commit e21fce4

Browse files
authored
feat: return an error if tbs config fails (#18379)
* feat: return an error if tbs config fails failure to process the tbs config will log a message and silently fallback to the default config with tbs disabled. This is not ideal and doesn't match the behaviour of other configs which return an error to the caller. Update the tbs config logic to return an error if processing fails Update test to assert error on malformed configs * test: validate expected error message make sure the error in tbs config tests is expected
1 parent 120700e commit e21fce4

File tree

2 files changed

+8
-19
lines changed

2 files changed

+8
-19
lines changed

internal/beater/config/sampling.go

Lines changed: 4 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,6 @@ import (
2525
"github.com/dustin/go-humanize"
2626

2727
"github.com/elastic/apm-server/internal/elasticsearch"
28-
"github.com/elastic/apm-server/internal/logs"
2928
"github.com/elastic/elastic-agent-libs/config"
3029
"github.com/elastic/elastic-agent-libs/logp"
3130
)
@@ -89,31 +88,21 @@ type TailSamplingPolicy struct {
8988
}
9089

9190
func (c *TailSamplingConfig) Unpack(in *config.C) error {
92-
var err error
93-
defer func() {
94-
if err != nil {
95-
logger := logp.NewLogger(logs.Config)
96-
logger.Errorf("failed to setup tail sampling: %v", err)
97-
logger.Info("continuing with tail sampling disabled")
98-
*c = TailSamplingConfig(defaultTailSamplingConfig())
99-
}
100-
}()
10191
type tailSamplingConfig TailSamplingConfig
10292
cfg := tailSamplingConfig(defaultTailSamplingConfig())
103-
if err = in.Unpack(&cfg); err != nil {
104-
err = fmt.Errorf("error unpacking config: %w", err)
105-
return nil
93+
if err := in.Unpack(&cfg); err != nil {
94+
return fmt.Errorf("error unpacking sampling.tail config: %w", err)
10695
}
10796
limit, err := humanize.ParseBytes(cfg.StorageLimit)
10897
if err != nil {
109-
return err
98+
return fmt.Errorf("error parsing storage limit: %w", err)
11099
}
111100
cfg.StorageLimitParsed = limit
112101
cfg.Enabled = in.Enabled()
113102
*c = TailSamplingConfig(cfg)
114103
c.esConfigured = in.HasField("elasticsearch")
115104
if validateErr := c.Validate(); validateErr != nil {
116-
err = fmt.Errorf("invalid config: %w", validateErr)
105+
return fmt.Errorf("invalid sampling.tail config: %w", validateErr)
117106
}
118107
return nil
119108
}

internal/beater/config/sampling_test.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -39,8 +39,8 @@ func TestSamplingPoliciesValidation(t *testing.T) {
3939
c, err := NewConfig(config.MustNewConfigFrom(map[string]interface{}{
4040
"sampling.tail.enabled": true,
4141
}), nil, logptest.NewTestingLogger(t, ""))
42-
assert.NoError(t, err)
43-
assert.False(t, c.Sampling.Tail.Enabled)
42+
assert.EqualError(t, err, "error processing configuration: invalid sampling.tail config: no policies specified accessing 'sampling.tail'")
43+
assert.Nil(t, c)
4444
})
4545
t.Run("NoDefaultPolicies", func(t *testing.T) {
4646
c, err := NewConfig(config.MustNewConfigFrom(map[string]interface{}{
@@ -49,7 +49,7 @@ func TestSamplingPoliciesValidation(t *testing.T) {
4949
"sample_rate": 0.5,
5050
}},
5151
}), nil, logptest.NewTestingLogger(t, ""))
52-
assert.NoError(t, err)
53-
assert.False(t, c.Sampling.Tail.Enabled)
52+
assert.EqualError(t, err, "error processing configuration: invalid sampling.tail config: no default (empty criteria) policy specified accessing 'sampling.tail'")
53+
assert.Nil(t, c)
5454
})
5555
}

0 commit comments

Comments
 (0)