Skip to content

Commit aacf9cf

Browse files
oliwermjuraga
authored andcommitted
MEDIUM: Add new global keywords for HAProxy 3.1
expose-deprecated-directives force-cfg-parser-pause warn-blocked-traffic-after tune.bufsize.small tune.disable-fast-forward tune.h2.be.rxbuf tune.h2.fe.rxbuf tune.renice.runtime tune.renice.startup
1 parent 7d08503 commit aacf9cf

16 files changed

+461
-9
lines changed

config-parser/section-parsers.go

+9
Original file line numberDiff line numberDiff line change
@@ -266,8 +266,10 @@ func (p *configParser) getGlobalParser() *Parsers { //nolint: maintidx
266266
addParser(parser, &sequence, &simple.Number{Name: "tune.buffers.limit"})
267267
addParser(parser, &sequence, &simple.Number{Name: "tune.buffers.reserve"})
268268
addParser(parser, &sequence, &simple.Number{Name: "tune.bufsize"})
269+
addParser(parser, &sequence, &simple.Size{Name: "tune.bufsize.small"})
269270
addParser(parser, &sequence, &simple.Number{Name: "tune.comp.maxlevel"})
270271
addParser(parser, &sequence, &simple.Enabled{Name: "tune.disable-zero-copy-forwarding"})
272+
addParser(parser, &sequence, &simple.Enabled{Name: "tune.disable-fast-forward"})
271273
addParser(parser, &sequence, &simple.Number{Name: "tune.events.max-events-at-once"})
272274
addParser(parser, &sequence, &simple.Enabled{Name: "tune.fail-alloc"})
273275
addParser(parser, &sequence, &simple.OnOff{Name: "tune.fd.edge-triggered"})
@@ -276,10 +278,12 @@ func (p *configParser) getGlobalParser() *Parsers { //nolint: maintidx
276278
addParser(parser, &sequence, &simple.Number{Name: "tune.h2.be.glitches-threshold"})
277279
addParser(parser, &sequence, &simple.Number{Name: "tune.h2.be.initial-window-size"})
278280
addParser(parser, &sequence, &simple.Number{Name: "tune.h2.be.max-concurrent-streams"})
281+
addParser(parser, &sequence, &simple.Size{Name: "tune.h2.be.rxbuf"})
279282
addParser(parser, &sequence, &simple.Number{Name: "tune.h2.fe.glitches-threshold"})
280283
addParser(parser, &sequence, &simple.Number{Name: "tune.h2.fe.initial-window-size"})
281284
addParser(parser, &sequence, &simple.Number{Name: "tune.h2.fe.max-concurrent-streams"})
282285
addParser(parser, &sequence, &simple.Number{Name: "tune.h2.fe.max-total-streams"})
286+
addParser(parser, &sequence, &simple.Size{Name: "tune.h2.fe.rxbuf"})
283287
addParser(parser, &sequence, &simple.Number{Name: "tune.h2.header-table-size"})
284288
addParser(parser, &sequence, &simple.Number{Name: "tune.h2.initial-window-size"})
285289
addParser(parser, &sequence, &simple.Number{Name: "tune.h2.max-concurrent-streams"})
@@ -316,6 +320,8 @@ func (p *configParser) getGlobalParser() *Parsers { //nolint: maintidx
316320
addParser(parser, &sequence, &simple.Number{Name: "tune.rcvbuf.frontend"})
317321
addParser(parser, &sequence, &simple.Number{Name: "tune.rcvbuf.server"})
318322
addParser(parser, &sequence, &simple.Number{Name: "tune.recv_enough"})
323+
addParser(parser, &sequence, &simple.Number{Name: "tune.renice.runtime"})
324+
addParser(parser, &sequence, &simple.Number{Name: "tune.renice.startup"})
319325
addParser(parser, &sequence, &simple.Number{Name: "tune.ring.queues"})
320326
addParser(parser, &sequence, &simple.Number{Name: "tune.runqueue-depth"})
321327
addParser(parser, &sequence, &simple.OnOff{Name: "tune.sched.low-latency"})
@@ -444,6 +450,9 @@ func (p *configParser) getGlobalParser() *Parsers { //nolint: maintidx
444450
addParser(parser, &sequence, &simple.OnOff{Name: "ocsp-update.mode"})
445451
addParser(parser, &sequence, &simple.Enabled{Name: "h1-accept-payload-with-any-method"})
446452
addParser(parser, &sequence, &simple.Enabled{Name: "h1-do-not-close-on-insecure-transfer-encoding"})
453+
addParser(parser, &sequence, &simple.Enabled{Name: "expose-deprecated-directives"})
454+
addParser(parser, &sequence, &simple.Time{Name: "force-cfg-parser-pause"})
455+
addParser(parser, &sequence, &simple.Time{Name: "warn-blocked-traffic-after"})
447456
// the ConfigSnippet must be at the end to parsers load order to ensure
448457
// the overloading of any option has been declared previously
449458
addParser(parser, &sequence, &parsers.ConfigSnippet{})

config-parser/tests/configs/haproxy.cfg.go

+9
Original file line numberDiff line numberDiff line change
@@ -39,16 +39,22 @@ global
3939
tune.buffers.limit 30
4040
tune.buffers.reserve 3
4141
tune.bufsize 32768
42+
tune.bufsize.small 16k
4243
tune.disable-zero-copy-forwarding
44+
tune.disable-fast-forward
4345
tune.events.max-events-at-once 150
4446
tune.h1.zero-copy-fwd-recv on
4547
tune.h1.zero-copy-fwd-send on
4648
tune.h2.be.glitches-threshold 16
49+
tune.h2.be.rxbuf 8k
4750
tune.h2.fe.glitches-threshold 24
4851
tune.h2.fe.max-total-streams 1048576
52+
tune.h2.fe.rxbuf 32k
4953
tune.h2.zero-copy-fwd-send on
5054
tune.lua.maxmem 65536
5155
tune.pt.zero-copy-forwarding on
56+
tune.renice.runtime -10
57+
tune.renice.startup 8
5258
tune.ring.queues 8
5359
tune.ssl.default-dh-param 2048
5460
tune.quic.reorder-ratio 75
@@ -57,6 +63,9 @@ global
5763
ssl-default-bind-ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!3DES:!MD5:!PSK
5864
ssl-load-extra-del-ext
5965
log 127.0.0.1:514 local0 notice
66+
expose-deprecated-directives
67+
force-cfg-parser-pause 1s
68+
warn-blocked-traffic-after 50ms
6069
# random comment before snippet
6170
###_config-snippet_### BEGIN
6271
tune.ssl.default-dh-param 2048

configuration/global.go

+105-2
Original file line numberDiff line numberDiff line change
@@ -1197,6 +1197,15 @@ func parseTuneOptions(p parser.Parser) (*models.TuneOptions, error) { //nolint:g
11971197
options.CompMaxlevel = intOption
11981198
}
11991199

1200+
boolOption, err = parseBoolOption(p, "tune.disable-fast-forward")
1201+
if err != nil {
1202+
return nil, err
1203+
}
1204+
if boolOption {
1205+
isEmpty = false
1206+
options.DisableFastForward = boolOption
1207+
}
1208+
12001209
boolOption, err = parseBoolOption(p, "tune.disable-zero-copy-forwarding")
12011210
if err != nil {
12021211
return nil, err
@@ -1494,6 +1503,15 @@ func parseTuneOptions(p parser.Parser) (*models.TuneOptions, error) { //nolint:g
14941503
options.H2BeMaxConcurrentStreams = intOption
14951504
}
14961505

1506+
intPOption, err = parseSizeOption(p, "tune.h2.be.rxbuf")
1507+
if err != nil {
1508+
return nil, err
1509+
}
1510+
if intPOption != nil {
1511+
isEmpty = false
1512+
options.H2BeRxbuf = intPOption
1513+
}
1514+
14971515
intPOption, err = parseInt64POption(p, "tune.h2.fe.glitches-threshold")
14981516
if err != nil {
14991517
return nil, err
@@ -1530,6 +1548,15 @@ func parseTuneOptions(p parser.Parser) (*models.TuneOptions, error) { //nolint:g
15301548
options.H2FeMaxTotalStreams = intPOption
15311549
}
15321550

1551+
intPOption, err = parseSizeOption(p, "tune.h2.fe.rxbuf")
1552+
if err != nil {
1553+
return nil, err
1554+
}
1555+
if intPOption != nil {
1556+
isEmpty = false
1557+
options.H2FeRxbuf = intPOption
1558+
}
1559+
15331560
strOption, err = parseOnOffOption(p, "tune.h2.zero-copy-fwd-send")
15341561
if err != nil {
15351562
return nil, err
@@ -1548,6 +1575,24 @@ func parseTuneOptions(p parser.Parser) (*models.TuneOptions, error) { //nolint:g
15481575
options.PtZeroCopyForwarding = strOption
15491576
}
15501577

1578+
intPOption, err = parseInt64POption(p, "tune.renice.runtime")
1579+
if err != nil {
1580+
return nil, err
1581+
}
1582+
if intPOption != nil {
1583+
isEmpty = false
1584+
options.ReniceRuntime = intPOption
1585+
}
1586+
1587+
intPOption, err = parseInt64POption(p, "tune.renice.startup")
1588+
if err != nil {
1589+
return nil, err
1590+
}
1591+
if intPOption != nil {
1592+
isEmpty = false
1593+
options.ReniceStartup = intPOption
1594+
}
1595+
15511596
if isEmpty {
15521597
return nil, nil //nolint:nilnil
15531598
}
@@ -1585,6 +1630,15 @@ func parseTuneBufferOptions(p parser.Parser) (*models.TuneBufferOptions, error)
15851630
options.Bufsize = intOption
15861631
}
15871632

1633+
intPOption, err = parseSizeOption(p, "tune.bufsize.small")
1634+
if err != nil {
1635+
return nil, err
1636+
}
1637+
if intPOption != nil {
1638+
isEmpty = false
1639+
options.BufsizeSmall = intPOption
1640+
}
1641+
15881642
intOption, err = parseInt64Option(p, "tune.pipesize")
15891643
if err != nil {
15901644
return nil, err
@@ -2122,6 +2176,12 @@ func ParseGlobalSection(p parser.Parser) (*models.Global, error) { //nolint:goco
21222176
}
21232177
global.EnvironmentOptions = envOptions
21242178

2179+
exposeDeprecatedDirectives, err := parseBoolOption(p, "expose-deprecated-directives")
2180+
if err != nil {
2181+
return nil, err
2182+
}
2183+
global.ExposeDeprecatedDirectives = exposeDeprecatedDirectives
2184+
21252185
exposeExperimentalDirectives, err := parseBoolOption(p, "expose-experimental-directives")
21262186
if err != nil {
21272187
return nil, err
@@ -2140,6 +2200,11 @@ func ParseGlobalSection(p parser.Parser) (*models.Global, error) { //nolint:goco
21402200
}
21412201
global.FiftyOneDegreesOptions = fiftyOneDegreesOptions
21422202

2203+
global.ForceCfgParserPause, err = parseTimeoutOption(p, "force-cfg-parser-pause")
2204+
if err != nil {
2205+
return nil, err
2206+
}
2207+
21432208
gid, err := parseInt64Option(p, "gid")
21442209
if err != nil {
21452210
return nil, err
@@ -2460,6 +2525,11 @@ func ParseGlobalSection(p parser.Parser) (*models.Global, error) { //nolint:goco
24602525
}
24612526
global.Ulimitn = ulimitn
24622527

2528+
global.WarnBlockedTrafficAfter, err = parseTimeoutOption(p, "warn-blocked-traffic-after")
2529+
if err != nil {
2530+
return nil, err
2531+
}
2532+
24632533
wurflOptions, err := parseWurflOptions(p)
24642534
if err != nil {
24652535
return nil, err
@@ -2995,6 +3065,10 @@ func SerializeGlobalSection(p parser.Parser, data *models.Global, opt *options.C
29953065
return err
29963066
}
29973067

3068+
if err := serializeBoolOption(p, "expose-deprecated-directives", data.ExposeDeprecatedDirectives); err != nil {
3069+
return err
3070+
}
3071+
29983072
if err := serializeBoolOption(p, "expose-experimental-directives", data.ExposeExperimentalDirectives); err != nil {
29993073
return err
30003074
}
@@ -3007,6 +3081,10 @@ func SerializeGlobalSection(p parser.Parser, data *models.Global, opt *options.C
30073081
return err
30083082
}
30093083

3084+
if err := serializeTimeoutOption(p, "force-cfg-parser-pause", data.ForceCfgParserPause, opt); err != nil {
3085+
return err
3086+
}
3087+
30103088
if err := serializeInt64Option(p, "gid", data.Gid); err != nil {
30113089
return err
30123090
}
@@ -3233,6 +3311,10 @@ func SerializeGlobalSection(p parser.Parser, data *models.Global, opt *options.C
32333311
return err
32343312
}
32353313

3314+
if err := serializeTimeoutOption(p, "warn-blocked-traffic-after", data.WarnBlockedTrafficAfter, opt); err != nil {
3315+
return err
3316+
}
3317+
32363318
return serializeWurflOptions(p, data.WurflOptions)
32373319
}
32383320

@@ -3337,6 +3419,9 @@ func serializeTuneBufferOptions(p parser.Parser, options *models.TuneBufferOptio
33373419
if err := serializeInt64Option(p, "tune.bufsize", options.Bufsize); err != nil {
33383420
return err
33393421
}
3422+
if err := serializeSizeOption(p, "tune.bufsize.small", options.BufsizeSmall); err != nil {
3423+
return err
3424+
}
33403425
if err := serializeInt64Option(p, "tune.pipesize", options.Pipesize); err != nil {
33413426
return err
33423427
}
@@ -3490,7 +3575,7 @@ func serializeTuneZlibOptions(p parser.Parser, options *models.TuneZlibOptions)
34903575
return serializeInt64Option(p, "tune.zlib.windowsize", options.Windowsize)
34913576
}
34923577

3493-
func serializeTuneOptions(p parser.Parser, options *models.TuneOptions, configOptions *options.ConfigurationOptions) error { //nolint:gocognit
3578+
func serializeTuneOptions(p parser.Parser, options *models.TuneOptions, configOptions *options.ConfigurationOptions) error { //nolint:gocognit,gocyclo,cyclop
34943579
if options == nil {
34953580
options = &models.TuneOptions{}
34963581
}
@@ -3500,6 +3585,9 @@ func serializeTuneOptions(p parser.Parser, options *models.TuneOptions, configOp
35003585
if err := serializeInt64Option(p, "tune.comp.maxlevel", options.CompMaxlevel); err != nil {
35013586
return err
35023587
}
3588+
if err := serializeBoolOption(p, "tune.disable-fast-forward", options.DisableFastForward); err != nil {
3589+
return err
3590+
}
35033591
if err := serializeBoolOption(p, "tune.disable-zero-copy-forwarding", options.DisableZeroCopyForwarding); err != nil {
35043592
return err
35053593
}
@@ -3599,6 +3687,9 @@ func serializeTuneOptions(p parser.Parser, options *models.TuneOptions, configOp
35993687
if err := serializeInt64Option(p, "tune.h2.be.max-concurrent-streams", options.H2BeMaxConcurrentStreams); err != nil {
36003688
return err
36013689
}
3690+
if err := serializeSizeOption(p, "tune.h2.be.rxbuf", options.H2BeRxbuf); err != nil {
3691+
return err
3692+
}
36023693
if err := serializeInt64POption(p, "tune.h2.fe.glitches-threshold", options.H2FeGlitchesThreshold); err != nil {
36033694
return err
36043695
}
@@ -3611,10 +3702,22 @@ func serializeTuneOptions(p parser.Parser, options *models.TuneOptions, configOp
36113702
if err := serializeInt64POption(p, "tune.h2.fe.max-total-streams", options.H2FeMaxTotalStreams); err != nil {
36123703
return err
36133704
}
3705+
if err := serializeSizeOption(p, "tune.h2.fe.rxbuf", options.H2FeRxbuf); err != nil {
3706+
return err
3707+
}
36143708
if err := serializeOnOffOption(p, "tune.h2.zero-copy-fwd-send", options.H2ZeroCopyFwdSend); err != nil {
36153709
return err
36163710
}
3617-
return serializeOnOffOption(p, "tune.pt.zero-copy-forwarding", options.PtZeroCopyForwarding)
3711+
if err := serializeOnOffOption(p, "tune.pt.zero-copy-forwarding", options.PtZeroCopyForwarding); err != nil {
3712+
return err
3713+
}
3714+
if err := serializeInt64POption(p, "tune.renice.runtime", options.ReniceRuntime); err != nil {
3715+
return err
3716+
}
3717+
if err := serializeInt64POption(p, "tune.renice.startup", options.ReniceStartup); err != nil {
3718+
return err
3719+
}
3720+
return nil
36183721
}
36193722

36203723
func serializeTimeoutOption(p parser.Parser, option string, data *int64, opt *options.ConfigurationOptions) error {

models/global_base.go

+45
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)