Skip to content

Commit eafbda8

Browse files
authored
Change default values for gRPC keepalive ping options. (#4168)
* Change default values for gRPC keepalive ping options. Signed-off-by: Peter Štibraný <[email protected]> * Fix changelog entry PR number. Signed-off-by: Peter Štibraný <[email protected]> * Updated documentation. Signed-off-by: Peter Štibraný <[email protected]>
1 parent 0595579 commit eafbda8

File tree

4 files changed

+76
-3
lines changed

4 files changed

+76
-3
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
- `-alertmanager.receivers-firewall.block.cidr-networks` renamed to `-alertmanager.receivers-firewall-block-cidr-networks`
88
- `-alertmanager.receivers-firewall.block.private-addresses` renamed to `-alertmanager.receivers-firewall-block-private-addresses`
99
* [CHANGE] Distributor: Added ring status section in the admin page #4151
10+
* [CHANGE] Change default value of `-server.grpc.keepalive.min-time-between-pings` to `10s` and `-server.grpc.keepalive.ping-without-stream-allowed` to `true`. #4168
1011
* [ENHANCEMENT] Alertmanager: introduced new metrics to monitor operation when using `-alertmanager.sharding-enabled`: #4149
1112
* `cortex_alertmanager_state_fetch_replica_state_total`
1213
* `cortex_alertmanager_state_fetch_replica_state_failed_total`

docs/configuration/config-file-reference.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -387,13 +387,13 @@ grpc_tls_config:
387387
# If client sends keepalive ping more often, server will send GOAWAY and close
388388
# the connection.
389389
# CLI flag: -server.grpc.keepalive.min-time-between-pings
390-
[grpc_server_min_time_between_pings: <duration> | default = 5m]
390+
[grpc_server_min_time_between_pings: <duration> | default = 10s]
391391
392392
# If true, server allows keepalive pings even when there are no active
393393
# streams(RPCs). If false, and client sends ping when there are no active
394394
# streams, server will send GOAWAY and close the connection.
395395
# CLI flag: -server.grpc.keepalive.ping-without-stream-allowed
396-
[grpc_server_ping_without_stream_allowed: <boolean> | default = false]
396+
[grpc_server_ping_without_stream_allowed: <boolean> | default = true]
397397
398398
# Output log messages in the given format. Valid formats: [logfmt, json]
399399
# CLI flag: -log.format

pkg/cortex/cortex.go

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -142,7 +142,7 @@ func (c *Config) RegisterFlags(f *flag.FlagSet) {
142142
f.StringVar(&c.HTTPPrefix, "http.prefix", "/api/prom", "HTTP path prefix for Cortex API.")
143143

144144
c.API.RegisterFlags(f)
145-
c.Server.RegisterFlags(f)
145+
c.registerServerFlagsWithChangedDefaultValues(f)
146146
c.Distributor.RegisterFlags(f)
147147
c.Querier.RegisterFlags(f)
148148
c.IngesterClient.RegisterFlags(f)
@@ -281,6 +281,27 @@ func (c *Config) validateYAMLEmptyNodes() error {
281281
return nil
282282
}
283283

284+
func (c *Config) registerServerFlagsWithChangedDefaultValues(fs *flag.FlagSet) {
285+
throwaway := flag.NewFlagSet("throwaway", flag.PanicOnError)
286+
287+
// Register to throwaway flags first. Default values are remembered during registration and cannot be changed,
288+
// but we can take values from throwaway flag set and reregister into supplied flags with new default values.
289+
c.Server.RegisterFlags(throwaway)
290+
291+
throwaway.VisitAll(func(f *flag.Flag) {
292+
// Ignore errors when setting new values. We have a test to verify that it works.
293+
switch f.Name {
294+
case "server.grpc.keepalive.min-time-between-pings":
295+
_ = f.Value.Set("10s")
296+
297+
case "server.grpc.keepalive.ping-without-stream-allowed":
298+
_ = f.Value.Set("true")
299+
}
300+
301+
fs.Var(f.Value, f.Name, f.Usage)
302+
})
303+
}
304+
284305
// Cortex is the root datastructure for Cortex.
285306
type Cortex struct {
286307
Cfg Config

pkg/cortex/cortex_test.go

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,19 @@
11
package cortex
22

33
import (
4+
"bytes"
45
"context"
6+
"flag"
7+
"io"
58
"net"
69
"net/url"
710
"strconv"
11+
"strings"
812
"testing"
13+
"time"
914

1015
"github.com/prometheus/client_golang/prometheus"
16+
"github.com/stretchr/testify/assert"
1117
"github.com/stretchr/testify/require"
1218
"github.com/weaveworks/common/server"
1319
"go.uber.org/atomic"
@@ -203,6 +209,51 @@ func TestGrpcAuthMiddleware(t *testing.T) {
203209
}
204210
}
205211

212+
func TestFlagDefaults(t *testing.T) {
213+
c := Config{}
214+
215+
f := flag.NewFlagSet("test", flag.PanicOnError)
216+
c.RegisterFlags(f)
217+
218+
buf := bytes.Buffer{}
219+
220+
f.SetOutput(&buf)
221+
f.PrintDefaults()
222+
223+
const delim = '\n'
224+
225+
minTimeChecked := false
226+
pingWithoutStreamChecked := false
227+
for {
228+
line, err := buf.ReadString(delim)
229+
if err == io.EOF {
230+
break
231+
}
232+
233+
require.NoError(t, err)
234+
235+
if strings.Contains(line, "-server.grpc.keepalive.min-time-between-pings") {
236+
nextLine, err := buf.ReadString(delim)
237+
require.NoError(t, err)
238+
assert.Contains(t, nextLine, "(default 10s)")
239+
minTimeChecked = true
240+
}
241+
242+
if strings.Contains(line, "-server.grpc.keepalive.ping-without-stream-allowed") {
243+
nextLine, err := buf.ReadString(delim)
244+
require.NoError(t, err)
245+
assert.Contains(t, nextLine, "(default true)")
246+
pingWithoutStreamChecked = true
247+
}
248+
}
249+
250+
require.True(t, minTimeChecked)
251+
require.True(t, pingWithoutStreamChecked)
252+
253+
require.Equal(t, true, c.Server.GRPCServerPingWithoutStreamAllowed)
254+
require.Equal(t, 10*time.Second, c.Server.GRPCServerMinTimeBetweenPings)
255+
}
256+
206257
// Generates server config, with gRPC listening on random port.
207258
func getServerConfig(t *testing.T) server.Config {
208259
listen, err := net.Listen("tcp", "localhost:0")

0 commit comments

Comments
 (0)