From c77d4f11b26eafb81738c7d0d1a1294622b3e446 Mon Sep 17 00:00:00 2001 From: Alvin Lin Date: Sat, 3 Sep 2022 23:26:07 -0700 Subject: [PATCH] Remove use of io/ioutil package because its deprecated Signed-off-by: Alvin Lin --- .gitignore | 1 + .golangci.yml | 1 - cmd/cortex/main.go | 6 ++--- integration/api_endpoints_test.go | 4 +-- integration/e2e/scenario_test.go | 6 ++--- integration/e2e/service.go | 6 ++--- integration/e2e/util.go | 3 +-- integration/querier_remote_read_test.go | 4 +-- integration/util.go | 5 ++-- pkg/alertmanager/alertmanager_http_test.go | 4 +-- .../alertstore/bucketclient/bucket_client.go | 4 +-- pkg/alertmanager/alertstore/local/store.go | 3 +-- .../alertstore/local/store_test.go | 15 +++++------ pkg/alertmanager/api.go | 5 ++-- pkg/alertmanager/api_test.go | 6 ++--- pkg/alertmanager/distributor.go | 6 ++--- pkg/alertmanager/multitenant.go | 15 +++++------ pkg/alertmanager/multitenant_test.go | 14 +++++----- pkg/api/handlers_test.go | 6 ++--- pkg/compactor/block_visit_marker.go | 4 +-- pkg/compactor/compactor.go | 3 +-- pkg/compactor/compactor_test.go | 5 ++-- pkg/configs/api/api.go | 4 +-- pkg/frontend/frontend_test.go | 8 +++--- pkg/frontend/transport/handler.go | 5 ++-- pkg/frontend/transport/roundtripper.go | 3 +-- pkg/frontend/v1/frontend_test.go | 8 +++--- pkg/ingester/ingester_test.go | 9 +++---- pkg/querier/metadata_handler_test.go | 6 ++--- pkg/querier/queryrange/marshaling_test.go | 4 +-- pkg/querier/queryrange/query_range.go | 6 ++--- pkg/querier/queryrange/query_range_test.go | 10 +++---- pkg/querier/queryrange/roundtrip.go | 3 +-- pkg/querier/queryrange/roundtrip_test.go | 4 +-- .../queryrange/split_by_interval_test.go | 6 ++--- pkg/querier/remote_read_test.go | 4 +-- pkg/ruler/api.go | 4 +-- pkg/ruler/api_test.go | 7 +++-- pkg/ruler/ruler_test.go | 4 +-- .../rulestore/bucketclient/bucket_client.go | 4 +-- pkg/ruler/rulestore/local/local.go | 27 ++++++++++--------- pkg/ruler/rulestore/local/local_test.go | 5 ++-- pkg/storage/bucket/client_mock.go | 5 ++-- .../tsdb/bucketindex/markers_bucket_client.go | 3 +-- pkg/storage/tsdb/bucketindex/updater.go | 4 +-- pkg/storage/tsdb/testutil/objstore.go | 3 +-- pkg/storegateway/bucket_stores.go | 3 +-- pkg/storegateway/bucket_stores_test.go | 3 +-- pkg/storegateway/gateway_test.go | 5 ++-- pkg/util/http_test.go | 4 +-- pkg/util/process/collector.go | 4 +-- pkg/util/process/collector_test.go | 5 ++-- pkg/util/tls/test/tls_integration_test.go | 3 +-- pkg/util/tls/tls.go | 4 +-- pkg/util/tls/tls_test.go | 8 +++--- tools/query-audit/config.go | 4 +-- tools/querytee/proxy_backend.go | 4 +-- tools/querytee/proxy_test.go | 6 ++--- tools/thanosconvert/thanosconvert_test.go | 6 ++--- tools/website/website.go | 5 ++-- 60 files changed, 158 insertions(+), 178 deletions(-) diff --git a/.gitignore b/.gitignore index c610d30757..3c6d302297 100644 --- a/.gitignore +++ b/.gitignore @@ -24,5 +24,6 @@ dist/ Makefile.local .idea +.vscode compose compose-simple diff --git a/.golangci.yml b/.golangci.yml index 2d45dc696b..6667d2703a 100644 --- a/.golangci.yml +++ b/.golangci.yml @@ -13,7 +13,6 @@ linters-settings: staticcheck: checks: - all - - "-SA1019" # Disable because too many file uses io/ioutil now, will fix later errcheck: # path to a file containing a list of functions to exclude from checking # see https://github.com/kisielk/errcheck#excluding-functions for details diff --git a/cmd/cortex/main.go b/cmd/cortex/main.go index 1341f43146..0b60f55b75 100644 --- a/cmd/cortex/main.go +++ b/cmd/cortex/main.go @@ -5,7 +5,7 @@ import ( "crypto/sha256" "flag" "fmt" - "io/ioutil" + "io" "math/rand" "os" "runtime" @@ -204,7 +204,7 @@ func main() { func parseConfigFileParameter(args []string) (configFile string, expandEnv bool) { // ignore errors and any output here. Any flag errors will be reported by main flag.Parse() call. fs := flag.NewFlagSet("", flag.ContinueOnError) - fs.SetOutput(ioutil.Discard) + fs.SetOutput(io.Discard) // usage not used in these functions. fs.StringVar(&configFile, configFileOption, "", "") @@ -223,7 +223,7 @@ func parseConfigFileParameter(args []string) (configFile string, expandEnv bool) // LoadConfig read YAML-formatted config from filename into cfg. func LoadConfig(filename string, expandENV bool, cfg *cortex.Config) error { - buf, err := ioutil.ReadFile(filename) + buf, err := os.ReadFile(filename) if err != nil { return errors.Wrap(err, "Error reading config file") } diff --git a/integration/api_endpoints_test.go b/integration/api_endpoints_test.go index 7ec73a46ad..9cd9a79aa5 100644 --- a/integration/api_endpoints_test.go +++ b/integration/api_endpoints_test.go @@ -5,7 +5,7 @@ package integration import ( "fmt" - "io/ioutil" + "io" "net/http" "testing" @@ -55,7 +55,7 @@ func TestConfigAPIEndpoint(t *testing.T) { require.NoError(t, err) defer runutil.ExhaustCloseWithErrCapture(&err, res.Body, "config API response") - body, err := ioutil.ReadAll(res.Body) + body, err := io.ReadAll(res.Body) require.NoError(t, err) require.Equal(t, http.StatusOK, res.StatusCode) diff --git a/integration/e2e/scenario_test.go b/integration/e2e/scenario_test.go index 214f25c9dd..50b61dbc07 100644 --- a/integration/e2e/scenario_test.go +++ b/integration/e2e/scenario_test.go @@ -6,7 +6,7 @@ package e2e_test import ( "bytes" "context" - "io/ioutil" + "io" "testing" "time" @@ -65,13 +65,13 @@ func testMinioWorking(t *testing.T, m *e2e.HTTPService) { r, err := bkt.Get(ctx, "recipe") require.NoError(t, err) - b, err = ioutil.ReadAll(r) + b, err = io.ReadAll(r) require.NoError(t, err) require.Equal(t, "Just go to Pastry Shop and buy.", string(b)) r, err = bkt.Get(ctx, "mom/recipe") require.NoError(t, err) - b, err = ioutil.ReadAll(r) + b, err = io.ReadAll(r) require.NoError(t, err) require.Equal(t, "https://www.bbcgoodfood.com/recipes/strawberry-cheesecake-4-easy-steps", string(b)) } diff --git a/integration/e2e/service.go b/integration/e2e/service.go index be2c20addc..8f0bdf2374 100644 --- a/integration/e2e/service.go +++ b/integration/e2e/service.go @@ -4,7 +4,7 @@ import ( "bytes" "context" "fmt" - "io/ioutil" + "io" "net" "os/exec" "regexp" @@ -418,7 +418,7 @@ func (p *HTTPReadinessProbe) Ready(service *ConcreteService) (err error) { } defer runutil.ExhaustCloseWithErrCapture(&err, res.Body, "response readiness") - body, _ := ioutil.ReadAll(res.Body) + body, _ := io.ReadAll(res.Body) if res.StatusCode < p.expectedStatusRangeStart || res.StatusCode > p.expectedStatusRangeEnd { return fmt.Errorf("expected code in range: [%v, %v], got status code: %v and body: %v", p.expectedStatusRangeStart, p.expectedStatusRangeEnd, res.StatusCode, string(body)) @@ -534,7 +534,7 @@ func (s *HTTPService) Metrics() (_ string, err error) { } defer runutil.ExhaustCloseWithErrCapture(&err, res.Body, "metrics response") - body, err := ioutil.ReadAll(res.Body) + body, err := io.ReadAll(res.Body) return string(body), err } diff --git a/integration/e2e/util.go b/integration/e2e/util.go index 4c80c1ab20..3ed7eed675 100644 --- a/integration/e2e/util.go +++ b/integration/e2e/util.go @@ -2,7 +2,6 @@ package e2e import ( "context" - "io/ioutil" "math" "math/rand" "net/http" @@ -157,7 +156,7 @@ func GetTempDirectory() (string, error) { } } - tmpDir, err := ioutil.TempDir(dir, "e2e_integration_test") + tmpDir, err := os.MkdirTemp(dir, "e2e_integration_test") if err != nil { return "", err } diff --git a/integration/querier_remote_read_test.go b/integration/querier_remote_read_test.go index 0f80405d23..9de69e00aa 100644 --- a/integration/querier_remote_read_test.go +++ b/integration/querier_remote_read_test.go @@ -6,7 +6,7 @@ package integration import ( "bytes" "context" - "io/ioutil" + "io" "net/http" "testing" "time" @@ -102,7 +102,7 @@ func TestQuerierRemoteRead(t *testing.T) { require.NoError(t, err) require.Equal(t, http.StatusOK, httpResp.StatusCode) - compressed, err = ioutil.ReadAll(httpResp.Body) + compressed, err = io.ReadAll(httpResp.Body) require.NoError(t, err) uncompressed, err := snappy.Decode(nil, compressed) diff --git a/integration/util.go b/integration/util.go index d43785638e..88720f18ec 100644 --- a/integration/util.go +++ b/integration/util.go @@ -5,7 +5,6 @@ package integration import ( "bytes" - "io/ioutil" "os" "os/exec" "path/filepath" @@ -44,14 +43,14 @@ func writeFileToSharedDir(s *e2e.Scenario, dst string, content []byte) error { return err } - return ioutil.WriteFile( + return os.WriteFile( dst, content, os.ModePerm) } func copyFileToSharedDir(s *e2e.Scenario, src, dst string) error { - content, err := ioutil.ReadFile(filepath.Join(getCortexProjectDir(), src)) + content, err := os.ReadFile(filepath.Join(getCortexProjectDir(), src)) if err != nil { return errors.Wrapf(err, "unable to read local file %s", src) } diff --git a/pkg/alertmanager/alertmanager_http_test.go b/pkg/alertmanager/alertmanager_http_test.go index 1ca7eaf1a5..d7bdb50805 100644 --- a/pkg/alertmanager/alertmanager_http_test.go +++ b/pkg/alertmanager/alertmanager_http_test.go @@ -2,7 +2,7 @@ package alertmanager import ( "context" - "io/ioutil" + "io" "net/http/httptest" "testing" "time" @@ -77,7 +77,7 @@ func TestMultitenantAlertmanager_GetStatusHandler(t *testing.T) { resp := w.Result() require.Equal(t, 200, w.Code) - body, _ := ioutil.ReadAll(resp.Body) + body, _ := io.ReadAll(resp.Body) content := string(body) require.Contains(t, content, tt.content) require.NotContains(t, content, tt.nocontent) diff --git a/pkg/alertmanager/alertstore/bucketclient/bucket_client.go b/pkg/alertmanager/alertstore/bucketclient/bucket_client.go index da45251cb2..2df737be74 100644 --- a/pkg/alertmanager/alertstore/bucketclient/bucket_client.go +++ b/pkg/alertmanager/alertstore/bucketclient/bucket_client.go @@ -3,7 +3,7 @@ package bucketclient import ( "bytes" "context" - "io/ioutil" + "io" "strings" "sync" @@ -186,7 +186,7 @@ func (s *BucketAlertStore) get(ctx context.Context, bkt objstore.Bucket, name st defer runutil.CloseWithLogOnErr(s.logger, readCloser, "close bucket reader") - buf, err := ioutil.ReadAll(readCloser) + buf, err := io.ReadAll(readCloser) if err != nil { return errors.Wrapf(err, "failed to read alertmanager config for user %s", name) } diff --git a/pkg/alertmanager/alertstore/local/store.go b/pkg/alertmanager/alertstore/local/store.go index 53ffa7db3e..0c1a4520eb 100644 --- a/pkg/alertmanager/alertstore/local/store.go +++ b/pkg/alertmanager/alertstore/local/store.go @@ -3,7 +3,6 @@ package local import ( "context" "flag" - "io/ioutil" "os" "path/filepath" "strings" @@ -141,7 +140,7 @@ func (f *Store) reloadConfigs() (map[string]alertspb.AlertConfigDesc, error) { } // Load the file to be returned by the store. - content, err := ioutil.ReadFile(path) + content, err := os.ReadFile(path) if err != nil { return errors.Wrapf(err, "unable to read alertmanager config %s", path) } diff --git a/pkg/alertmanager/alertstore/local/store_test.go b/pkg/alertmanager/alertstore/local/store_test.go index 9baace4313..177727173b 100644 --- a/pkg/alertmanager/alertstore/local/store_test.go +++ b/pkg/alertmanager/alertstore/local/store_test.go @@ -3,7 +3,6 @@ package local import ( "context" "fmt" - "io/ioutil" "os" "path/filepath" "testing" @@ -29,11 +28,11 @@ func TestStore_ListAllUsers(t *testing.T) { { user1Cfg := prepareAlertmanagerConfig("user-1") user2Cfg := prepareAlertmanagerConfig("user-2") - require.NoError(t, ioutil.WriteFile(filepath.Join(storeDir, "user-1.yaml"), []byte(user1Cfg), os.ModePerm)) - require.NoError(t, ioutil.WriteFile(filepath.Join(storeDir, "user-2.yaml"), []byte(user2Cfg), os.ModePerm)) + require.NoError(t, os.WriteFile(filepath.Join(storeDir, "user-1.yaml"), []byte(user1Cfg), os.ModePerm)) + require.NoError(t, os.WriteFile(filepath.Join(storeDir, "user-2.yaml"), []byte(user2Cfg), os.ModePerm)) // The following file is expected to be skipped. - require.NoError(t, ioutil.WriteFile(filepath.Join(storeDir, "user-3.unsupported-extension"), []byte{}, os.ModePerm)) + require.NoError(t, os.WriteFile(filepath.Join(storeDir, "user-3.unsupported-extension"), []byte{}, os.ModePerm)) users, err := store.ListAllUsers(ctx) require.NoError(t, err) @@ -55,8 +54,8 @@ func TestStore_GetAlertConfig(t *testing.T) { { user1Cfg := prepareAlertmanagerConfig("user-1") user2Cfg := prepareAlertmanagerConfig("user-2") - require.NoError(t, ioutil.WriteFile(filepath.Join(storeDir, "user-1.yaml"), []byte(user1Cfg), os.ModePerm)) - require.NoError(t, ioutil.WriteFile(filepath.Join(storeDir, "user-2.yaml"), []byte(user2Cfg), os.ModePerm)) + require.NoError(t, os.WriteFile(filepath.Join(storeDir, "user-1.yaml"), []byte(user1Cfg), os.ModePerm)) + require.NoError(t, os.WriteFile(filepath.Join(storeDir, "user-2.yaml"), []byte(user2Cfg), os.ModePerm)) config, err := store.GetAlertConfig(ctx, "user-1") require.NoError(t, err) @@ -82,7 +81,7 @@ func TestStore_GetAlertConfigs(t *testing.T) { // The storage contains some configs. { user1Cfg := prepareAlertmanagerConfig("user-1") - require.NoError(t, ioutil.WriteFile(filepath.Join(storeDir, "user-1.yaml"), []byte(user1Cfg), os.ModePerm)) + require.NoError(t, os.WriteFile(filepath.Join(storeDir, "user-1.yaml"), []byte(user1Cfg), os.ModePerm)) configs, err := store.GetAlertConfigs(ctx, []string{"user-1", "user-2"}) require.NoError(t, err) @@ -92,7 +91,7 @@ func TestStore_GetAlertConfigs(t *testing.T) { // Add another user config. user2Cfg := prepareAlertmanagerConfig("user-2") - require.NoError(t, ioutil.WriteFile(filepath.Join(storeDir, "user-2.yaml"), []byte(user2Cfg), os.ModePerm)) + require.NoError(t, os.WriteFile(filepath.Join(storeDir, "user-2.yaml"), []byte(user2Cfg), os.ModePerm)) configs, err = store.GetAlertConfigs(ctx, []string{"user-1", "user-2"}) require.NoError(t, err) diff --git a/pkg/alertmanager/api.go b/pkg/alertmanager/api.go index c997ba5610..3ed63a6e4d 100644 --- a/pkg/alertmanager/api.go +++ b/pkg/alertmanager/api.go @@ -4,7 +4,6 @@ import ( "context" "fmt" "io" - "io/ioutil" "net/http" "os" "path/filepath" @@ -111,7 +110,7 @@ func (am *MultitenantAlertmanager) SetUserConfig(w http.ResponseWriter, r *http. input = r.Body } - payload, err := ioutil.ReadAll(input) + payload, err := io.ReadAll(input) if err != nil { level.Error(logger).Log("msg", errReadingConfiguration, "err", err.Error()) http.Error(w, fmt.Sprintf("%s: %s", errReadingConfiguration, err.Error()), http.StatusBadRequest) @@ -223,7 +222,7 @@ func validateUserConfig(logger log.Logger, cfg alertspb.AlertConfigDesc, limits // not to configured data dir, and on the flipside, it'll fail if we can't write // to tmpDir. Ignoring both cases for now as they're ultra rare but will revisit if // we see this in the wild. - userTempDir, err := ioutil.TempDir("", "validate-config-"+cfg.User) + userTempDir, err := os.MkdirTemp("", "validate-config-"+cfg.User) if err != nil { return err } diff --git a/pkg/alertmanager/api_test.go b/pkg/alertmanager/api_test.go index 37bc87b087..31367918fd 100644 --- a/pkg/alertmanager/api_test.go +++ b/pkg/alertmanager/api_test.go @@ -4,7 +4,7 @@ import ( "bytes" "context" "fmt" - "io/ioutil" + "io" "net/http" "net/http/httptest" "testing" @@ -553,7 +553,7 @@ template_files: am.SetUserConfig(w, req.WithContext(ctx)) resp := w.Result() - body, err := ioutil.ReadAll(resp.Body) + body, err := io.ReadAll(resp.Body) require.NoError(t, err) if tc.err == nil { @@ -688,7 +688,7 @@ receivers: resp := w.Result() require.Equal(t, http.StatusOK, resp.StatusCode) require.Equal(t, "application/yaml", resp.Header.Get("Content-Type")) - body, err := ioutil.ReadAll(resp.Body) + body, err := io.ReadAll(resp.Body) require.NoError(t, err) old, err := yaml.Marshal(testCases) require.NoError(t, err) diff --git a/pkg/alertmanager/distributor.go b/pkg/alertmanager/distributor.go index c4bfbf447c..dbc314d933 100644 --- a/pkg/alertmanager/distributor.go +++ b/pkg/alertmanager/distributor.go @@ -3,7 +3,7 @@ package alertmanager import ( "context" "hash/fnv" - "io/ioutil" + "io" "math/rand" "net/http" "path" @@ -164,7 +164,7 @@ func (d *Distributor) doQuorum(userID string, w http.ResponseWriter, r *http.Req var body []byte var err error if r.Body != nil { - body, err = ioutil.ReadAll(http.MaxBytesReader(w, r.Body, d.maxRecvMsgSize)) + body, err = io.ReadAll(http.MaxBytesReader(w, r.Body, d.maxRecvMsgSize)) if err != nil { if util.IsRequestBodyTooLarge(err) { http.Error(w, "Request body too large", http.StatusRequestEntityTooLarge) @@ -233,7 +233,7 @@ func (d *Distributor) doUnary(userID string, w http.ResponseWriter, r *http.Requ return } - body, err := ioutil.ReadAll(http.MaxBytesReader(w, r.Body, d.maxRecvMsgSize)) + body, err := io.ReadAll(http.MaxBytesReader(w, r.Body, d.maxRecvMsgSize)) if err != nil { if util.IsRequestBodyTooLarge(err) { http.Error(w, "Request body too large", http.StatusRequestEntityTooLarge) diff --git a/pkg/alertmanager/multitenant.go b/pkg/alertmanager/multitenant.go index 107ab025ef..bb5d1d5497 100644 --- a/pkg/alertmanager/multitenant.go +++ b/pkg/alertmanager/multitenant.go @@ -4,7 +4,6 @@ import ( "context" "flag" "fmt" - "io/ioutil" "net/http" "net/url" "os" @@ -291,7 +290,7 @@ func NewMultitenantAlertmanager(cfg *MultitenantAlertmanagerConfig, store alerts var fallbackConfig []byte if cfg.FallbackConfigFile != "" { - fallbackConfig, err = ioutil.ReadFile(cfg.FallbackConfigFile) + fallbackConfig, err = os.ReadFile(cfg.FallbackConfigFile) if err != nil { return nil, fmt.Errorf("unable to read fallback config %q: %s", cfg.FallbackConfigFile, err) } @@ -560,7 +559,7 @@ type obsoleteStateFiles struct { // getObsoleteFilesPerUser returns per-user set of files that should be migrated from old structure to new structure. func (am *MultitenantAlertmanager) getObsoleteFilesPerUser() (map[string]obsoleteStateFiles, error) { - files, err := ioutil.ReadDir(am.cfg.DataDir) + files, err := os.ReadDir(am.cfg.DataDir) if err != nil { return nil, errors.Wrapf(err, "failed to list dir %v", am.cfg.DataDir) } @@ -584,7 +583,7 @@ func (am *MultitenantAlertmanager) getObsoleteFilesPerUser() (map[string]obsolet continue } - templateDirs, err := ioutil.ReadDir(fullPath) + templateDirs, err := os.ReadDir(fullPath) if err != nil { return nil, errors.Wrapf(err, "failed to list dir %v", fullPath) } @@ -816,7 +815,7 @@ func (am *MultitenantAlertmanager) setConfig(cfg alertspb.AlertConfigDesc) error var pathsToRemove = make(map[string]struct{}) // List existing files to keep track the ones to be removed - if oldTemplateFiles, err := ioutil.ReadDir(userTemplateDir); err == nil { + if oldTemplateFiles, err := os.ReadDir(userTemplateDir); err == nil { for _, file := range oldTemplateFiles { pathsToRemove[filepath.Join(userTemplateDir, file.Name())] = struct{}{} } @@ -1238,7 +1237,7 @@ func (am *MultitenantAlertmanager) deleteUnusedLocalUserState() { // getPerUserDirectories returns map of users to their directories (full path). Only users with local // directory are returned. func (am *MultitenantAlertmanager) getPerUserDirectories() map[string]string { - files, err := ioutil.ReadDir(am.cfg.DataDir) + files, err := os.ReadDir(am.cfg.DataDir) if err != nil { level.Warn(am.logger).Log("msg", "failed to list local dir", "dir", am.cfg.DataDir, "err", err) return nil @@ -1346,13 +1345,13 @@ func storeTemplateFile(templateFilepath, content string) (bool, error) { } // Check if the template file already exists and if it has changed - if tmpl, err := ioutil.ReadFile(templateFilepath); err == nil && string(tmpl) == content { + if tmpl, err := os.ReadFile(templateFilepath); err == nil && string(tmpl) == content { return false, nil } else if err != nil && !os.IsNotExist(err) { return false, err } - if err := ioutil.WriteFile(templateFilepath, []byte(content), 0644); err != nil { + if err := os.WriteFile(templateFilepath, []byte(content), 0644); err != nil { return false, fmt.Errorf("unable to create Alertmanager template file %q: %s", templateFilepath, err) } diff --git a/pkg/alertmanager/multitenant_test.go b/pkg/alertmanager/multitenant_test.go index 7848dcfcf3..85329b509f 100644 --- a/pkg/alertmanager/multitenant_test.go +++ b/pkg/alertmanager/multitenant_test.go @@ -6,7 +6,7 @@ import ( "encoding/json" "errors" "fmt" - "io/ioutil" + "io" "math/rand" "net/http" "net/http/httptest" @@ -491,7 +491,7 @@ receivers: am.ServeHTTP(w, req.WithContext(reqCtx)) resp := w.Result() - _, err := ioutil.ReadAll(resp.Body) + _, err := io.ReadAll(resp.Body) require.NoError(t, err) assert.Equal(t, http.StatusOK, w.Code) } @@ -827,7 +827,7 @@ func TestMultitenantAlertmanager_ServeHTTP(t *testing.T) { am.ServeHTTP(w, req.WithContext(ctx)) resp := w.Result() - body, _ := ioutil.ReadAll(resp.Body) + body, _ := io.ReadAll(resp.Body) require.Equal(t, 404, w.Code) require.Equal(t, "the Alertmanager is not configured\n", string(body)) } @@ -886,7 +886,7 @@ func TestMultitenantAlertmanager_ServeHTTP(t *testing.T) { am.ServeHTTP(w, req.WithContext(ctx)) resp := w.Result() - body, _ := ioutil.ReadAll(resp.Body) + body, _ := io.ReadAll(resp.Body) require.Equal(t, 404, w.Code) require.Equal(t, "the Alertmanager is not configured\n", string(body)) } @@ -1646,7 +1646,7 @@ func TestAlertmanager_StateReplicationWithSharding(t *testing.T) { multitenantAM.serveRequest(w, req.WithContext(reqCtx)) resp := w.Result() - body, _ := ioutil.ReadAll(resp.Body) + body, _ := io.ReadAll(resp.Body) assert.Equal(t, http.StatusOK, w.Code) require.Regexp(t, regexp.MustCompile(`{"silenceID":".+"}`), string(body)) } @@ -1804,7 +1804,7 @@ func TestAlertmanager_StateReplicationWithSharding_InitialSyncFromPeers(t *testi i.serveRequest(w, req.WithContext(reqCtx)) resp := w.Result() - body, _ := ioutil.ReadAll(resp.Body) + body, _ := io.ReadAll(resp.Body) assert.Equal(t, http.StatusOK, w.Code) require.Regexp(t, regexp.MustCompile(`{"silenceID":".+"}`), string(body)) } @@ -1819,7 +1819,7 @@ func TestAlertmanager_StateReplicationWithSharding_InitialSyncFromPeers(t *testi i.serveRequest(w, req.WithContext(reqCtx)) resp := w.Result() - body, _ := ioutil.ReadAll(resp.Body) + body, _ := io.ReadAll(resp.Body) assert.Equal(t, http.StatusOK, w.Code) require.Regexp(t, regexp.MustCompile(`"comment":"Created for a test case."`), string(body)) } diff --git a/pkg/api/handlers_test.go b/pkg/api/handlers_test.go index 178fd6c6fc..be0d7aa642 100644 --- a/pkg/api/handlers_test.go +++ b/pkg/api/handlers_test.go @@ -1,7 +1,7 @@ package api import ( - "io/ioutil" + "io" "net/http" "net/http/httptest" "strings" @@ -156,7 +156,7 @@ func TestConfigDiffHandler(t *testing.T) { resp := w.Result() assert.Equal(t, tc.expectedStatusCode, resp.StatusCode) - body, err := ioutil.ReadAll(resp.Body) + body, err := io.ReadAll(resp.Body) assert.NoError(t, err) assert.Equal(t, tc.expectedBody, string(body)) }) @@ -185,7 +185,7 @@ func TestConfigOverrideHandler(t *testing.T) { resp := w.Result() assert.Equal(t, 200, resp.StatusCode) - body, err := ioutil.ReadAll(resp.Body) + body, err := io.ReadAll(resp.Body) assert.NoError(t, err) assert.Equal(t, []byte("config"), body) } diff --git a/pkg/compactor/block_visit_marker.go b/pkg/compactor/block_visit_marker.go index f85850b35e..3337f20b6e 100644 --- a/pkg/compactor/block_visit_marker.go +++ b/pkg/compactor/block_visit_marker.go @@ -5,7 +5,7 @@ import ( "context" "encoding/json" "fmt" - "io/ioutil" + "io" "path" "strings" "time" @@ -48,7 +48,7 @@ func ReadBlockVisitMarker(ctx context.Context, bkt objstore.Bucket, blockID stri blockVisitMarkerReadFailed.Inc() return nil, errors.Wrapf(err, "get block visit marker file: %s", visitMarkerFile) } - b, err := ioutil.ReadAll(visitMarkerFileReader) + b, err := io.ReadAll(visitMarkerFileReader) if err != nil { blockVisitMarkerReadFailed.Inc() return nil, errors.Wrapf(err, "read block visit marker file: %s", visitMarkerFile) diff --git a/pkg/compactor/compactor.go b/pkg/compactor/compactor.go index 2fec294bc9..d0dd5f5792 100644 --- a/pkg/compactor/compactor.go +++ b/pkg/compactor/compactor.go @@ -5,7 +5,6 @@ import ( "flag" "fmt" "hash/fnv" - "io/ioutil" "math/rand" "os" "path" @@ -911,7 +910,7 @@ func (c *Compactor) metaSyncDirForUser(userID string) string { func (c *Compactor) listTenantsWithMetaSyncDirectories() map[string]struct{} { result := map[string]struct{}{} - files, err := ioutil.ReadDir(c.compactorCfg.DataDir) + files, err := os.ReadDir(c.compactorCfg.DataDir) if err != nil { return nil } diff --git a/pkg/compactor/compactor_test.go b/pkg/compactor/compactor_test.go index 333bf1065a..7ffc156034 100644 --- a/pkg/compactor/compactor_test.go +++ b/pkg/compactor/compactor_test.go @@ -7,7 +7,6 @@ import ( "encoding/json" "flag" "fmt" - "io/ioutil" "os" "path" "path/filepath" @@ -1362,7 +1361,7 @@ func createTSDBBlock(t *testing.T, bkt objstore.Bucket, userID string, minT, max require.NoError(t, db.Snapshot(snapshotDir, true)) // Look for the created block (we expect one). - entries, err := ioutil.ReadDir(snapshotDir) + entries, err := os.ReadDir(snapshotDir) require.NoError(t, err) require.Len(t, entries, 1) require.True(t, entries[0].IsDir()) @@ -1389,7 +1388,7 @@ func createTSDBBlock(t *testing.T, bkt objstore.Bucket, userID string, minT, max } // Read the file content in memory. - content, err := ioutil.ReadFile(file) + content, err := os.ReadFile(file) if err != nil { return err } diff --git a/pkg/configs/api/api.go b/pkg/configs/api/api.go index 2cb8d147d4..5ae41eade7 100644 --- a/pkg/configs/api/api.go +++ b/pkg/configs/api/api.go @@ -7,7 +7,7 @@ import ( "flag" "fmt" "html/template" - "io/ioutil" + "io" "mime" "net/http" "strconv" @@ -203,7 +203,7 @@ func (a *API) setConfig(w http.ResponseWriter, r *http.Request) { func (a *API) validateAlertmanagerConfig(w http.ResponseWriter, r *http.Request) { logger := util_log.WithContext(r.Context(), util_log.Logger) - cfg, err := ioutil.ReadAll(r.Body) + cfg, err := io.ReadAll(r.Body) if err != nil { level.Error(logger).Log("msg", "error reading request body", "err", err) http.Error(w, err.Error(), http.StatusInternalServerError) diff --git a/pkg/frontend/frontend_test.go b/pkg/frontend/frontend_test.go index 707fbe8e39..b17606042a 100644 --- a/pkg/frontend/frontend_test.go +++ b/pkg/frontend/frontend_test.go @@ -3,7 +3,7 @@ package frontend import ( "context" "fmt" - "io/ioutil" + "io" "net" "net/http" "net/url" @@ -79,7 +79,7 @@ func TestFrontend_RequestHostHeaderWhenDownstreamURLIsConfigured(t *testing.T) { require.Equal(t, 200, resp.StatusCode) defer resp.Body.Close() - _, err = ioutil.ReadAll(resp.Body) + _, err = io.ReadAll(resp.Body) require.NoError(t, err) // We expect the Host received by the downstream is the downstream host itself @@ -158,7 +158,7 @@ func TestFrontend_LogsSlowQueries(t *testing.T) { resp, err := client.Do(req) assert.NoError(t, err) - b, err := ioutil.ReadAll(resp.Body) + b, err := io.ReadAll(resp.Body) resp.Body.Close() assert.NoError(t, err) @@ -223,7 +223,7 @@ func TestFrontend_ReturnsRequestBodyTooLargeError(t *testing.T) { resp, err := client.Do(req) assert.NoError(t, err) - b, err := ioutil.ReadAll(resp.Body) + b, err := io.ReadAll(resp.Body) resp.Body.Close() assert.NoError(t, err) diff --git a/pkg/frontend/transport/handler.go b/pkg/frontend/transport/handler.go index a3b3c9d207..37ed3a351d 100644 --- a/pkg/frontend/transport/handler.go +++ b/pkg/frontend/transport/handler.go @@ -7,7 +7,6 @@ import ( "flag" "fmt" "io" - "io/ioutil" "net/http" "net/url" "strconv" @@ -124,7 +123,7 @@ func (f *Handler) ServeHTTP(w http.ResponseWriter, r *http.Request) { // Buffer the body for later use to track slow queries. var buf bytes.Buffer r.Body = http.MaxBytesReader(w, r.Body, f.cfg.MaxBodySize) - r.Body = ioutil.NopCloser(io.TeeReader(r.Body, &buf)) + r.Body = io.NopCloser(io.TeeReader(r.Body, &buf)) startTime := time.Now() resp, err := f.roundTripper.RoundTrip(r) @@ -211,7 +210,7 @@ func (f *Handler) reportQueryStats(r *http.Request, queryString url.Values, quer func (f *Handler) parseRequestQueryString(r *http.Request, bodyBuf bytes.Buffer) url.Values { // Use previously buffered body. - r.Body = ioutil.NopCloser(&bodyBuf) + r.Body = io.NopCloser(&bodyBuf) // Ensure the form has been parsed so all the parameters are present err := r.ParseForm() diff --git a/pkg/frontend/transport/roundtripper.go b/pkg/frontend/transport/roundtripper.go index d9ba57ccba..583fc22d04 100644 --- a/pkg/frontend/transport/roundtripper.go +++ b/pkg/frontend/transport/roundtripper.go @@ -4,7 +4,6 @@ import ( "bytes" "context" "io" - "io/ioutil" "net/http" "github.com/weaveworks/common/httpgrpc" @@ -47,7 +46,7 @@ func (a *grpcRoundTripperAdapter) RoundTrip(r *http.Request) (*http.Response, er httpResp := &http.Response{ StatusCode: int(resp.Code), - Body: &buffer{buff: resp.Body, ReadCloser: ioutil.NopCloser(bytes.NewReader(resp.Body))}, + Body: &buffer{buff: resp.Body, ReadCloser: io.NopCloser(bytes.NewReader(resp.Body))}, Header: http.Header{}, ContentLength: int64(len(resp.Body)), } diff --git a/pkg/frontend/v1/frontend_test.go b/pkg/frontend/v1/frontend_test.go index 20af3a1f5a..7f89d3a1b9 100644 --- a/pkg/frontend/v1/frontend_test.go +++ b/pkg/frontend/v1/frontend_test.go @@ -3,7 +3,7 @@ package v1 import ( "context" "fmt" - "io/ioutil" + "io" "net" "net/http" "strings" @@ -55,7 +55,7 @@ func TestFrontend(t *testing.T) { require.NoError(t, err) require.Equal(t, 200, resp.StatusCode) - body, err := ioutil.ReadAll(resp.Body) + body, err := io.ReadAll(resp.Body) require.NoError(t, err) assert.Equal(t, "Hello World", string(body)) @@ -105,7 +105,7 @@ func TestFrontendPropagateTrace(t *testing.T) { require.Equal(t, 200, resp.StatusCode) defer resp.Body.Close() - _, err = ioutil.ReadAll(resp.Body) + _, err = io.ReadAll(resp.Body) require.NoError(t, err) // Query should do one call. @@ -200,7 +200,7 @@ func TestFrontendMetricsCleanup(t *testing.T) { require.NoError(t, err) require.Equal(t, 200, resp.StatusCode) - body, err := ioutil.ReadAll(resp.Body) + body, err := io.ReadAll(resp.Body) require.NoError(t, err) assert.Equal(t, "Hello World", string(body)) diff --git a/pkg/ingester/ingester_test.go b/pkg/ingester/ingester_test.go index f304f1a16a..9a85532d70 100644 --- a/pkg/ingester/ingester_test.go +++ b/pkg/ingester/ingester_test.go @@ -5,7 +5,6 @@ import ( "context" "fmt" "io" - "io/ioutil" "math" "net" "net/http" @@ -2527,8 +2526,8 @@ func TestIngester_OpenExistingTSDBOnStartup(t *testing.T) { // it's the last one and opening TSDB should fail). require.NoError(t, os.MkdirAll(filepath.Join(dir, "user0", "wal", ""), 0700)) require.NoError(t, os.MkdirAll(filepath.Join(dir, "user0", "chunks_head", ""), 0700)) - require.NoError(t, ioutil.WriteFile(filepath.Join(dir, "user0", "chunks_head", "00000001"), nil, 0700)) - require.NoError(t, ioutil.WriteFile(filepath.Join(dir, "user0", "chunks_head", "00000002"), nil, 0700)) + require.NoError(t, os.WriteFile(filepath.Join(dir, "user0", "chunks_head", "00000001"), nil, 0700)) + require.NoError(t, os.WriteFile(filepath.Join(dir, "user0", "chunks_head", "00000002"), nil, 0700)) require.NoError(t, os.MkdirAll(filepath.Join(dir, "user1", "dummy"), 0700)) }, @@ -2551,8 +2550,8 @@ func TestIngester_OpenExistingTSDBOnStartup(t *testing.T) { // it's the last one and opening TSDB should fail). require.NoError(t, os.MkdirAll(filepath.Join(dir, "user2", "wal", ""), 0700)) require.NoError(t, os.MkdirAll(filepath.Join(dir, "user2", "chunks_head", ""), 0700)) - require.NoError(t, ioutil.WriteFile(filepath.Join(dir, "user2", "chunks_head", "00000001"), nil, 0700)) - require.NoError(t, ioutil.WriteFile(filepath.Join(dir, "user2", "chunks_head", "00000002"), nil, 0700)) + require.NoError(t, os.WriteFile(filepath.Join(dir, "user2", "chunks_head", "00000001"), nil, 0700)) + require.NoError(t, os.WriteFile(filepath.Join(dir, "user2", "chunks_head", "00000002"), nil, 0700)) }, check: func(t *testing.T, i *Ingester) { require.Equal(t, 0, len(i.TSDBState.dbs)) diff --git a/pkg/querier/metadata_handler_test.go b/pkg/querier/metadata_handler_test.go index bf5f53bc25..587a6af437 100644 --- a/pkg/querier/metadata_handler_test.go +++ b/pkg/querier/metadata_handler_test.go @@ -2,7 +2,7 @@ package querier import ( "fmt" - "io/ioutil" + "io" "net/http" "net/http/httptest" "testing" @@ -29,7 +29,7 @@ func TestMetadataHandler_Success(t *testing.T) { handler.ServeHTTP(recorder, request) require.Equal(t, http.StatusOK, recorder.Result().StatusCode) - responseBody, err := ioutil.ReadAll(recorder.Result().Body) + responseBody, err := io.ReadAll(recorder.Result().Body) require.NoError(t, err) expectedJSON := ` @@ -63,7 +63,7 @@ func TestMetadataHandler_Error(t *testing.T) { handler.ServeHTTP(recorder, request) require.Equal(t, http.StatusBadRequest, recorder.Result().StatusCode) - responseBody, err := ioutil.ReadAll(recorder.Result().Body) + responseBody, err := io.ReadAll(recorder.Result().Body) require.NoError(t, err) expectedJSON := ` diff --git a/pkg/querier/queryrange/marshaling_test.go b/pkg/querier/queryrange/marshaling_test.go index 83e849e49c..4699398be9 100644 --- a/pkg/querier/queryrange/marshaling_test.go +++ b/pkg/querier/queryrange/marshaling_test.go @@ -3,7 +3,7 @@ package queryrange import ( "bytes" "context" - "io/ioutil" + io "io" "math/rand" "net/http" "testing" @@ -31,7 +31,7 @@ func BenchmarkPrometheusCodec_DecodeResponse(b *testing.B) { for n := 0; n < b.N; n++ { _, err := PrometheusCodec.DecodeResponse(context.Background(), &http.Response{ StatusCode: 200, - Body: ioutil.NopCloser(bytes.NewReader(encodedRes)), + Body: io.NopCloser(bytes.NewReader(encodedRes)), ContentLength: int64(len(encodedRes)), }, nil) require.NoError(b, err) diff --git a/pkg/querier/queryrange/query_range.go b/pkg/querier/queryrange/query_range.go index ad8ef25982..17a364e387 100644 --- a/pkg/querier/queryrange/query_range.go +++ b/pkg/querier/queryrange/query_range.go @@ -4,7 +4,7 @@ import ( "bytes" "context" "fmt" - "io/ioutil" + io "io" "math" "net/http" "net/url" @@ -293,7 +293,7 @@ func (prometheusCodec) EncodeRequest(ctx context.Context, r Request) (*http.Requ func (prometheusCodec) DecodeResponse(ctx context.Context, r *http.Response, _ Request) (Response, error) { if r.StatusCode/100 != 2 { - body, _ := ioutil.ReadAll(r.Body) + body, _ := io.ReadAll(r.Body) return nil, httpgrpc.Errorf(r.StatusCode, string(body)) } log, ctx := spanlogger.New(ctx, "ParseQueryRangeResponse") //nolint:ineffassign,staticcheck @@ -362,7 +362,7 @@ func (prometheusCodec) EncodeResponse(ctx context.Context, res Response) (*http. Header: http.Header{ "Content-Type": []string{"application/json"}, }, - Body: ioutil.NopCloser(bytes.NewBuffer(b)), + Body: io.NopCloser(bytes.NewBuffer(b)), StatusCode: http.StatusOK, ContentLength: int64(len(b)), } diff --git a/pkg/querier/queryrange/query_range_test.go b/pkg/querier/queryrange/query_range_test.go index 60751f3965..02e4911658 100644 --- a/pkg/querier/queryrange/query_range_test.go +++ b/pkg/querier/queryrange/query_range_test.go @@ -3,7 +3,7 @@ package queryrange import ( "bytes" "context" - "io/ioutil" + io "io" "net/http" "strconv" "testing" @@ -98,7 +98,7 @@ func TestResponse(t *testing.T) { response := &http.Response{ StatusCode: 200, Header: http.Header{"Content-Type": []string{"application/json"}}, - Body: ioutil.NopCloser(bytes.NewBuffer([]byte(tc.body))), + Body: io.NopCloser(bytes.NewBuffer([]byte(tc.body))), } resp, err := PrometheusCodec.DecodeResponse(context.Background(), response, nil) require.NoError(t, err) @@ -108,7 +108,7 @@ func TestResponse(t *testing.T) { response = &http.Response{ StatusCode: 200, Header: http.Header{"Content-Type": []string{"application/json"}}, - Body: ioutil.NopCloser(bytes.NewBuffer([]byte(tc.body))), + Body: io.NopCloser(bytes.NewBuffer([]byte(tc.body))), ContentLength: int64(len(tc.body)), } resp2, err := PrometheusCodec.EncodeResponse(context.Background(), resp) @@ -158,7 +158,7 @@ func TestResponseWithStats(t *testing.T) { response := &http.Response{ StatusCode: 200, Header: http.Header{"Content-Type": []string{"application/json"}}, - Body: ioutil.NopCloser(bytes.NewBuffer([]byte(tc.body))), + Body: io.NopCloser(bytes.NewBuffer([]byte(tc.body))), } resp, err := PrometheusCodec.DecodeResponse(context.Background(), response, nil) require.NoError(t, err) @@ -168,7 +168,7 @@ func TestResponseWithStats(t *testing.T) { response = &http.Response{ StatusCode: 200, Header: http.Header{"Content-Type": []string{"application/json"}}, - Body: ioutil.NopCloser(bytes.NewBuffer([]byte(tc.body))), + Body: io.NopCloser(bytes.NewBuffer([]byte(tc.body))), ContentLength: int64(len(tc.body)), } resp2, err := PrometheusCodec.EncodeResponse(context.Background(), resp) diff --git a/pkg/querier/queryrange/roundtrip.go b/pkg/querier/queryrange/roundtrip.go index db6212034b..b1807b6039 100644 --- a/pkg/querier/queryrange/roundtrip.go +++ b/pkg/querier/queryrange/roundtrip.go @@ -19,7 +19,6 @@ import ( "context" "flag" "io" - "io/ioutil" "net/http" "strings" "time" @@ -268,7 +267,7 @@ func (q roundTripper) Do(ctx context.Context, r Request) (Response, error) { return nil, err } defer func() { - io.Copy(ioutil.Discard, io.LimitReader(response.Body, 1024)) + io.Copy(io.Discard, io.LimitReader(response.Body, 1024)) _ = response.Body.Close() }() diff --git a/pkg/querier/queryrange/roundtrip_test.go b/pkg/querier/queryrange/roundtrip_test.go index 8db4db764d..e39df33980 100644 --- a/pkg/querier/queryrange/roundtrip_test.go +++ b/pkg/querier/queryrange/roundtrip_test.go @@ -2,7 +2,7 @@ package queryrange import ( "context" - "io/ioutil" + io "io" "net/http" "net/http/httptest" "net/url" @@ -76,7 +76,7 @@ func TestRoundTrip(t *testing.T) { require.NoError(t, err) require.Equal(t, 200, resp.StatusCode) - bs, err := ioutil.ReadAll(resp.Body) + bs, err := io.ReadAll(resp.Body) require.NoError(t, err) require.Equal(t, tc.expectedBody, string(bs)) }) diff --git a/pkg/querier/queryrange/split_by_interval_test.go b/pkg/querier/queryrange/split_by_interval_test.go index c026330c0c..4e12f46306 100644 --- a/pkg/querier/queryrange/split_by_interval_test.go +++ b/pkg/querier/queryrange/split_by_interval_test.go @@ -2,7 +2,7 @@ package queryrange import ( "context" - "io/ioutil" + io "io" "net/http" "net/http/httptest" "net/url" @@ -253,7 +253,7 @@ func TestSplitByDay(t *testing.T) { mergedHTTPResponse, err := PrometheusCodec.EncodeResponse(context.Background(), mergedResponse) require.NoError(t, err) - mergedHTTPResponseBody, err := ioutil.ReadAll(mergedHTTPResponse.Body) + mergedHTTPResponseBody, err := io.ReadAll(mergedHTTPResponse.Body) require.NoError(t, err) for i, tc := range []struct { @@ -293,7 +293,7 @@ func TestSplitByDay(t *testing.T) { require.NoError(t, err) require.Equal(t, 200, resp.StatusCode) - bs, err := ioutil.ReadAll(resp.Body) + bs, err := io.ReadAll(resp.Body) require.NoError(t, err) require.Equal(t, tc.expectedBody, string(bs)) require.Equal(t, tc.expectedQueryCount, actualCount.Load()) diff --git a/pkg/querier/remote_read_test.go b/pkg/querier/remote_read_test.go index b4d05220a7..50cda0f2f3 100644 --- a/pkg/querier/remote_read_test.go +++ b/pkg/querier/remote_read_test.go @@ -4,7 +4,7 @@ import ( "bytes" "context" "fmt" - "io/ioutil" + "io" "net/http" "net/http/httptest" "testing" @@ -56,7 +56,7 @@ func TestRemoteReadHandler(t *testing.T) { require.Equal(t, 200, recorder.Result().StatusCode) require.Equal(t, []string([]string{"application/x-protobuf"}), recorder.Result().Header["Content-Type"]) - responseBody, err := ioutil.ReadAll(recorder.Result().Body) + responseBody, err := io.ReadAll(recorder.Result().Body) require.NoError(t, err) responseBody, err = snappy.Decode(nil, responseBody) require.NoError(t, err) diff --git a/pkg/ruler/api.go b/pkg/ruler/api.go index e8dde218ff..9f6130ff97 100644 --- a/pkg/ruler/api.go +++ b/pkg/ruler/api.go @@ -2,7 +2,7 @@ package ruler import ( "encoding/json" - "io/ioutil" + io "io" "net/http" "net/url" "sort" @@ -447,7 +447,7 @@ func (a *API) CreateRuleGroup(w http.ResponseWriter, req *http.Request) { return } - payload, err := ioutil.ReadAll(req.Body) + payload, err := io.ReadAll(req.Body) if err != nil { level.Error(logger).Log("msg", "unable to read rule group payload", "err", err.Error()) http.Error(w, err.Error(), http.StatusBadRequest) diff --git a/pkg/ruler/api_test.go b/pkg/ruler/api_test.go index 505de1d709..f476a83576 100644 --- a/pkg/ruler/api_test.go +++ b/pkg/ruler/api_test.go @@ -5,7 +5,6 @@ import ( "encoding/json" "errors" "io" - "io/ioutil" "net/http" "net/http/httptest" "strings" @@ -34,7 +33,7 @@ func TestRuler_rules(t *testing.T) { a.PrometheusRules(w, req) resp := w.Result() - body, _ := ioutil.ReadAll(resp.Body) + body, _ := io.ReadAll(resp.Body) // Check status code and status response responseJSON := response{} @@ -90,7 +89,7 @@ func TestRuler_rules_special_characters(t *testing.T) { a.PrometheusRules(w, req) resp := w.Result() - body, _ := ioutil.ReadAll(resp.Body) + body, _ := io.ReadAll(resp.Body) // Check status code and status response responseJSON := response{} @@ -146,7 +145,7 @@ func TestRuler_alerts(t *testing.T) { a.PrometheusAlerts(w, req) resp := w.Result() - body, _ := ioutil.ReadAll(resp.Body) + body, _ := io.ReadAll(resp.Body) // Check status code and status response responseJSON := response{} diff --git a/pkg/ruler/ruler_test.go b/pkg/ruler/ruler_test.go index 5e6ded9ed8..23848a543a 100644 --- a/pkg/ruler/ruler_test.go +++ b/pkg/ruler/ruler_test.go @@ -3,7 +3,7 @@ package ruler import ( "context" "fmt" - "io/ioutil" + io "io" "math/rand" "net/http" "net/http/httptest" @@ -1113,7 +1113,7 @@ func TestRuler_ListAllRules(t *testing.T) { router.ServeHTTP(w, req) resp := w.Result() - body, _ := ioutil.ReadAll(resp.Body) + body, _ := io.ReadAll(resp.Body) // Check status code and header require.Equal(t, http.StatusOK, resp.StatusCode) diff --git a/pkg/ruler/rulestore/bucketclient/bucket_client.go b/pkg/ruler/rulestore/bucketclient/bucket_client.go index cb374ab02c..21f47f5570 100644 --- a/pkg/ruler/rulestore/bucketclient/bucket_client.go +++ b/pkg/ruler/rulestore/bucketclient/bucket_client.go @@ -5,7 +5,7 @@ import ( "context" "encoding/base64" "fmt" - "io/ioutil" + "io" "strings" "github.com/go-kit/log" @@ -66,7 +66,7 @@ func (b *BucketRuleStore) getRuleGroup(ctx context.Context, userID, namespace, g } defer func() { _ = reader.Close() }() - buf, err := ioutil.ReadAll(reader) + buf, err := io.ReadAll(reader) if err != nil { return nil, errors.Wrapf(err, "failed to read rule group %s", objectKey) } diff --git a/pkg/ruler/rulestore/local/local.go b/pkg/ruler/rulestore/local/local.go index f31612e823..131ad3fa0d 100644 --- a/pkg/ruler/rulestore/local/local.go +++ b/pkg/ruler/rulestore/local/local.go @@ -3,7 +3,6 @@ package local import ( "context" "flag" - "io/ioutil" "os" "path/filepath" @@ -47,7 +46,7 @@ func NewLocalRulesClient(cfg Config, loader promRules.GroupLoader) (*Client, err func (l *Client) ListAllUsers(ctx context.Context) ([]string, error) { root := l.cfg.Directory - infos, err := ioutil.ReadDir(root) + infos, err := os.ReadDir(root) if err != nil { return nil, errors.Wrapf(err, "unable to read dir %s", root) } @@ -57,15 +56,17 @@ func (l *Client) ListAllUsers(ctx context.Context) ([]string, error) { // After resolving link, info.Name() may be different than user, so keep original name. user := info.Name() - if info.Mode()&os.ModeSymlink != 0 { - // ioutil.ReadDir only returns result of LStat. Calling Stat resolves symlink. - info, err = os.Stat(filepath.Join(root, info.Name())) + isDir := info.IsDir() + if info.Type()&os.ModeSymlink != 0 { + // os.ReadDir only returns result of LStat. Calling Stat resolves symlink. + deRefInfo, err := os.Stat(filepath.Join(root, info.Name())) if err != nil { return nil, err } + isDir = deRefInfo.IsDir() } - if info.IsDir() { + if isDir { result = append(result, user) } } @@ -131,25 +132,27 @@ func (l *Client) loadAllRulesGroupsForUser(ctx context.Context, userID string) ( var allLists rulespb.RuleGroupList root := filepath.Join(l.cfg.Directory, userID) - infos, err := ioutil.ReadDir(root) + dirEntries, err := os.ReadDir(root) if err != nil { return nil, errors.Wrapf(err, "unable to read rule dir %s", root) } - for _, info := range infos { + for _, info := range dirEntries { // After resolving link, info.Name() may be different than namespace, so keep original name. namespace := info.Name() + isDir := info.IsDir() - if info.Mode()&os.ModeSymlink != 0 { - // ioutil.ReadDir only returns result of LStat. Calling Stat resolves symlink. + if info.Type()&os.ModeSymlink != 0 { + // os.ReadDir only returns result of LStat. Calling Stat resolves symlink. path := filepath.Join(root, info.Name()) - info, err = os.Stat(path) + deRefInfo, err := os.Stat(path) if err != nil { return nil, errors.Wrapf(err, "unable to stat rule file %s", path) } + isDir = deRefInfo.IsDir() } - if info.IsDir() { + if isDir { continue } diff --git a/pkg/ruler/rulestore/local/local_test.go b/pkg/ruler/rulestore/local/local_test.go index b491c00c6e..f003254c79 100644 --- a/pkg/ruler/rulestore/local/local_test.go +++ b/pkg/ruler/rulestore/local/local_test.go @@ -2,7 +2,6 @@ package local import ( "context" - "io/ioutil" "os" "path" "testing" @@ -22,7 +21,7 @@ func TestClient_LoadAllRuleGroups(t *testing.T) { user2 := "second-user" namespace1 := "ns" - namespace2 := "z-another" // This test relies on the fact that ioutil.ReadDir() returns files sorted by name. + namespace2 := "z-another" // This test relies on the fact that os.ReadDir() returns files sorted by name. dir := t.TempDir() @@ -51,7 +50,7 @@ func TestClient_LoadAllRuleGroups(t *testing.T) { err = os.Symlink(user1, path.Join(dir, user2)) require.NoError(t, err) - err = ioutil.WriteFile(path.Join(dir, user1, namespace1), b, 0777) + err = os.WriteFile(path.Join(dir, user1, namespace1), b, 0777) require.NoError(t, err) const ignoredDir = "ignored-dir" diff --git a/pkg/storage/bucket/client_mock.go b/pkg/storage/bucket/client_mock.go index 83f6a6ed6c..8751a897bc 100644 --- a/pkg/storage/bucket/client_mock.go +++ b/pkg/storage/bucket/client_mock.go @@ -5,7 +5,6 @@ import ( "context" "errors" "io" - "io/ioutil" "time" "github.com/stretchr/testify/mock" @@ -93,7 +92,7 @@ func (m *ClientMock) MockGet(name, content string, err error) { // that getting the same mocked object twice works as expected. mockedGet := m.On("Get", mock.Anything, name) mockedGet.Run(func(args mock.Arguments) { - mockedGet.Return(ioutil.NopCloser(bytes.NewReader([]byte(content))), err) + mockedGet.Return(io.NopCloser(bytes.NewReader([]byte(content))), err) }) } else { m.On("Exists", mock.Anything, name).Return(false, err) @@ -116,7 +115,7 @@ func (m *ClientMock) MockGetTimes(name, content string, err error, times int) { // that getting the same mocked object twice works as expected. mockedGet := m.On("Get", mock.Anything, name).Times(times) mockedGet.Run(func(args mock.Arguments) { - mockedGet.Return(ioutil.NopCloser(bytes.NewReader([]byte(content))), err) + mockedGet.Return(io.NopCloser(bytes.NewReader([]byte(content))), err) }) } else { m.On("Exists", mock.Anything, name).Return(false, err).Times(times) diff --git a/pkg/storage/tsdb/bucketindex/markers_bucket_client.go b/pkg/storage/tsdb/bucketindex/markers_bucket_client.go index ade2bfab97..4858e3e2c0 100644 --- a/pkg/storage/tsdb/bucketindex/markers_bucket_client.go +++ b/pkg/storage/tsdb/bucketindex/markers_bucket_client.go @@ -4,7 +4,6 @@ import ( "bytes" "context" "io" - "io/ioutil" "path" "github.com/thanos-io/objstore" @@ -33,7 +32,7 @@ func (b *globalMarkersBucket) Upload(ctx context.Context, name string, r io.Read } // Read the marker. - body, err := ioutil.ReadAll(r) + body, err := io.ReadAll(r) if err != nil { return err } diff --git a/pkg/storage/tsdb/bucketindex/updater.go b/pkg/storage/tsdb/bucketindex/updater.go index 66e6f1036b..e9ebdd7ab8 100644 --- a/pkg/storage/tsdb/bucketindex/updater.go +++ b/pkg/storage/tsdb/bucketindex/updater.go @@ -3,7 +3,7 @@ package bucketindex import ( "context" "encoding/json" - "io/ioutil" + "io" "path" "time" @@ -132,7 +132,7 @@ func (w *Updater) updateBlockIndexEntry(ctx context.Context, id ulid.ULID) (*Blo } defer runutil.CloseWithLogOnErr(w.logger, r, "close get block meta file") - metaContent, err := ioutil.ReadAll(r) + metaContent, err := io.ReadAll(r) if err != nil { return nil, errors.Wrapf(err, "read block meta file: %v", metaFile) } diff --git a/pkg/storage/tsdb/testutil/objstore.go b/pkg/storage/tsdb/testutil/objstore.go index 326c583008..04dc2208f0 100644 --- a/pkg/storage/tsdb/testutil/objstore.go +++ b/pkg/storage/tsdb/testutil/objstore.go @@ -1,7 +1,6 @@ package testutil import ( - "io/ioutil" "os" "testing" @@ -12,7 +11,7 @@ import ( ) func PrepareFilesystemBucket(t testing.TB) (objstore.Bucket, string) { - storageDir, err := ioutil.TempDir(os.TempDir(), "bucket") + storageDir, err := os.MkdirTemp(os.TempDir(), "bucket") require.NoError(t, err) t.Cleanup(func() { diff --git a/pkg/storegateway/bucket_stores.go b/pkg/storegateway/bucket_stores.go index f13805e484..6c2b92f4d6 100644 --- a/pkg/storegateway/bucket_stores.go +++ b/pkg/storegateway/bucket_stores.go @@ -3,7 +3,6 @@ package storegateway import ( "context" "fmt" - "io/ioutil" "math" "net/http" "os" @@ -511,7 +510,7 @@ func (u *BucketStores) getOrCreateStore(userID string) (*store.BucketStore, erro // deleteLocalFilesForExcludedTenants removes local "sync" directories for tenants that are not included in the current // shard. func (u *BucketStores) deleteLocalFilesForExcludedTenants(includeUserIDs map[string]struct{}) { - files, err := ioutil.ReadDir(u.cfg.BucketStore.SyncDir) + files, err := os.ReadDir(u.cfg.BucketStore.SyncDir) if err != nil { return } diff --git a/pkg/storegateway/bucket_stores_test.go b/pkg/storegateway/bucket_stores_test.go index bbd04ea846..275839af04 100644 --- a/pkg/storegateway/bucket_stores_test.go +++ b/pkg/storegateway/bucket_stores_test.go @@ -5,7 +5,6 @@ import ( "errors" "fmt" "io" - "io/ioutil" "math" "os" "path/filepath" @@ -543,7 +542,7 @@ func TestBucketStores_deleteLocalFilesForExcludedTenants(t *testing.T) { } func getUsersInDir(t *testing.T, dir string) []string { - fs, err := ioutil.ReadDir(dir) + fs, err := os.ReadDir(dir) require.NoError(t, err) var result []string diff --git a/pkg/storegateway/gateway_test.go b/pkg/storegateway/gateway_test.go index cfa815aea3..d0ce8e4d75 100644 --- a/pkg/storegateway/gateway_test.go +++ b/pkg/storegateway/gateway_test.go @@ -3,7 +3,6 @@ package storegateway import ( "context" "fmt" - "io/ioutil" "math" "math/rand" "net/http" @@ -556,7 +555,7 @@ func TestStoreGateway_ShouldSupportLoadRingTokensFromFile(t *testing.T) { for testName, testData := range tests { t.Run(testName, func(t *testing.T) { - tokensFile, err := ioutil.TempFile(os.TempDir(), "tokens-*") + tokensFile, err := os.CreateTemp(os.TempDir(), "tokens-*") require.NoError(t, err) defer os.Remove(tokensFile.Name()) //nolint:errcheck @@ -994,7 +993,7 @@ func TestStoreGateway_SeriesQueryingShouldEnforceMaxSeriesPerQueryLimit(t *testi logger := log.NewNopLogger() userID := "user-1" - storageDir, err := ioutil.TempDir(os.TempDir(), "") + storageDir, err := os.MkdirTemp(os.TempDir(), "") require.NoError(t, err) defer os.RemoveAll(storageDir) //nolint:errcheck diff --git a/pkg/util/http_test.go b/pkg/util/http_test.go index eaee7923b3..4c399a8603 100644 --- a/pkg/util/http_test.go +++ b/pkg/util/http_test.go @@ -4,7 +4,7 @@ import ( "bytes" "context" "html/template" - "io/ioutil" + "io" "math/rand" "net/http" "net/http/httptest" @@ -216,6 +216,6 @@ func (b bytesBuffered) BytesBuffer() *bytes.Buffer { } func TestIsRequestBodyTooLargeRegression(t *testing.T) { - _, err := ioutil.ReadAll(http.MaxBytesReader(httptest.NewRecorder(), ioutil.NopCloser(bytes.NewReader([]byte{1, 2, 3, 4})), 1)) + _, err := io.ReadAll(http.MaxBytesReader(httptest.NewRecorder(), io.NopCloser(bytes.NewReader([]byte{1, 2, 3, 4})), 1)) assert.True(t, util.IsRequestBodyTooLarge(err)) } diff --git a/pkg/util/process/collector.go b/pkg/util/process/collector.go index e3a863ad26..4dd3b29843 100644 --- a/pkg/util/process/collector.go +++ b/pkg/util/process/collector.go @@ -4,7 +4,7 @@ import ( "bufio" "bytes" "errors" - "io/ioutil" + "io" "os" "path/filepath" "strconv" @@ -100,7 +100,7 @@ func (c *processCollector) getMapsCountLimit() (float64, error) { } defer file.Close() - content, err := ioutil.ReadAll(file) + content, err := io.ReadAll(file) if err != nil { return 0, err } diff --git a/pkg/util/process/collector_test.go b/pkg/util/process/collector_test.go index bc2d570a7c..b1767adcca 100644 --- a/pkg/util/process/collector_test.go +++ b/pkg/util/process/collector_test.go @@ -2,7 +2,6 @@ package process import ( "bytes" - "io/ioutil" "os" "path/filepath" "testing" @@ -25,8 +24,8 @@ func TestProcessCollector(t *testing.T) { require.NoError(t, os.MkdirAll(filepath.Dir(mapsPath), os.ModePerm)) require.NoError(t, os.MkdirAll(filepath.Dir(mapsLimitPath), os.ModePerm)) - require.NoError(t, ioutil.WriteFile(mapsPath, []byte("1\n2\n3\n4\n5\n"), os.ModePerm)) - require.NoError(t, ioutil.WriteFile(mapsLimitPath, []byte("262144\n"), os.ModePerm)) + require.NoError(t, os.WriteFile(mapsPath, []byte("1\n2\n3\n4\n5\n"), os.ModePerm)) + require.NoError(t, os.WriteFile(mapsLimitPath, []byte("262144\n"), os.ModePerm)) // Create a new collector and test metrics. c, err := newProcessCollector(pid, procDir) diff --git a/pkg/util/tls/test/tls_integration_test.go b/pkg/util/tls/test/tls_integration_test.go index 6b43f880c8..f5ce81105c 100644 --- a/pkg/util/tls/test/tls_integration_test.go +++ b/pkg/util/tls/test/tls_integration_test.go @@ -7,7 +7,6 @@ import ( "flag" "fmt" "io" - "io/ioutil" "net" "net/http" "os" @@ -127,7 +126,7 @@ func newIntegrationClientServer( assert.NoError(t, err, tc.name) return } - body, err := ioutil.ReadAll(resp.Body) + body, err := io.ReadAll(resp.Body) assert.NoError(t, err, tc.name) assert.Equal(t, []byte("OK"), body, tc.name) diff --git a/pkg/util/tls/tls.go b/pkg/util/tls/tls.go index 3b9ca07483..b89f1c6d6f 100644 --- a/pkg/util/tls/tls.go +++ b/pkg/util/tls/tls.go @@ -4,7 +4,7 @@ import ( "crypto/tls" "crypto/x509" "flag" - "io/ioutil" + "os" "github.com/pkg/errors" "google.golang.org/grpc" @@ -45,7 +45,7 @@ func (cfg *ClientConfig) GetTLSConfig() (*tls.Config, error) { // read ca certificates if cfg.CAPath != "" { var caCertPool *x509.CertPool - caCert, err := ioutil.ReadFile(cfg.CAPath) + caCert, err := os.ReadFile(cfg.CAPath) if err != nil { return nil, errors.Wrapf(err, "error loading ca cert: %s", cfg.CAPath) } diff --git a/pkg/util/tls/tls_test.go b/pkg/util/tls/tls_test.go index d1df88b67a..234015aba7 100644 --- a/pkg/util/tls/tls_test.go +++ b/pkg/util/tls/tls_test.go @@ -2,7 +2,7 @@ package tls import ( "fmt" - "io/ioutil" + "os" "testing" "github.com/stretchr/testify/assert" @@ -80,17 +80,17 @@ func newTestX509Files(t *testing.T, cert, key, ca []byte) x509Paths { } if cert != nil { - err := ioutil.WriteFile(paths.cert, cert, 0600) + err := os.WriteFile(paths.cert, cert, 0600) require.NoError(t, err) } if key != nil { - err := ioutil.WriteFile(paths.key, key, 0600) + err := os.WriteFile(paths.key, key, 0600) require.NoError(t, err) } if ca != nil { - err := ioutil.WriteFile(paths.ca, ca, 0600) + err := os.WriteFile(paths.ca, ca, 0600) require.NoError(t, err) } diff --git a/tools/query-audit/config.go b/tools/query-audit/config.go index d1035fc1b4..70464937dd 100644 --- a/tools/query-audit/config.go +++ b/tools/query-audit/config.go @@ -1,7 +1,7 @@ package main import ( - "io/ioutil" + "os" "time" "github.com/pkg/errors" @@ -53,7 +53,7 @@ func (cfg *Config) Validate() error { // LoadConfig read YAML-formatted config from filename into cfg. func LoadConfig(filename string, cfg *Config) error { - buf, err := ioutil.ReadFile(filename) + buf, err := os.ReadFile(filename) if err != nil { return errors.Wrap(err, "Error reading config file") } diff --git a/tools/querytee/proxy_backend.go b/tools/querytee/proxy_backend.go index 9def314235..b542b8126b 100644 --- a/tools/querytee/proxy_backend.go +++ b/tools/querytee/proxy_backend.go @@ -2,7 +2,7 @@ package querytee import ( "context" - "io/ioutil" + "io" "net" "net/http" "net/url" @@ -110,7 +110,7 @@ func (b *ProxyBackend) doBackendRequest(req *http.Request) (int, []byte, error) // Read the entire response body. defer res.Body.Close() - body, err := ioutil.ReadAll(res.Body) + body, err := io.ReadAll(res.Body) if err != nil { return 0, nil, errors.Wrap(err, "reading backend response") } diff --git a/tools/querytee/proxy_test.go b/tools/querytee/proxy_test.go index d7575c7059..022952d8eb 100644 --- a/tools/querytee/proxy_test.go +++ b/tools/querytee/proxy_test.go @@ -2,7 +2,7 @@ package querytee import ( "fmt" - "io/ioutil" + "io" "net/http" "net/http/httptest" "strconv" @@ -176,7 +176,7 @@ func Test_Proxy_RequestsForwarding(t *testing.T) { require.NoError(t, err) defer res.Body.Close() - body, err := ioutil.ReadAll(res.Body) + body, err := io.ReadAll(res.Body) require.NoError(t, err) assert.Equal(t, testData.expectedStatus, res.StatusCode) @@ -327,7 +327,7 @@ func TestProxy_Passthrough(t *testing.T) { require.NoError(t, err) defer res.Body.Close() - body, err := ioutil.ReadAll(res.Body) + body, err := io.ReadAll(res.Body) require.NoError(t, err) assert.Equal(t, query.expectedStatusCode, res.StatusCode) diff --git a/tools/thanosconvert/thanosconvert_test.go b/tools/thanosconvert/thanosconvert_test.go index 4e950a1b03..f59dd9da4f 100644 --- a/tools/thanosconvert/thanosconvert_test.go +++ b/tools/thanosconvert/thanosconvert_test.go @@ -5,7 +5,7 @@ import ( "context" "encoding/json" "fmt" - "io/ioutil" + "io" "strings" "testing" @@ -265,9 +265,9 @@ func mockBucket(data fakeBucket) *bucket.ClientMock { case blockWithGetFailure: bkt.On("Get", mock.Anything, key).Return(nil, errors.Errorf("test error in Get")) case blockWithMalformedMeta: - bkt.On("Get", mock.Anything, key).Return(ioutil.NopCloser(bytes.NewBufferString("invalid json")), nil) + bkt.On("Get", mock.Anything, key).Return(io.NopCloser(bytes.NewBufferString("invalid json")), nil) default: - bkt.On("Get", mock.Anything, key).Return(ioutil.NopCloser(&body), nil) + bkt.On("Get", mock.Anything, key).Return(io.NopCloser(&body), nil) } switch block { diff --git a/tools/website/website.go b/tools/website/website.go index 5c788b3ce7..f235e4b553 100644 --- a/tools/website/website.go +++ b/tools/website/website.go @@ -2,7 +2,6 @@ package main import ( "fmt" - "io/ioutil" "log" "os" "path/filepath" @@ -20,7 +19,7 @@ func main() { log.Fatal("provide a file to process") } filepath := os.Args[1] - buff, err := ioutil.ReadFile(filepath) + buff, err := os.ReadFile(filepath) if err != nil { panic(err) } @@ -33,7 +32,7 @@ func main() { content = addPRLinks(content) } - if err := ioutil.WriteFile(filepath, []byte(content), 0); err != nil { + if err := os.WriteFile(filepath, []byte(content), 0); err != nil { panic(err) } }