From 99a5742a15f107d4607d280c825eca5b7f09a253 Mon Sep 17 00:00:00 2001 From: Saswata Mukherjee Date: Tue, 13 Aug 2024 11:57:29 +0100 Subject: [PATCH] Cut patch release `v0.36.1` (#7636) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Proxy: Query goroutine leak when `store.response-timeout` is set (#7618) time.AfterFunc() returns a time.Timer object whose C field is nil, accroding to the documentation. A goroutine blocks forever on reading from a `nil` channel, leading to a goroutine leak on random slow queries. Signed-off-by: Mikhail Nozdrachev * pkg/clientconfig: fix TLS configs with only CA (#7634) 065e3dd75a introduced a regression: TLS configurations for Thanos Ruler query and alerting with only a CA file failed to load. For instance, the following snippet is a valid query configuration: ``` - static_configs: - prometheus.example.com:9090 scheme: https http_config: tls_config: ca_file: /etc/ssl/cert.pem ``` The test fixtures (CA, certificate and key files) are copied from prometheus/common and are valid until 2072. Signed-off-by: Simon Pasquier * Cut patch release v0.36.1 Signed-off-by: Saswata Mukherjee * Fix failing e2e test (#7620) Signed-off-by: 🌲 Harry 🌊 John 🏔 Signed-off-by: Saswata Mukherjee --------- Signed-off-by: Mikhail Nozdrachev Signed-off-by: Simon Pasquier Signed-off-by: Saswata Mukherjee Signed-off-by: 🌲 Harry 🌊 John 🏔 Co-authored-by: Mikhail Nozdrachev Co-authored-by: Simon Pasquier Co-authored-by: Harry John --- CHANGELOG.md | 13 +++ VERSION | 2 +- cmd/thanos/rule.go | 6 +- pkg/clientconfig/http.go | 17 +++- pkg/clientconfig/http_test.go | 95 +++++++++++++++++++ pkg/clientconfig/testdata/invalid.pem | 0 .../testdata/self-signed-client.crt | 30 ++++++ .../testdata/self-signed-client.key | 52 ++++++++++ pkg/clientconfig/testdata/tls-ca-chain.pem | 67 +++++++++++++ pkg/store/proxy_merge.go | 8 +- test/e2e/receive_test.go | 12 +-- 11 files changed, 285 insertions(+), 17 deletions(-) create mode 100644 pkg/clientconfig/http_test.go create mode 100644 pkg/clientconfig/testdata/invalid.pem create mode 100644 pkg/clientconfig/testdata/self-signed-client.crt create mode 100644 pkg/clientconfig/testdata/self-signed-client.key create mode 100644 pkg/clientconfig/testdata/tls-ca-chain.pem diff --git a/CHANGELOG.md b/CHANGELOG.md index 2a2b552d2a..78aa7078a0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -18,6 +18,19 @@ We use *breaking :warning:* to mark changes that are not backward compatible (re ### Removed +## [v0.36.1](https://github.com/thanos-io/thanos/tree/release-0.36) + +### Fixed + +- [#7634](https://github.com/thanos-io/thanos/pull/7634) Rule: fix Query and Alertmanager TLS configurations with CA only. +- [#7618](https://github.com/thanos-io/thanos/pull/7618) Proxy: Query goroutine leak when store.response-timeout is set + +### Added + +### Changed + +### Removed + ## [v0.36.0](https://github.com/thanos-io/thanos/tree/release-0.36) ### Fixed diff --git a/VERSION b/VERSION index 93d4c1ef06..19199bccac 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -0.36.0 +0.36.1 diff --git a/cmd/thanos/rule.go b/cmd/thanos/rule.go index 3cff43ca7c..b6a134a4b2 100644 --- a/cmd/thanos/rule.go +++ b/cmd/thanos/rule.go @@ -325,7 +325,7 @@ func runRule( if len(conf.queryConfigYAML) > 0 { queryCfg, err = clientconfig.LoadConfigs(conf.queryConfigYAML) if err != nil { - return err + return errors.Wrap(err, "query configuration") } } else { queryCfg, err = clientconfig.BuildConfigFromHTTPAddresses(conf.query.addrs) @@ -382,12 +382,12 @@ func runRule( cfg.HTTPConfig.HTTPClientConfig.ClientMetrics = queryClientMetrics c, err := clientconfig.NewHTTPClient(cfg.HTTPConfig.HTTPClientConfig, "query") if err != nil { - return err + return fmt.Errorf("failed to create HTTP query client: %w", err) } c.Transport = tracing.HTTPTripperware(logger, c.Transport) queryClient, err := clientconfig.NewClient(logger, cfg.HTTPConfig.EndpointsConfig, c, queryProvider.Clone()) if err != nil { - return err + return fmt.Errorf("failed to create query client: %w", err) } queryClients = append(queryClients, queryClient) promClients = append(promClients, promclient.NewClient(queryClient, logger, "thanos-rule")) diff --git a/pkg/clientconfig/http.go b/pkg/clientconfig/http.go index dc94938d75..69f2baf165 100644 --- a/pkg/clientconfig/http.go +++ b/pkg/clientconfig/http.go @@ -199,11 +199,18 @@ func NewRoundTripperFromConfig(cfg config_util.HTTPClientConfig, transportConfig return newRT(tlsConfig) } - return config_util.NewTLSRoundTripper(tlsConfig, config_util.TLSRoundTripperSettings{ - CA: config_util.NewFileSecret(cfg.TLSConfig.CAFile), - Cert: config_util.NewFileSecret(cfg.TLSConfig.CertFile), - Key: config_util.NewFileSecret(cfg.TLSConfig.KeyFile), - }, newRT) + rtConfig := config_util.TLSRoundTripperSettings{ + Cert: config_util.NewFileSecret(cfg.TLSConfig.CAFile), + } + if len(cfg.TLSConfig.CertFile) > 0 { + rtConfig.Cert = config_util.NewFileSecret(cfg.TLSConfig.CertFile) + } + + if len(cfg.TLSConfig.KeyFile) > 0 { + rtConfig.Key = config_util.NewFileSecret(cfg.TLSConfig.KeyFile) + } + + return config_util.NewTLSRoundTripper(tlsConfig, rtConfig, newRT) } // NewHTTPClient returns a new HTTP client. diff --git a/pkg/clientconfig/http_test.go b/pkg/clientconfig/http_test.go new file mode 100644 index 0000000000..eb1296da9d --- /dev/null +++ b/pkg/clientconfig/http_test.go @@ -0,0 +1,95 @@ +// Copyright (c) The Thanos Authors. +// Licensed under the Apache License 2.0. + +package clientconfig + +import ( + "testing" + + "github.com/efficientgo/core/testutil" +) + +func TestNewHTTPClientConfigFromYAML(t *testing.T) { + for _, tc := range []struct { + desc string + cfg HTTPClientConfig + err bool + }{ + { + desc: "empty string", + cfg: HTTPClientConfig{}, + err: false, + }, + { + desc: "missing CA file", + cfg: HTTPClientConfig{ + TLSConfig: TLSConfig{ + CAFile: "xxx", + }, + }, + err: true, + }, + { + desc: "invalid CA file", + cfg: HTTPClientConfig{ + TLSConfig: TLSConfig{ + CAFile: "testdata/invalid.pem", + }, + }, + err: true, + }, + { + desc: "valid CA file", + cfg: HTTPClientConfig{ + TLSConfig: TLSConfig{ + CAFile: "testdata/tls-ca-chain.pem", + }, + }, + err: false, + }, + { + desc: "invalid cert file", + cfg: HTTPClientConfig{ + TLSConfig: TLSConfig{ + CAFile: "testdata/tls-ca-chain.pem", + CertFile: "testdata/invalid.pem", + KeyFile: "testdata/self-signed-client.key", + }, + }, + err: true, + }, + { + desc: "invalid key file", + cfg: HTTPClientConfig{ + TLSConfig: TLSConfig{ + CAFile: "testdata/tls-ca-chain.pem", + CertFile: "testdata/self-signed-client.crt", + KeyFile: "testdata/invalid.pem", + }, + }, + err: true, + }, + { + desc: "valid CA, cert and key files", + cfg: HTTPClientConfig{ + TLSConfig: TLSConfig{ + CAFile: "testdata/tls-ca-chain.pem", + CertFile: "testdata/self-signed-client.crt", + KeyFile: "testdata/self-signed-client.key", + }, + }, + err: false, + }, + } { + t.Run(tc.desc, func(t *testing.T) { + _, err := NewHTTPClient(tc.cfg, "") + if tc.err { + t.Logf("err: %v", err) + testutil.NotOk(t, err) + return + } + + testutil.Ok(t, err) + }) + } +} diff --git a/pkg/clientconfig/testdata/invalid.pem b/pkg/clientconfig/testdata/invalid.pem new file mode 100644 index 0000000000..e69de29bb2 diff --git a/pkg/clientconfig/testdata/self-signed-client.crt b/pkg/clientconfig/testdata/self-signed-client.crt new file mode 100644 index 0000000000..a0a5cdc6ac --- /dev/null +++ b/pkg/clientconfig/testdata/self-signed-client.crt @@ -0,0 +1,30 @@ +-----BEGIN CERTIFICATE----- +MIIFLjCCAxagAwIBAgIRAMMSh5NoexSCjSvDRf1fpgUwDQYJKoZIhvcNAQELBQAw +NjELMAkGA1UEBhMCVVMxEzARBgNVBAoTClByb21ldGhldXMxEjAQBgNVBAMTCWxv +Y2FsaG9zdDAgFw0yMjA3MDgwOTE1MDlaGA8yMDcyMDYyNTA5MTUwOVowNjELMAkG +A1UEBhMCVVMxEzARBgNVBAoTClByb21ldGhldXMxEjAQBgNVBAMTCWxvY2FsaG9z +dDCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBALtrXxnHr7eUM7Xh7awY +LwompmuznbTa/8+OsihSaelUN6RDsAdm7eOMA7KMqZB5NOfeDqEqMIUoaoQ1gzIm +0BJ4dCgi99SnA8b0MjAGqUpRJ3gLLSXsPa5647gxUSP5zQ0hWMMgGaw4rJ9LDOtU +z2S8dtqKTHrXl34mpdsLrZyLXwyz8UJ83Jq2Ngx4cApZrbs+g1XlMRV8Vh89Z2bk +bbKmDYmIOhTeE1wLdrZ/XecEOvkGZcj3bWiO/yTnP8mTER2hTvSxUrpyHn/55LkU +8PR6wCO7hntZ9LLWxg85XTRdWL7cIyjgJgfL9+hVQQyNEjWC2+LTq1QExqa+IxoH +iL4xX/1y+6o1W5XKLf/uplgaWuSK+mjQeqc387DwYbj61QWOjCoaJA1wl6RHuGGV +6ygpdAO1l8o+2U8nuULHW5lx+1BtMG5ytAXy9dWPercs5L8gh1IRNCVXWKsQCCWg +iG67nErFV5iRFLuAIX7ixLKJ5MGp/fVKUI9V1EViM2GUU46PVAPhhlZ1qcygjbZ5 +CelBnQ/XvGof5b4zm4eEgCc0ZkqsQDeS5jPjTtES8/y5WEKqbyijmvx2P40nuO/d +aTxNretMwaptWzu+WXHih0WG2Sq85m41070xsIMEwlqSfdiOOPdax6393NJgkdM7 +5NKC3+pzcHK1S1+x/Guawv0NAgMBAAGjNTAzMA4GA1UdDwEB/wQEAwIFIDATBgNV +HSUEDDAKBggrBgEFBQcDAjAMBgNVHRMBAf8EAjAAMA0GCSqGSIb3DQEBCwUAA4IC +AQBTLnU8jFCmYpPUBOqj/xzBqokiQK92axG/h/3JgB7fFSLzUCV3NtvwBVCU28rA +wHwBYPjmGhi1vyHha/hb6V2WMPt0jhMRpNxCf16dAMoyIoWNas88vU2Mef90Chfj +8e6wLtzqAquX/ruwIfsOMnbcSGuh+y54DspCXgsTZ9cnCI2lnQroXZi4WUqi3Enj +mFPpVc+mMlffGW6LISo3ehRLA7k3/01yJhqzpTQw44k9ZfJ7VXZTRJKJsaqeljzV +VfzDbDfW8ftbZ8IWQGAOQfTa23aHIYcvJfvyxpfQRyrwRxjGytLHoOH/G+1TZuOt +KBJ2Xdi9qrr+Wep4eNJm2cTBd1Fpr0hWZ9K27BwwYdZZF8Eu8eP8hSeRmA4PqzAj +HauCl8PgWJIWzMloXVZaGxiYX7sGVs79m/Yl9A6+p8RTpK7DVB9+sDIiD2bhiZqL +i9YWM8aD2cR20t2ZkuBBPlVTOouF/WotOWrLhT4J+SngkdmLkAjP/5jPFvpTfeGi +THyAmp4gigwaM0nIZskPcPCbkk+zFYPToyS49ZJwQMzqK2hkjyQ9LyzUdo9vlDjL +8lFjlUZzqaR0DF3pbf8fs5/16gPurR65SU/ebOs+uxZLYJrP2zKmeISE+q4AMudc +rQ0Z6KmGUiXnIvpB105UJ7jlXCxbsruc8gRTbjkgW7yoXg== +-----END CERTIFICATE----- diff --git a/pkg/clientconfig/testdata/self-signed-client.key b/pkg/clientconfig/testdata/self-signed-client.key new file mode 100644 index 0000000000..4e4b2c2eaf --- /dev/null +++ b/pkg/clientconfig/testdata/self-signed-client.key @@ -0,0 +1,52 @@ +-----BEGIN PRIVATE KEY----- +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 +vOJ7/LvbOa8BlIMsprB2rz3PDSUSaIw= +-----END PRIVATE KEY----- diff --git a/pkg/clientconfig/testdata/tls-ca-chain.pem b/pkg/clientconfig/testdata/tls-ca-chain.pem new file mode 100644 index 0000000000..b67023a7d1 --- /dev/null +++ b/pkg/clientconfig/testdata/tls-ca-chain.pem @@ -0,0 +1,67 @@ +-----BEGIN CERTIFICATE----- +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 +0ig2QvMFWMw= +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIFtDCCA5ygAwIBAgIRAMMSh5NoexSCjSvDRf1fpgEwDQYJKoZIhvcNAQELBQAw +ajELMAkGA1UEBhMCVVMxEzARBgNVBAoTClByb21ldGhldXMxKTAnBgNVBAsTIFBy +b21ldGhldXMgQ2VydGlmaWNhdGUgQXV0aG9yaXR5MRswGQYDVQQDExJQcm9tZXRo +ZXVzIFJvb3QgQ0EwIBcNMjIwNzA4MDkxNTA0WhgPMjA3MjA2MjUwOTE1MDRaMGox +CzAJBgNVBAYTAlVTMRMwEQYDVQQKEwpQcm9tZXRoZXVzMSkwJwYDVQQLEyBQcm9t +ZXRoZXVzIENlcnRpZmljYXRlIEF1dGhvcml0eTEbMBkGA1UEAxMSUHJvbWV0aGV1 +cyBSb290IENBMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEArkzRPi21 +E299vXw4FBbMfCXI258SxvvjRVRuKdAHLOBpEEqkYH6r6ScbZaisBFtIePv4ddKl +rmv+nDwN84/KS54OOtw1cWD4AnDB0kL3B0pWXjTS1F/u57hRLxM6Ta0UubKbta/h +WqSOR/fAA5sgcl+JbbR61QWVeYYXg9bM8YGTwQMeJod26tIUeX/Reo9BHuiW4jPb +pvVf7rsOs8E2cGwfYjZu6Zj2qcCxQ/ivCpopKFLNlaKko/KlGDGz9KxK5X3ik+sE +fPK9LzLC0k2RLGc3EmcMkdyqE3VNih9nV9SalAXN5yBdYaWWjJXykty7ilU32MBF +yO4myL48vif2K68pD/CFhG8YmIOud3woMm1IYS9xlsYKf7+f5CNlxqz+eSoOGhcG +dSDNft3h5nuq9J/qb2rIgWMSc2puFNRsx+fis0kS5GvjVadR0lxtArbrNm4S+F22 +EjGxeBF5VIWiu31uppbdASIw6DTKcrSVVoWxq+Fk3OOB+7q+rornosop9a/omXGH +0cTmgarjJtMqa0TEQiUPQPPnmpC1joeC7/kh7aks93wfHtY73uAVnTjLGTOwlr50 +CgRShcRoLLN049V93l46AFHU/4HWns8dqgdcdGnvIdUCFik916pKDSvEc/DfMLGh +H6w9Xlg4+2LgCyG2/FBEMTj+bLoraydzyaECAwEAAaNTMFEwDgYDVR0PAQH/BAQD +AgKkMA8GA1UdJQQIMAYGBFUdJQAwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQU +ST6xDptmazIK/QBU8/S2ctHwzTYwDQYJKoZIhvcNAQELBQADggIBAHM79R/uQwQX +vsBDfKyBXWFlrhHAgX8XAwMKHjstpQYCcJoiGLRJaMMjxj31T1tylqPdcxz88THN +uj9kVFYMo1GU5K9E9lq0LoWQBmX2R7/RgxWqB7FNS+S0xfGyeUb3YPVPI1yhtsKa +6mCtTuCVgsgs/hTa+umjtffxj7l+IQxD8Fq0RFBae+S0v5mjVC2sUVd6usqVt7F6 +LUVuYShyAI705guIV9nkz8ZyLzUBJnQAJ8g6DU+nLmdizigUG+JoD/hBbK2hvcjX +SL7JLAhYRI4kzWcYR0GUfDf2knFEWNhU8gCPnw70FHMD9QC3NKkQsPvyQRyJh99+ +ipwUFbGJJRYWjFBbUxlqZNqBg6+ylZNFGEnG42u2KvPXjgPdivlQWkrX6nG0ayyl +rYrvi0FawP3OBpCrhYhqsqkA2m+5L2Pl+J2SsDv4qmPB6fh7K0YDVB37AZSG+nfL +oXXpUtwfc9tR71S7GmgkcqYOkHfSzl7ecxXtE2xyl3zhkUPR9YcG+rQhXRRp0lxF +kR0EtGOGuvXMCQ/vBVPNEDS3jdceqIrIRI1yPUdhFkF7lrLsfFULllOt6qQWnhn2 +A2ObxHToohwuyri/v8QhqNI2Bg0jJHcAJi8I8taToAstCWrtn+WXyfj/QknAik47 +aOK9l5wSyyqPfkHybKvT6z9pqWUchJsz +-----END CERTIFICATE----- diff --git a/pkg/store/proxy_merge.go b/pkg/store/proxy_merge.go index fa002cc9b1..e2764d574a 100644 --- a/pkg/store/proxy_merge.go +++ b/pkg/store/proxy_merge.go @@ -361,7 +361,9 @@ func newLazyRespSet( var rerr error // If timer is already stopped if t != nil && !t.Stop() { - <-t.C // Drain the channel if it was already stopped. + if t.C != nil { + <-t.C // Drain the channel if it was already stopped. + } rerr = errors.Wrapf(err, "failed to receive any data in %s from %s", l.frameTimeout, st) } else { rerr = errors.Wrapf(err, "receive series from %s", st) @@ -614,7 +616,9 @@ func newEagerRespSet( var rerr error // If timer is already stopped if t != nil && !t.Stop() { - <-t.C // Drain the channel if it was already stopped. + if t.C != nil { + <-t.C // Drain the channel if it was already stopped. + } rerr = errors.Wrapf(err, "failed to receive any data in %s from %s", l.frameTimeout, storeName) } else { rerr = errors.Wrapf(err, "receive series from %s", storeName) diff --git a/test/e2e/receive_test.go b/test/e2e/receive_test.go index e874c38713..b6d8a49f30 100644 --- a/test/e2e/receive_test.go +++ b/test/e2e/receive_test.go @@ -848,9 +848,9 @@ test_metric{a="2", b="2"} 1`) e2ethanos.AvalancheOptions{ MetricCount: "10", SeriesCount: "1", - MetricInterval: "30", - SeriesInterval: "3600", - ValueInterval: "3600", + MetricInterval: "3600", + SeriesInterval: "30", + ValueInterval: "30", RemoteURL: e2ethanos.RemoteWriteEndpoint(ingestor1.InternalEndpoint("remote-write")), RemoteWriteInterval: "30s", @@ -886,9 +886,9 @@ test_metric{a="2", b="2"} 1`) e2ethanos.AvalancheOptions{ MetricCount: "10", SeriesCount: "1", - MetricInterval: "30", - SeriesInterval: "3600", - ValueInterval: "3600", + MetricInterval: "3600", + SeriesInterval: "30", + ValueInterval: "30", RemoteURL: e2ethanos.RemoteWriteEndpoint(ingestor1.InternalEndpoint("remote-write")), RemoteWriteInterval: "30s",