mirror of
https://github.com/prometheus/prometheus.git
synced 2026-05-28 04:02:21 -04:00
Merge pull request #17737 from aknuds1/arve/fix-globalconfig-iszero
Some checks failed
buf.build / lint and publish (push) Has been cancelled
CI / Go tests (push) Has been cancelled
CI / More Go tests (push) Has been cancelled
CI / Go tests with previous Go version (push) Has been cancelled
CI / UI tests (push) Has been cancelled
CI / Go tests on Windows (push) Has been cancelled
CI / Mixins tests (push) Has been cancelled
CI / Build Prometheus for common architectures (push) Has been cancelled
CI / Build Prometheus for all architectures (push) Has been cancelled
CI / Check generated parser (push) Has been cancelled
CI / golangci-lint (push) Has been cancelled
CI / fuzzing (push) Has been cancelled
CI / codeql (push) Has been cancelled
Scorecards supply-chain security / Scorecards analysis (push) Has been cancelled
CI / Report status of build Prometheus for all architectures (push) Has been cancelled
CI / Publish main branch artifacts (push) Has been cancelled
CI / Publish release artefacts (push) Has been cancelled
CI / Publish UI on npm Registry (push) Has been cancelled
Some checks failed
buf.build / lint and publish (push) Has been cancelled
CI / Go tests (push) Has been cancelled
CI / More Go tests (push) Has been cancelled
CI / Go tests with previous Go version (push) Has been cancelled
CI / UI tests (push) Has been cancelled
CI / Go tests on Windows (push) Has been cancelled
CI / Mixins tests (push) Has been cancelled
CI / Build Prometheus for common architectures (push) Has been cancelled
CI / Build Prometheus for all architectures (push) Has been cancelled
CI / Check generated parser (push) Has been cancelled
CI / golangci-lint (push) Has been cancelled
CI / fuzzing (push) Has been cancelled
CI / codeql (push) Has been cancelled
Scorecards supply-chain security / Scorecards analysis (push) Has been cancelled
CI / Report status of build Prometheus for all architectures (push) Has been cancelled
CI / Publish main branch artifacts (push) Has been cancelled
CI / Publish release artefacts (push) Has been cancelled
CI / Publish UI on npm Registry (push) Has been cancelled
fix(config): check all fields in GlobalConfig.isZero()
This commit is contained in:
commit
cfc88f80bc
2 changed files with 91 additions and 7 deletions
|
|
@ -687,7 +687,16 @@ func (c *GlobalConfig) isZero() bool {
|
|||
c.ScrapeProtocols == nil &&
|
||||
c.ScrapeNativeHistograms == nil &&
|
||||
!c.ConvertClassicHistogramsToNHCB &&
|
||||
!c.AlwaysScrapeClassicHistograms
|
||||
!c.AlwaysScrapeClassicHistograms &&
|
||||
c.BodySizeLimit == 0 &&
|
||||
c.SampleLimit == 0 &&
|
||||
c.TargetLimit == 0 &&
|
||||
c.LabelLimit == 0 &&
|
||||
c.LabelNameLengthLimit == 0 &&
|
||||
c.LabelValueLengthLimit == 0 &&
|
||||
c.KeepDroppedTargets == 0 &&
|
||||
c.MetricNameValidationScheme == model.UnsetValidation &&
|
||||
c.MetricNameEscapingScheme == ""
|
||||
}
|
||||
|
||||
const DefaultGoGCPercentage = 75
|
||||
|
|
|
|||
|
|
@ -2663,12 +2663,87 @@ func TestAgentMode(t *testing.T) {
|
|||
)
|
||||
}
|
||||
|
||||
func TestEmptyGlobalBlock(t *testing.T) {
|
||||
c, err := Load("global:\n", promslog.NewNopLogger())
|
||||
require.NoError(t, err)
|
||||
exp := DefaultConfig
|
||||
exp.loaded = true
|
||||
require.Equal(t, exp, *c)
|
||||
func TestGlobalConfig(t *testing.T) {
|
||||
t.Run("empty block restores defaults", func(t *testing.T) {
|
||||
c, err := Load("global:\n", promslog.NewNopLogger())
|
||||
require.NoError(t, err)
|
||||
exp := DefaultConfig
|
||||
exp.loaded = true
|
||||
require.Equal(t, exp, *c)
|
||||
})
|
||||
|
||||
// Verify that isZero() correctly identifies non-zero configurations for all
|
||||
// fields in GlobalConfig. This is important because isZero() is used during
|
||||
// YAML unmarshaling to detect empty global blocks that should be replaced
|
||||
// with defaults.
|
||||
t.Run("isZero", func(t *testing.T) {
|
||||
for _, tc := range []struct {
|
||||
name string
|
||||
config GlobalConfig
|
||||
expectZero bool
|
||||
}{
|
||||
{
|
||||
name: "empty GlobalConfig",
|
||||
config: GlobalConfig{},
|
||||
expectZero: true,
|
||||
},
|
||||
{
|
||||
name: "ScrapeInterval set",
|
||||
config: GlobalConfig{ScrapeInterval: model.Duration(30 * time.Second)},
|
||||
expectZero: false,
|
||||
},
|
||||
{
|
||||
name: "BodySizeLimit set",
|
||||
config: GlobalConfig{BodySizeLimit: 1 * units.MiB},
|
||||
expectZero: false,
|
||||
},
|
||||
{
|
||||
name: "SampleLimit set",
|
||||
config: GlobalConfig{SampleLimit: 1000},
|
||||
expectZero: false,
|
||||
},
|
||||
{
|
||||
name: "TargetLimit set",
|
||||
config: GlobalConfig{TargetLimit: 500},
|
||||
expectZero: false,
|
||||
},
|
||||
{
|
||||
name: "LabelLimit set",
|
||||
config: GlobalConfig{LabelLimit: 100},
|
||||
expectZero: false,
|
||||
},
|
||||
{
|
||||
name: "LabelNameLengthLimit set",
|
||||
config: GlobalConfig{LabelNameLengthLimit: 50},
|
||||
expectZero: false,
|
||||
},
|
||||
{
|
||||
name: "LabelValueLengthLimit set",
|
||||
config: GlobalConfig{LabelValueLengthLimit: 200},
|
||||
expectZero: false,
|
||||
},
|
||||
{
|
||||
name: "KeepDroppedTargets set",
|
||||
config: GlobalConfig{KeepDroppedTargets: 10},
|
||||
expectZero: false,
|
||||
},
|
||||
{
|
||||
name: "MetricNameValidationScheme set",
|
||||
config: GlobalConfig{MetricNameValidationScheme: model.LegacyValidation},
|
||||
expectZero: false,
|
||||
},
|
||||
{
|
||||
name: "MetricNameEscapingScheme set",
|
||||
config: GlobalConfig{MetricNameEscapingScheme: model.EscapeUnderscores},
|
||||
expectZero: false,
|
||||
},
|
||||
} {
|
||||
t.Run(tc.name, func(t *testing.T) {
|
||||
result := tc.config.isZero()
|
||||
require.Equal(t, tc.expectZero, result)
|
||||
})
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
// ScrapeConfigOptions contains options for creating a scrape config.
|
||||
|
|
|
|||
Loading…
Reference in a new issue