Skip to content

Commit 3c8546c

Browse files
authored
*: Fixed further not check errors [PART2] (thanos-io#403)
Signed-off-by: Bartek Plotka <bwplotka@gmail.com>
1 parent f9c0f6f commit 3c8546c

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

48 files changed

+437
-333
lines changed

.circleci/config.yml

+1-1
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ jobs:
2020
echo "Awesome! GCS integration tests are enabled."
2121
fi
2222
- run: make format
23+
- run: make errcheck
2324
- run:
2425
name: "Run all tests"
2526
# TODO(bplotka): Setup some S3 tests for CI.
@@ -38,7 +39,6 @@ jobs:
3839
working_directory: /home/circleci/.go_workspace/src/github.com/improbable-eng/thanos
3940
steps:
4041
- checkout
41-
- run: make promu
4242
- run: make crossbuild
4343
- persist_to_workspace:
4444
root: .

.errcheck_excludes.txt

+3
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
(github.com/improbable-eng/thanos/vendor/github.com/go-kit/kit/log.Logger).Log
2+
fmt.Fprintln
3+
fmt.Fprint

Makefile

+89-58
Original file line numberDiff line numberDiff line change
@@ -11,91 +11,122 @@ DOCKER_IMAGE_TAG ?= $(subst /,-,$(shell git rev-parse --abbrev-ref HEAD))-$(she
1111
# but for simplicity sake we just make sure they exist in the first one, and
1212
# then keep using those.
1313
FIRST_GOPATH ?= $(firstword $(subst :, ,$(shell go env GOPATH)))
14-
PROMU ?= $(FIRST_GOPATH)/bin/promu
1514
GOIMPORTS ?= $(FIRST_GOPATH)/bin/goimports
15+
PROMU ?= $(FIRST_GOPATH)/bin/promu
1616
DEP ?= $(FIRST_GOPATH)/bin/dep
17+
ERRCHECK ?= $(FIRST_GOPATH)/bin/errcheck
1718

18-
all: install-tools deps format build
19+
.PHONY: all
20+
all: deps format errcheck build
21+
22+
# assets repacks all statis assets into go file for easier deploy.
23+
.PHONY: assets
24+
assets:
25+
@echo ">> deleting asset file"
26+
@rm pkg/query/ui/bindata.go || true
27+
@echo ">> writing assets"
28+
@go get -u github.com/jteeuwen/go-bindata/...
29+
@go-bindata $(bindata_flags) -pkg ui -o pkg/query/ui/bindata.go -ignore '(.*\.map|bootstrap\.js|bootstrap-theme\.css|bootstrap\.css)' pkg/query/ui/templates/... pkg/query/ui/static/...
30+
@go fmt ./pkg/query/ui
31+
32+
# build builds Thanos binary using `promu`.
33+
.PHONY: build
34+
build: deps $(PROMU)
35+
@echo ">> building binaries"
36+
@$(PROMU) build --prefix $(PREFIX)
1937

38+
# crossbuild builds all binaries for all platforms.
39+
.PHONY: crossbuild
40+
crossbuild: deps $(PROMU)
41+
@echo ">> crossbuilding all binaries"
42+
$(PROMU) crossbuild -v
43+
44+
# deps fetches all necessary golang dependencies, since they are not checked into repository.
45+
.PHONY: deps
2046
deps: vendor
2147

22-
vendor: Gopkg.toml Gopkg.lock | $(DEP)
23-
@echo ">> dep ensure"
24-
@$(DEP) ensure
48+
# docker builds docker with no tag.
49+
.PHONY: docker
50+
docker: build
51+
@echo ">> building docker image '${DOCKER_IMAGE_NAME}'"
52+
@docker build -t "${DOCKER_IMAGE_NAME}" .
2553

26-
format: $(GOIMPORTS) deps
27-
@echo ">> formatting code"
28-
@$(GOIMPORTS) -w $(FILES)
54+
# docker-push pushes docker image build under `${DOCKER_IMAGE_NAME}` to improbable/"$(DOCKER_IMAGE_NAME):$(DOCKER_IMAGE_TAG)"
55+
.PHONY: docker-push
56+
docker-push:
57+
@echo ">> pushing image"
58+
@docker tag "${DOCKER_IMAGE_NAME}" improbable/"$(DOCKER_IMAGE_NAME):$(DOCKER_IMAGE_TAG)"
59+
@docker push improbable/"$(DOCKER_IMAGE_NAME):$(DOCKER_IMAGE_TAG)"
2960

30-
vet:
31-
@echo ">> vetting code"
32-
@go vet ./...
61+
# docs regenerates flags in docs for all thanos commands.
62+
.PHONY: docs
63+
docs:
64+
@go get -u github.com/campoy/embedmd
65+
@go build ./cmd/thanos/...
66+
@scripts/genflagdocs.sh
3367

34-
# TODO(bplotka): Make errcheck required stage and validate it on CI (once we fix all the issues claimed by errcheck).
35-
errcheck:
68+
# errcheck performs static analysis and returns error if any of the errors is not checked.
69+
.PHONY: errcheck
70+
errcheck: $(ERRCHECK)
3671
@echo ">> errchecking the code"
37-
@errcheck -verbose -exclude .errcheck_excludes.txt ./...
72+
$(ERRCHECK) -verbose -exclude .errcheck_excludes.txt ./...
3873

39-
build: deps promu
40-
@echo ">> building binaries"
41-
@$(PROMU) build --prefix $(PREFIX)
74+
# format formats the code (including imports format).
75+
.PHONY: format
76+
format: $(GOIMPORTS) deps
77+
@echo ">> formatting code"
78+
@$(GOIMPORTS) -w $(FILES)
4279

43-
.PHONY: crossbuild
44-
crossbuild: deps promu
45-
@echo ">> crossbuilding all binaries"
46-
$(PROMU) crossbuild -v
80+
# proto generates golang files from Thanos proto files.
81+
.PHONY: proto
82+
proto:
83+
@go get -u github.com/gogo/protobuf/protoc-gen-gogofast
84+
@./scripts/genproto.sh
4785

86+
# tarball builds release tarball.
4887
.PHONY: tarball
49-
tarball: promu
88+
tarball: $(PROMU)
5089
@echo ">> building release tarball"
5190
$(PROMU) tarball --prefix $(PREFIX) $(BIN_DIR)
5291

53-
$(GOIMPORTS):
54-
@echo ">> fetching goimports"
55-
@go get -u golang.org/x/tools/cmd/goimports
56-
57-
.PHONY: promu
58-
promu:
59-
@echo ">> fetching promu"
60-
GOOS= GOARCH= go get -u github.com/prometheus/promu
92+
# test runs all Thanos golang tests.
93+
.PHONY: test
94+
test: test-deps
95+
@echo ">> running all tests. Do export THANOS_SKIP_GCS_TESTS="true" or/and export THANOS_SKIP_S3_AWS_TESTS="true" if you want to skip e2e tests against real store buckets"
96+
@go test $(shell go list ./... | grep -v /vendor/)
6197

62-
$(DEP):
63-
@echo ">> fetching dep"
64-
@go get -u github.com/golang/dep/cmd/dep
6598

99+
# test-deps installs dependency for e2e tets.
100+
.PHONY: test-deps
66101
test-deps: deps
67102
@go install github.com/improbable-eng/thanos/cmd/thanos
68103
@go get -u github.com/prometheus/prometheus/cmd/prometheus
69104
@go get -u github.com/prometheus/alertmanager/cmd/alertmanager
70105

71-
proto:
72-
@go get -u github.com/gogo/protobuf/protoc-gen-gogofast
73-
@./scripts/genproto.sh
106+
# vet vets the code.
107+
.PHONY: vet
108+
vet:
109+
@echo ">> vetting code"
110+
@go vet ./...
74111

75-
test: test-deps
76-
@echo ">> running all tests. Do export THANOS_SKIP_GCS_TESTS="true" or/and export THANOS_SKIP_S3_AWS_TESTS="true" if you want to skip e2e tests against real store buckets"
77-
@go test $(shell go list ./... | grep -v /vendor/)
112+
# non-phony targets
78113

79-
assets:
80-
@echo ">> deleting asset file"
81-
@rm pkg/query/ui/bindata.go || true
82-
@echo ">> writing assets"
83-
@go get -u github.com/jteeuwen/go-bindata/...
84-
@go-bindata $(bindata_flags) -pkg ui -o pkg/query/ui/bindata.go -ignore '(.*\.map|bootstrap\.js|bootstrap-theme\.css|bootstrap\.css)' pkg/query/ui/templates/... pkg/query/ui/static/...
85-
@go fmt ./pkg/query/ui
114+
vendor: Gopkg.toml Gopkg.lock | $(DEP)
115+
@echo ">> dep ensure"
116+
@$(DEP) ensure
86117

87-
docker: build
88-
@echo ">> building docker image '${DOCKER_IMAGE_NAME}'"
89-
@docker build -t "${DOCKER_IMAGE_NAME}" .
118+
$(GOIMPORTS):
119+
@echo ">> fetching goimports"
120+
@go get -u golang.org/x/tools/cmd/goimports
90121

91-
docker-push:
92-
@echo ">> pushing image"
93-
@docker tag "${DOCKER_IMAGE_NAME}" improbable/"$(DOCKER_IMAGE_NAME):$(DOCKER_IMAGE_TAG)"
94-
@docker push improbable/"$(DOCKER_IMAGE_NAME):$(DOCKER_IMAGE_TAG)"
122+
$(PROMU):
123+
@echo ">> fetching promu"
124+
GOOS= GOARCH= go get -u github.com/prometheus/promu
95125

96-
docs:
97-
@go get -u github.com/campoy/embedmd
98-
@go build ./cmd/thanos/...
99-
@scripts/genflagdocs.sh
126+
$(DEP):
127+
@echo ">> fetching dep"
128+
@go get -u github.com/golang/dep/cmd/dep
100129

101-
.PHONY: all install-tools format vet errcheck build assets docker docker-push docs deps
130+
$(ERRCHECK):
131+
@echo ">> fetching errcheck"
132+
@go get -u github.com/kisielk/errcheck

cmd/thanos/bucket.go

+8-8
Original file line numberDiff line numberDiff line change
@@ -58,23 +58,23 @@ func registerBucket(m map[string]setupFunc, app *kingpin.Application, name strin
5858
verifyIDWhitelist := verify.Flag("id-whitelist", "Block IDs to verify (and optionally repair) only. "+
5959
"If none is specified, all blocks will be verified. Repeated field").Strings()
6060
m[name+" verify"] = func(g *run.Group, logger log.Logger, reg *prometheus.Registry, _ opentracing.Tracer, _ bool) error {
61-
bkt, err := client.NewBucket(gcsBucket, *s3Config, reg, name)
61+
bkt, err := client.NewBucket(logger, gcsBucket, *s3Config, reg, name)
6262
if err != nil {
6363
return err
6464
}
65-
defer runutil.LogOnErr(logger, bkt, "bucket client")
65+
defer runutil.CloseWithLogOnErr(logger, bkt, "bucket client")
6666

6767
backupS3Config := *s3Config
6868
backupS3Config.Bucket = *verifyBackupS3Bucket
69-
backupBkt, err := client.NewBucket(verifyBackupGCSBucket, backupS3Config, reg, name)
69+
backupBkt, err := client.NewBucket(logger, verifyBackupGCSBucket, backupS3Config, reg, name)
7070
if err == client.ErrNotFound {
7171
if *verifyRepair {
7272
return errors.Wrap(err, "repair is specified, so backup client is required")
7373
}
7474
} else if err != nil {
7575
return err
7676
} else {
77-
defer runutil.LogOnErr(logger, backupBkt, "backup bucket client")
77+
defer runutil.CloseWithLogOnErr(logger, backupBkt, "backup bucket client")
7878
}
7979

8080
// Dummy actor to immediately kill the group after the run function returns.
@@ -126,15 +126,15 @@ func registerBucket(m map[string]setupFunc, app *kingpin.Application, name strin
126126
lsOutput := ls.Flag("output", "Format in which to print each block's information. May be 'json' or custom template.").
127127
Short('o').Default("").String()
128128
m[name+" ls"] = func(g *run.Group, logger log.Logger, reg *prometheus.Registry, _ opentracing.Tracer, _ bool) error {
129-
bkt, err := client.NewBucket(gcsBucket, *s3Config, reg, name)
129+
bkt, err := client.NewBucket(logger, gcsBucket, *s3Config, reg, name)
130130
if err != nil {
131131
return err
132132
}
133133

134134
// Dummy actor to immediately kill the group after the run function returns.
135135
g.Add(func() error { return nil }, func(error) {})
136136

137-
defer runutil.LogOnErr(logger, bkt, "bucket client")
137+
defer runutil.CloseWithLogOnErr(logger, bkt, "bucket client")
138138

139139
ctx, cancel := context.WithTimeout(context.Background(), 5*time.Minute)
140140
defer cancel()
@@ -155,7 +155,7 @@ func registerBucket(m map[string]setupFunc, app *kingpin.Application, name strin
155155
enc.SetIndent("", "\t")
156156

157157
printBlock = func(id ulid.ULID) error {
158-
m, err := block.DownloadMeta(ctx, bkt, id)
158+
m, err := block.DownloadMeta(ctx, logger, bkt, id)
159159
if err != nil {
160160
return err
161161
}
@@ -167,7 +167,7 @@ func registerBucket(m map[string]setupFunc, app *kingpin.Application, name strin
167167
return errors.Wrap(err, "invalid template")
168168
}
169169
printBlock = func(id ulid.ULID) error {
170-
m, err := block.DownloadMeta(ctx, bkt, id)
170+
m, err := block.DownloadMeta(ctx, logger, bkt, id)
171171
if err != nil {
172172
return err
173173
}

cmd/thanos/compact.go

+3-3
Original file line numberDiff line numberDiff line change
@@ -82,15 +82,15 @@ func runCompact(
8282

8383
reg.MustRegister(halted)
8484

85-
bkt, err := client.NewBucket(&gcsBucket, *s3Config, reg, component)
85+
bkt, err := client.NewBucket(logger, &gcsBucket, *s3Config, reg, component)
8686
if err != nil {
8787
return err
8888
}
8989

9090
// Ensure we close up everything properly.
9191
defer func() {
9292
if err != nil {
93-
runutil.LogOnErr(logger, bkt, "bucket client")
93+
runutil.CloseWithLogOnErr(logger, bkt, "bucket client")
9494
}
9595
}()
9696

@@ -185,7 +185,7 @@ func runCompact(
185185
}
186186

187187
g.Add(func() error {
188-
defer runutil.LogOnErr(logger, bkt, "bucket client")
188+
defer runutil.CloseWithLogOnErr(logger, bkt, "bucket client")
189189

190190
if !wait {
191191
return f()

cmd/thanos/downsample.go

+10-10
Original file line numberDiff line numberDiff line change
@@ -53,15 +53,15 @@ func runDownsample(
5353
component string,
5454
) error {
5555

56-
bkt, err := client.NewBucket(&gcsBucket, *s3Config, reg, component)
56+
bkt, err := client.NewBucket(logger, &gcsBucket, *s3Config, reg, component)
5757
if err != nil {
5858
return err
5959
}
6060

6161
// Ensure we close up everything properly.
6262
defer func() {
6363
if err != nil {
64-
runutil.LogOnErr(logger, bkt, "bucket client")
64+
runutil.CloseWithLogOnErr(logger, bkt, "bucket client")
6565
}
6666
}()
6767

@@ -70,7 +70,7 @@ func runDownsample(
7070
ctx, cancel := context.WithCancel(context.Background())
7171

7272
g.Add(func() error {
73-
defer runutil.LogOnErr(logger, bkt, "bucket client")
73+
defer runutil.CloseWithLogOnErr(logger, bkt, "bucket client")
7474

7575
level.Info(logger).Log("msg", "start first pass of downsampling")
7676

@@ -118,7 +118,7 @@ func downsampleBucket(
118118
if err != nil {
119119
return errors.Wrapf(err, "get meta for block %s", id)
120120
}
121-
defer runutil.LogOnErr(logger, rc, "block reader")
121+
defer runutil.CloseWithLogOnErr(logger, rc, "block reader")
122122

123123
var m block.Meta
124124
if err := json.NewDecoder(rc).Decode(&m); err != nil {
@@ -206,13 +206,13 @@ func processDownsampling(ctx context.Context, logger log.Logger, bkt objstore.Bu
206206
begin := time.Now()
207207
bdir := filepath.Join(dir, m.ULID.String())
208208

209-
err := block.Download(ctx, bkt, m.ULID, bdir)
209+
err := block.Download(ctx, logger, bkt, m.ULID, bdir)
210210
if err != nil {
211211
return errors.Wrapf(err, "download block %s", m.ULID)
212212
}
213213
level.Info(logger).Log("msg", "downloaded block", "id", m.ULID, "duration", time.Since(begin))
214214

215-
if err := block.VerifyIndex(filepath.Join(bdir, block.IndexFilename), m.MinTime, m.MaxTime); err != nil {
215+
if err := block.VerifyIndex(logger, filepath.Join(bdir, block.IndexFilename), m.MinTime, m.MaxTime); err != nil {
216216
return errors.Wrap(err, "input block index not valid")
217217
}
218218

@@ -229,9 +229,9 @@ func processDownsampling(ctx context.Context, logger log.Logger, bkt objstore.Bu
229229
if err != nil {
230230
return errors.Wrapf(err, "open block %s", m.ULID)
231231
}
232-
defer runutil.LogOnErr(log.With(logger, "outcome", "potential left mmap file handlers left"), b, "tsdb reader")
232+
defer runutil.CloseWithLogOnErr(log.With(logger, "outcome", "potential left mmap file handlers left"), b, "tsdb reader")
233233

234-
id, err := downsample.Downsample(m, b, dir, resolution)
234+
id, err := downsample.Downsample(logger, m, b, dir, resolution)
235235
if err != nil {
236236
return errors.Wrapf(err, "downsample block %s to window %d", m.ULID, resolution)
237237
}
@@ -240,13 +240,13 @@ func processDownsampling(ctx context.Context, logger log.Logger, bkt objstore.Bu
240240
level.Info(logger).Log("msg", "downsampled block",
241241
"from", m.ULID, "to", id, "duration", time.Since(begin))
242242

243-
if err := block.VerifyIndex(filepath.Join(resdir, block.IndexFilename), m.MinTime, m.MaxTime); err != nil {
243+
if err := block.VerifyIndex(logger, filepath.Join(resdir, block.IndexFilename), m.MinTime, m.MaxTime); err != nil {
244244
return errors.Wrap(err, "output block index not valid")
245245
}
246246

247247
begin = time.Now()
248248

249-
err = block.Upload(ctx, bkt, resdir)
249+
err = block.Upload(ctx, logger, bkt, resdir)
250250
if err != nil {
251251
return errors.Wrapf(err, "upload downsampled block %s", id)
252252
}

cmd/thanos/main.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -243,7 +243,7 @@ func metricHTTPListenGroup(g *run.Group, logger log.Logger, reg *prometheus.Regi
243243
level.Info(logger).Log("msg", "Listening for metrics", "address", httpBindAddr)
244244
return errors.Wrap(http.Serve(l, mux), "serve metrics")
245245
}, func(error) {
246-
runutil.LogOnErr(logger, l, "metric listener")
246+
runutil.CloseWithLogOnErr(logger, l, "metric listener")
247247
})
248248
return nil
249249
}

0 commit comments

Comments
 (0)