Skip to content

Commit 4841235

Browse files
authored
feat(db): allow to customize connections (#1562)
Signed-off-by: Miguel Martinez <miguel@chainloop.dev>
1 parent 5e1fc84 commit 4841235

10 files changed

Lines changed: 228 additions & 120 deletions

File tree

app/controlplane/cmd/wire.go

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,11 @@ func wireApp(*conf.Bootstrap, credentials.ReaderWriter, log.Logger, sdk.Availabl
6363
}
6464

6565
func newDataConf(in *conf.Data_Database) *data.NewConfig {
66-
return &data.NewConfig{Driver: in.Driver, Source: in.Source}
66+
c := &data.NewConfig{Driver: in.Driver, Source: in.Source, MaxIdleConns: int(in.MaxIdleConns), MaxOpenConns: int(in.MaxOpenConns)}
67+
if in.MaxConnIdleTime != nil {
68+
c.MaxConnIdleTime = in.MaxConnIdleTime.AsDuration()
69+
}
70+
return c
6771
}
6872

6973
func newPolicyProviderConfig(in []*conf.PolicyProvider) []*policies.NewRegistryConfig {

app/controlplane/cmd/wire_gen.go

Lines changed: 5 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

app/controlplane/configs/config.devel.yaml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,9 @@ data:
5151
database:
5252
driver: pgx
5353
source: postgresql://postgres:@${DB_HOST:0.0.0.0}/controlplane
54+
# max_open_conns: 5
55+
# max_idle_conns: 10
56+
# max_conn_idle_time: 120s
5457

5558
# Development credentials for the SSO authentication roundtrip
5659
auth:

app/controlplane/internal/conf/controlplane/config/v1/conf.pb.go

Lines changed: 134 additions & 93 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

app/controlplane/internal/conf/controlplane/config/v1/conf.proto

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -132,6 +132,14 @@ message Data {
132132
message Database {
133133
string driver = 1;
134134
string source = 2;
135+
// sets the maximum amount of time a connection may be idle.
136+
// default to 10
137+
int32 max_idle_conns = 3;
138+
// if not set defaults to dynamic up to the max number of connections
139+
// provided by the target database
140+
int32 max_open_conns = 4;
141+
// sets the maximum amount of time a connection may be idle
142+
google.protobuf.Duration max_conn_idle_time = 5;
135143
}
136144
Database database = 1;
137145
}

app/controlplane/pkg/data/data.go

Lines changed: 34 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
//
2-
// Copyright 2023 The Chainloop Authors.
2+
// Copyright 2024 The Chainloop Authors.
33
//
44
// Licensed under the Apache License, Version 2.0 (the "License");
55
// you may not use this file except in compliance with the License.
@@ -72,7 +72,9 @@ func (data *Data) SchemaLoad() error {
7272
}
7373

7474
type NewConfig struct {
75-
Driver, Source string
75+
Driver, Source string
76+
MaxIdleConns, MaxOpenConns int
77+
MaxConnIdleTime time.Duration
7678
}
7779

7880
// NewData .
@@ -98,6 +100,12 @@ func NewData(c *NewConfig, logger log.Logger) (*Data, func(), error) {
98100
return &Data{DB: db}, cleanup, nil
99101
}
100102

103+
const (
104+
DefaultMaxIdleConns = 10
105+
DefaultMaxOpenConns = 50
106+
DefaultMaxIdleTime = 5 * time.Minute
107+
)
108+
101109
func initSQLDatabase(c *NewConfig, log *log.Helper) (*ent.Client, error) {
102110
log.Debugf("connecting to db: driver=%s", c.Driver)
103111
db, err := sql.Open(
@@ -108,6 +116,30 @@ func initSQLDatabase(c *NewConfig, log *log.Helper) (*ent.Client, error) {
108116
return nil, fmt.Errorf("error opening the connection, driver=%s: %w", c.Driver, err)
109117
}
110118

119+
maxOpenConns := DefaultMaxOpenConns
120+
if c.MaxOpenConns > 0 {
121+
maxOpenConns = c.MaxOpenConns
122+
}
123+
124+
log.Infof("DB: setting max open conns: %d", maxOpenConns)
125+
db.SetMaxOpenConns(maxOpenConns)
126+
127+
maxIdleConns := DefaultMaxIdleConns
128+
if c.MaxIdleConns > 0 {
129+
maxIdleConns = c.MaxIdleConns
130+
}
131+
132+
log.Infof("DB: setting max idle conns: %d", maxIdleConns)
133+
db.SetMaxIdleConns(maxIdleConns)
134+
135+
maxIdleTime := DefaultMaxIdleTime
136+
if c.MaxConnIdleTime > 0 {
137+
maxIdleTime = c.MaxConnIdleTime
138+
}
139+
140+
log.Infof("DB: setting max conn idle time: %v", maxIdleTime)
141+
db.SetConnMaxIdleTime(maxIdleTime)
142+
111143
// Create an ent.Driver from `db`.
112144
drv := entsql.OpenDB(dialect.Postgres, db)
113145
client := ent.NewClient(ent.Driver(drv))

deployment/chainloop/templates/controlplane/secret-config.yaml

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,15 @@ stringData:
5454
database:
5555
driver: pgx
5656
source: {{include "controlplane.database.connection_string" . }}
57+
{{- if and .Values.controlplane.externalDatabase.maxOpenConns }}
58+
max_open_conns: {{ .Values.controlplane.externalDatabase.maxOpenConns }}
59+
{{- end }}
60+
{{- if and .Values.controlplane.externalDatabase.maxIdleConns }}
61+
max_idle_conns: {{ .Values.controlplane.externalDatabase.maxIdleConns }}
62+
{{- end }}
63+
{{- if and .Values.controlplane.externalDatabase.maxIdleTime }}
64+
max_conn_idle_time: "{{ .Values.controlplane.externalDatabase.maxIdleTime }}"
65+
{{- end }}
5766
5867
credentials_service: {{- include "chainloop.credentials_service_settings" . | indent 6 }}
5968

deployment/chainloop/values.yaml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -217,13 +217,19 @@ controlplane:
217217
## @param controlplane.externalDatabase.user Non-root username
218218
## @param controlplane.externalDatabase.database Database name
219219
## @param controlplane.externalDatabase.password Password for the non-root username
220+
## @extra controlplane.externalDatabase.maxOpenConns Maximum number of open connections to the database. Default: 50
221+
## @extra controlplane.externalDatabase.maxIdleConns Maximum number of connections in the idle connection pool. Default: 10
222+
## @extra controlplane.externalDatabase.maxIdleTime Max time a connection may be idle. Default: 5m
220223
##
221224
externalDatabase:
222225
host: ""
223226
port: 5432
224227
user: ""
225228
database: ""
226229
password: ""
230+
# maxOpenConns: 50
231+
# maxIdleConns: 10
232+
# maxIdleTime: 5m
227233

228234
## @section Control Plane Authentication
229235
auth:

go.mod

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ require (
5353
go.uber.org/zap v1.27.0
5454
golang.org/x/exp v0.0.0-20240325151524-a685a6edb6d8
5555
golang.org/x/oauth2 v0.21.0
56-
golang.org/x/term v0.23.0
56+
golang.org/x/term v0.26.0
5757
google.golang.org/api v0.172.0
5858
google.golang.org/genproto v0.0.0-20240311173647-c811ad7063a7 // indirect
5959
google.golang.org/grpc v1.66.0
@@ -76,7 +76,7 @@ require (
7676
github.com/grpc-ecosystem/go-grpc-middleware/v2 v2.1.0
7777
github.com/in-toto/attestation v0.1.1-0.20231010121940-09a03152c04a
7878
github.com/invopop/jsonschema v0.7.0
79-
github.com/jackc/pgx/v5 v5.5.4
79+
github.com/jackc/pgx/v5 v5.7.1
8080
github.com/muesli/reflow v0.3.0
8181
github.com/open-policy-agent/opa v0.68.0
8282
github.com/openvex/go-vex v0.2.5
@@ -151,7 +151,7 @@ require (
151151
github.com/jackc/pgproto3/v2 v2.3.3 // indirect
152152
github.com/jackc/pgtype v1.14.0 // indirect
153153
github.com/jackc/pgx/v4 v4.18.2 // indirect
154-
github.com/jackc/puddle/v2 v2.2.1 // indirect
154+
github.com/jackc/puddle/v2 v2.2.2 // indirect
155155
github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 // indirect
156156
github.com/jellydator/ttlcache/v3 v3.2.0 // indirect
157157
github.com/jmespath/go-jmespath v0.4.0 // indirect
@@ -294,7 +294,7 @@ require (
294294
github.com/imdario/mergo v0.3.16 // indirect
295295
github.com/inconshreveable/mousetrap v1.1.0 // indirect
296296
github.com/jackc/pgpassfile v1.0.0 // indirect
297-
github.com/jackc/pgservicefile v0.0.0-20221227161230-091c0ba34f0a // indirect
297+
github.com/jackc/pgservicefile v0.0.0-20240606120523-5a60cdf6a761 // indirect
298298
github.com/jedisct1/go-minisign v0.0.0-20230811132847-661be99b8267 // indirect
299299
github.com/josharian/intern v1.0.0 // indirect
300300
github.com/json-iterator/go v1.1.12 // indirect
@@ -352,12 +352,12 @@ require (
352352
go.opentelemetry.io/otel v1.28.0 // indirect
353353
go.opentelemetry.io/otel/trace v1.28.0 // indirect
354354
go.uber.org/multierr v1.11.0 // indirect
355-
golang.org/x/crypto v0.26.0
355+
golang.org/x/crypto v0.29.0
356356
golang.org/x/mod v0.17.0 // indirect
357357
golang.org/x/net v0.28.0 // indirect
358-
golang.org/x/sync v0.8.0 // indirect
359-
golang.org/x/sys v0.23.0 // indirect
360-
golang.org/x/text v0.17.0 // indirect
358+
golang.org/x/sync v0.9.0 // indirect
359+
golang.org/x/sys v0.27.0 // indirect
360+
golang.org/x/text v0.20.0 // indirect
361361
golang.org/x/time v0.6.0 // indirect
362362
golang.org/x/tools v0.21.1-0.20240508182429-e35e4ccd0d2d // indirect
363363
google.golang.org/genproto/googleapis/rpc v0.0.0-20240701130421-f6361c86f094 // indirect

go.sum

Lines changed: 16 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -887,8 +887,9 @@ github.com/jackc/pgproto3/v2 v2.3.2/go.mod h1:WfJCnwN3HIg9Ish/j3sgWXnAfK8A9Y0bwX
887887
github.com/jackc/pgproto3/v2 v2.3.3 h1:1HLSx5H+tXR9pW3in3zaztoEwQYRC9SQaYUHjTSUOag=
888888
github.com/jackc/pgproto3/v2 v2.3.3/go.mod h1:WfJCnwN3HIg9Ish/j3sgWXnAfK8A9Y0bwXYU5xKaEdA=
889889
github.com/jackc/pgservicefile v0.0.0-20200714003250-2b9c44734f2b/go.mod h1:vsD4gTJCa9TptPL8sPkXrLZ+hDuNrZCnj29CQpr4X1E=
890-
github.com/jackc/pgservicefile v0.0.0-20221227161230-091c0ba34f0a h1:bbPeKD0xmW/Y25WS6cokEszi5g+S0QxI/d45PkRi7Nk=
891890
github.com/jackc/pgservicefile v0.0.0-20221227161230-091c0ba34f0a/go.mod h1:5TJZWKEWniPve33vlWYSoGYefn3gLQRzjfDlhSJ9ZKM=
891+
github.com/jackc/pgservicefile v0.0.0-20240606120523-5a60cdf6a761 h1:iCEnooe7UlwOQYpKFhBabPMi4aNAfoODPEFNiAnClxo=
892+
github.com/jackc/pgservicefile v0.0.0-20240606120523-5a60cdf6a761/go.mod h1:5TJZWKEWniPve33vlWYSoGYefn3gLQRzjfDlhSJ9ZKM=
892893
github.com/jackc/pgtype v0.0.0-20190421001408-4ed0de4755e0/go.mod h1:hdSHsc1V01CGwFsrv11mJRHWJ6aifDLfdV3aVjFF0zg=
893894
github.com/jackc/pgtype v0.0.0-20190824184912-ab885b375b90/go.mod h1:KcahbBH1nCMSo2DXpzsoWOAfFkdEtEJpPbVLq8eE+mc=
894895
github.com/jackc/pgtype v0.0.0-20190828014616-a8802b16cc59/go.mod h1:MWlu30kVJrUS8lot6TQqcg7mtthZ9T0EoIBFiJcmcyw=
@@ -902,14 +903,14 @@ github.com/jackc/pgx/v4 v4.12.1-0.20210724153913-640aa07df17c/go.mod h1:1QD0+tgS
902903
github.com/jackc/pgx/v4 v4.18.1/go.mod h1:FydWkUyadDmdNH/mHnGob881GawxeEm7TcMCzkb+qQE=
903904
github.com/jackc/pgx/v4 v4.18.2 h1:xVpYkNR5pk5bMCZGfClbO962UIqVABcAGt7ha1s/FeU=
904905
github.com/jackc/pgx/v4 v4.18.2/go.mod h1:Ey4Oru5tH5sB6tV7hDmfWFahwF15Eb7DNXlRKx2CkVw=
905-
github.com/jackc/pgx/v5 v5.5.4 h1:Xp2aQS8uXButQdnCMWNmvx6UysWQQC+u1EoizjguY+8=
906-
github.com/jackc/pgx/v5 v5.5.4/go.mod h1:ez9gk+OAat140fv9ErkZDYFWmXLfV+++K0uAOiwgm1A=
906+
github.com/jackc/pgx/v5 v5.7.1 h1:x7SYsPBYDkHDksogeSmZZ5xzThcTgRz++I5E+ePFUcs=
907+
github.com/jackc/pgx/v5 v5.7.1/go.mod h1:e7O26IywZZ+naJtWWos6i6fvWK+29etgITqrqHLfoZA=
907908
github.com/jackc/puddle v0.0.0-20190413234325-e4ced69a3a2b/go.mod h1:m4B5Dj62Y0fbyuIc15OsIqK0+JU8nkqQjsgx7dvjSWk=
908909
github.com/jackc/puddle v0.0.0-20190608224051-11cab39313c9/go.mod h1:m4B5Dj62Y0fbyuIc15OsIqK0+JU8nkqQjsgx7dvjSWk=
909910
github.com/jackc/puddle v1.1.3/go.mod h1:m4B5Dj62Y0fbyuIc15OsIqK0+JU8nkqQjsgx7dvjSWk=
910911
github.com/jackc/puddle v1.3.0/go.mod h1:m4B5Dj62Y0fbyuIc15OsIqK0+JU8nkqQjsgx7dvjSWk=
911-
github.com/jackc/puddle/v2 v2.2.1 h1:RhxXJtFG022u4ibrCSMSiu5aOq1i77R3OHKNJj77OAk=
912-
github.com/jackc/puddle/v2 v2.2.1/go.mod h1:vriiEXHvEE654aYKXXjOvZM39qJ0q+azkZFrfEOc3H4=
912+
github.com/jackc/puddle/v2 v2.2.2 h1:PR8nw+E/1w0GLuRFSmiioY6UooMp6KJv0/61nB7icHo=
913+
github.com/jackc/puddle/v2 v2.2.2/go.mod h1:vriiEXHvEE654aYKXXjOvZM39qJ0q+azkZFrfEOc3H4=
913914
github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 h1:BQSFePA1RWJOlocH6Fxy8MmwDt+yVQYULKfN0RoTN8A=
914915
github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99/go.mod h1:1lJo3i6rXxKeerYnT8Nvf0QmHCRC1n8sfWVwXF2Frvo=
915916
github.com/jedib0t/go-pretty/v6 v6.4.7 h1:lwiTJr1DEkAgzljsUsORmWsVn5MQjt1BPJdPCtJ6KXE=
@@ -1623,8 +1624,8 @@ golang.org/x/crypto v0.13.0/go.mod h1:y6Z2r+Rw4iayiXXAIxJIDAJ1zMW4yaTpebo8fPOliY
16231624
golang.org/x/crypto v0.16.0/go.mod h1:gCAAfMLgwOJRpTjQ2zCCt2OcSfYMTeZVSRtQlPC7Nq4=
16241625
golang.org/x/crypto v0.18.0/go.mod h1:R0j02AL6hcrfOiy9T4ZYp/rcWeMxM3L6QYxlOuEG1mg=
16251626
golang.org/x/crypto v0.19.0/go.mod h1:Iy9bg/ha4yyC70EfRS8jz+B6ybOBKMaSxLj6P6oBDfU=
1626-
golang.org/x/crypto v0.26.0 h1:RrRspgV4mU+YwB4FYnuBoKsUapNIL5cohGAmSH3azsw=
1627-
golang.org/x/crypto v0.26.0/go.mod h1:GY7jblb9wI+FOo5y8/S2oY4zWP07AkOJ4+jxCqdqn54=
1627+
golang.org/x/crypto v0.29.0 h1:L5SG1JTTXupVV3n6sUqMTeWbjAyfPwoda2DLX8J8FrQ=
1628+
golang.org/x/crypto v0.29.0/go.mod h1:+F4F4N5hv6v38hfeYwTdx20oUvLLc+QfrE9Ax9HtgRg=
16281629
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
16291630
golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
16301631
golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8=
@@ -1783,8 +1784,8 @@ golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
17831784
golang.org/x/sync v0.2.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
17841785
golang.org/x/sync v0.3.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y=
17851786
golang.org/x/sync v0.6.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
1786-
golang.org/x/sync v0.8.0 h1:3NFvSEYkUoMifnESzZl15y791HH1qU2xm6eCJU5ZPXQ=
1787-
golang.org/x/sync v0.8.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
1787+
golang.org/x/sync v0.9.0 h1:fEo0HyrW1GIgZdpbhCRO0PkJajUS5H9IFUztCgEo2jQ=
1788+
golang.org/x/sync v0.9.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
17881789
golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
17891790
golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
17901791
golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
@@ -1900,8 +1901,8 @@ golang.org/x/sys v0.13.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
19001901
golang.org/x/sys v0.15.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
19011902
golang.org/x/sys v0.16.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
19021903
golang.org/x/sys v0.17.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
1903-
golang.org/x/sys v0.23.0 h1:YfKFowiIMvtgl1UERQoTPPToxltDeZfbj4H7dVUCwmM=
1904-
golang.org/x/sys v0.23.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
1904+
golang.org/x/sys v0.27.0 h1:wBqf8DvsY9Y/2P8gAfPDEYNuS30J4lPHJxXSb/nJZ+s=
1905+
golang.org/x/sys v0.27.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
19051906
golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw=
19061907
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
19071908
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
@@ -1918,8 +1919,8 @@ golang.org/x/term v0.12.0/go.mod h1:owVbMEjm3cBLCHdkQu9b1opXd4ETQWc3BhuQGKgXgvU=
19181919
golang.org/x/term v0.15.0/go.mod h1:BDl952bC7+uMoWR75FIrCDx79TPU9oHkTZ9yRbYOrX0=
19191920
golang.org/x/term v0.16.0/go.mod h1:yn7UURbUtPyrVJPGPq404EukNFxcm/foM+bV/bfcDsY=
19201921
golang.org/x/term v0.17.0/go.mod h1:lLRBjIVuehSbZlaOtGMbcMncT+aqLLLmKrsjNrUguwk=
1921-
golang.org/x/term v0.23.0 h1:F6D4vR+EHoL9/sWAWgAR1H2DcHr4PareCbAaCo1RpuU=
1922-
golang.org/x/term v0.23.0/go.mod h1:DgV24QBUrK6jhZXl+20l6UWznPlwAHm1Q1mGHtydmSk=
1922+
golang.org/x/term v0.26.0 h1:WEQa6V3Gja/BhNxg540hBip/kkaYtRg3cxg4oXSw4AU=
1923+
golang.org/x/term v0.26.0/go.mod h1:Si5m1o57C5nBNQo5z1iq+XDijt21BDBDp2bK0QI8e3E=
19231924
golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
19241925
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
19251926
golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
@@ -1938,8 +1939,8 @@ golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8=
19381939
golang.org/x/text v0.11.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE=
19391940
golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE=
19401941
golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU=
1941-
golang.org/x/text v0.17.0 h1:XtiM5bkSOt+ewxlOE/aE/AKEHibwj/6gvWMl9Rsh0Qc=
1942-
golang.org/x/text v0.17.0/go.mod h1:BuEKDfySbSR4drPmRPG/7iBdf8hvFMuRexcpahXilzY=
1942+
golang.org/x/text v0.20.0 h1:gK/Kv2otX8gz+wn7Rmb3vT96ZwuoxnQlY+HlJVj7Qug=
1943+
golang.org/x/text v0.20.0/go.mod h1:D4IsuqiFMhST5bX19pQ9ikHC2GsaKyk/oF+pn3ducp4=
19431944
golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
19441945
golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
19451946
golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=

0 commit comments

Comments
 (0)