From 73b733b86131ae7b0fa09d2d6576776938659464 Mon Sep 17 00:00:00 2001 From: Jean Rouge Date: Mon, 10 Sep 2018 13:37:08 -0700 Subject: [PATCH 1/7] Adding a Dockerfile and making it easy to use it for dev Credit goes to dperny (https://github.com/docker/swarmkit/pull/2687) **- What I did** Adds a Dockerfile for the swarmkit project, to easily get off the ground. Modifies the Makefile to make intelligent use of Docker. Also made small clean up changes to the Makefile. **- How I did it** Modifies the Makefile to have two paths: containerized.mk, which builds the docker image and forwards any make targets to a container, and direct.mk, which encompasses the old Makefile's workflow. By default, nothing will run inside a container. Set the environment variable `DOCKER_SWARMKIT_USE_CONTAINER` to use dockerized making. Also leverages docker-sync for synchronizing code to the container if the `DOCKER_SWARMKIT_USE_DOCKER_SYNC` env variable is set; comes in handy on Macs, for example. **- How to test it** Set `DOCKER_SWARMKIT_USE_CONTAINER` and verify that your favorite make targets all work! Signed-off-by: Jean Rouge (cherry picked from commit f8c048cd8c00d3530bbdd87e160c6d0a6e30ac42) Signed-off-by: Sebastiaan van Stijn --- .gitignore | 3 + BUILDING.md | 12 ++++ Dockerfile | 30 +++++++++ Makefile | 145 ++++--------------------------------------- containerized.mk | 49 +++++++++++++++ direct.mk | 156 +++++++++++++++++++++++++++++++++++++++++++++++ docker-sync.yml | 9 +++ 7 files changed, 271 insertions(+), 133 deletions(-) create mode 100644 Dockerfile create mode 100644 containerized.mk create mode 100644 direct.mk create mode 100644 docker-sync.yml diff --git a/.gitignore b/.gitignore index 05d2662884..097fd203b0 100644 --- a/.gitignore +++ b/.gitignore @@ -31,3 +31,6 @@ bin/swarmkitstate # ignore code coverage output *coverage.txt + +# dev sync, if used +/.docker-sync/ diff --git a/BUILDING.md b/BUILDING.md index 70e96f5abb..db82902a90 100644 --- a/BUILDING.md +++ b/BUILDING.md @@ -113,3 +113,15 @@ NB: As of version 3.0.0-7 the Debian `protobuf-compiler` package lacks a dependency on `libprotobuf-dev` which contains some standard proto definitions, be sure to install both packages. This is [Debian bug #842158](https://bugs.debian.org/842158). + +### Build in a container instead of your local environment + +You can also choose to use a container to build SwarmKit and run tests. Simply +set the `DOCKER_SWARMKIT_USE_CONTAINER` environment variable to any value, +export it, then run `make` targets as you would have done within your local +environment. + +Additionally, if your OS is not Linux, you might want to set and export the +`DOCKER_SWARMKIT_USE_DOCKER_SYNC` environment variable, which will make use of +[docker-sync](https://github.com/EugenMayer/docker-sync) to sync the code to +the container, instead of native mounted volumes. diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000000..4a951ecc69 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,30 @@ +# NOTE(dperny): for some reason, alpine was giving me trouble +FROM golang:1.10.3-stretch + +RUN apt-get update && apt-get install -y make git unzip + +# should stay consistent with the version we use in Circle builds +ARG PROTOC_VERSION=3.5.0 +# make a directory to do these operations in +RUN export PROTOC_TMP_DIR=protoc && mkdir -p $PROTOC_TMP_DIR && cd $PROTOC_TMP_DIR \ + # download the pre-built protoc binary + && curl --silent --show-error --location --output protoc.zip \ + https://github.com/google/protobuf/releases/download/v$PROTOC_VERSION/protoc-$PROTOC_VERSION-linux-x86_64.zip \ + # move the binary to /bin. move the well-known types ot /usr/local/include + && unzip protoc.zip && mv bin/protoc /bin/protoc && mv include/* /usr/local/include \ + # remove all of the installation files + && cd .. && rm -rf $PROTOC_TMP_DIR + +WORKDIR /go/src/github.com/docker/swarmkit/ + +# install the dependencies from `make setup` +# we only copy `direct.mk` to avoid busting the cache too easily +COPY direct.mk . +RUN make --file=direct.mk setup + +# now we can copy the rest +COPY . . + +# default to just `make`. If you want to change the default command, change the +# default make command, not this command. +CMD ["make"] diff --git a/Makefile b/Makefile index b9dbdd3d3a..8696f2dd64 100644 --- a/Makefile +++ b/Makefile @@ -24,136 +24,15 @@ VNDR=$(shell which vndr || echo '') GO_LDFLAGS=-ldflags "-X `go list ./version`.Version=$(VERSION)" -.PHONY: clean all AUTHORS fmt vet lint build binaries test integration setup generate protos checkprotos coverage ci check help install uninstall dep-validate -.DEFAULT: default - -all: check binaries test integration ## run fmt, vet, lint, build the binaries and run the tests - -check: fmt vet lint ineffassign misspell ## run fmt, vet, lint, ineffassign, misspell - -ci: check binaries checkprotos coverage coverage-integration ## to be used by the CI - -AUTHORS: .mailmap .git/HEAD - git log --format='%aN <%aE>' | sort -fu > $@ - -# This only needs to be generated by hand when cutting full releases. -version/version.go: - ./version/version.sh > $@ - -setup: ## install dependencies - @echo "🐳 $@" - # TODO(stevvooe): Install these from the vendor directory - @go get -u github.com/golang/lint/golint - #@go get -u github.com/kisielk/errcheck - @go get -u github.com/gordonklaus/ineffassign - @go get -u github.com/client9/misspell/cmd/misspell - @go get -u github.com/lk4d4/vndr - @go get -u github.com/stevvooe/protobuild - -generate: protos - @echo "🐳 $@" - @PATH=${ROOTDIR}/bin:${PATH} go generate -x ${PACKAGES} - -protos: bin/protoc-gen-gogoswarm ## generate protobuf - @echo "🐳 $@" - @PATH=${ROOTDIR}/bin:${PATH} protobuild ${PACKAGES} - -checkprotos: generate ## check if protobufs needs to be generated again - @echo "🐳 $@" - @test -z "$$(git status --short | grep ".pb.go" | tee /dev/stderr)" || \ - ((git diff | cat) && \ - (echo "👹 please run 'make generate' when making changes to proto files" && false)) - -# Depends on binaries because vet will silently fail if it can't load compiled -# imports -vet: binaries ## run go vet - @echo "🐳 $@" - @test -z "$$(go vet ${PACKAGES} 2>&1 | grep -v 'constant [0-9]* not a string in call to Errorf' | egrep -v '(timestamp_test.go|duration_test.go|exit status 1)' | tee /dev/stderr)" - -misspell: - @echo "🐳 $@" - @test -z "$$(find . -type f | grep -v vendor/ | grep -v bin/ | grep -v .git/ | grep -v MAINTAINERS | xargs misspell | tee /dev/stderr)" - -fmt: ## run go fmt - @echo "🐳 $@" - @test -z "$$(gofmt -s -l . | grep -v vendor/ | grep -v ".pb.go$$" | tee /dev/stderr)" || \ - (echo "👹 please format Go code with 'gofmt -s -w'" && false) - @test -z "$$(find . -path ./vendor -prune -o ! -name timestamp.proto ! -name duration.proto -name '*.proto' -type f -exec grep -Hn -e "^ " {} \; | tee /dev/stderr)" || \ - (echo "👹 please indent proto files with tabs only" && false) - @test -z "$$(find . -path ./vendor -prune -o -name '*.proto' -type f -exec grep -Hn "Meta meta = " {} \; | grep -v '(gogoproto.nullable) = false' | tee /dev/stderr)" || \ - (echo "👹 meta fields in proto files must have option (gogoproto.nullable) = false" && false) - -lint: ## run go lint - @echo "🐳 $@" - @test -z "$$(golint ./... | grep -v vendor/ | grep -v ".pb.go:" | tee /dev/stderr)" - -ineffassign: ## run ineffassign - @echo "🐳 $@" - @test -z "$$(ineffassign . | grep -v vendor/ | grep -v ".pb.go:" | tee /dev/stderr)" - -#errcheck: ## run go errcheck -# @echo "🐳 $@" -# @test -z "$$(errcheck ./... | grep -v vendor/ | grep -v ".pb.go:" | tee /dev/stderr)" - -build: ## build the go packages - @echo "🐳 $@" - @go build -i -tags "${DOCKER_BUILDTAGS}" -v ${GO_LDFLAGS} ${GO_GCFLAGS} ${PACKAGES} - -test: ## run tests, except integration tests - @echo "🐳 $@" - @go test -parallel 8 ${RACE} -tags "${DOCKER_BUILDTAGS}" $(filter-out ${INTEGRATION_PACKAGE},${PACKAGES}) - -integration: ## run integration tests - @echo "🐳 $@" - @go test -parallel 8 ${RACE} -tags "${DOCKER_BUILDTAGS}" ${INTEGRATION_PACKAGE} - -FORCE: - -# Build a binary from a cmd. -bin/%: cmd/% FORCE - @test $$(go list) = "${PROJECT_ROOT}" || \ - (echo "👹 Please correctly set up your Go build environment. This project must be located at /src/${PROJECT_ROOT}" && false) - @echo "🐳 $@" - @go build -i -tags "${DOCKER_BUILDTAGS}" -o $@ ${GO_LDFLAGS} ${GO_GCFLAGS} ./$< - -binaries: $(BINARIES) ## build binaries - @echo "🐳 $@" - -clean: ## clean up binaries - @echo "🐳 $@" - @rm -f $(BINARIES) - -install: $(BINARIES) ## install binaries - @echo "🐳 $@" - @mkdir -p $(DESTDIR)/bin - @install $(BINARIES) $(DESTDIR)/bin - -uninstall: - @echo "🐳 $@" - @rm -f $(addprefix $(DESTDIR)/bin/,$(notdir $(BINARIES))) - -coverage: ## generate coverprofiles from the unit tests - @echo "🐳 $@" - @( for pkg in $(filter-out ${INTEGRATION_PACKAGE},${PACKAGES}); do \ - go test -i ${RACE} -tags "${DOCKER_BUILDTAGS}" -test.short -coverprofile="../../../$$pkg/coverage.txt" -covermode=atomic $$pkg || exit; \ - go test ${RACE} -tags "${DOCKER_BUILDTAGS}" -test.short -coverprofile="../../../$$pkg/coverage.txt" -covermode=atomic $$pkg || exit; \ - done ) - -coverage-integration: ## generate coverprofiles from the integration tests - @echo "🐳 $@" - go test ${RACE} -tags "${DOCKER_BUILDTAGS}" -test.short -coverprofile="../../../${INTEGRATION_PACKAGE}/coverage.txt" -covermode=atomic ${INTEGRATION_PACKAGE} - -help: ## this help - @awk 'BEGIN {FS = ":.*?## "} /^[a-zA-Z_-]+:.*?## / {printf "\033[36m%-30s\033[0m %s\n", $$1, $$2}' $(MAKEFILE_LIST) | sort - -dep-validate: - @echo "+ $@" - $(if $(VNDR), , \ - $(error Please install vndr: go get github.com/lk4d4/vndr)) - @rm -Rf .vendor.bak - @mv vendor .vendor.bak - @$(VNDR) - @test -z "$$(diff -r vendor .vendor.bak 2>&1 | tee /dev/stderr)" || \ - (echo >&2 "+ inconsistent dependencies! what you have in vendor.conf does not match with what you have in vendor" && false) - @rm -Rf vendor - @mv .vendor.bak vendor +SHELL := /bin/bash + +# stop here. do we want to run everything inside of a container, or do we want +# to run it directly on the host? if the user has set ANY non-empty value for +# the variable DOCKER_SWARMKIT_USE_CONTAINER, then we do all of the making +# inside of a container. We will default to using no container, to avoid +# breaking anyone's workflow +ifdef DOCKER_SWARMKIT_USE_CONTAINER +include containerized.mk +else +include direct.mk +endif diff --git a/containerized.mk b/containerized.mk new file mode 100644 index 0000000000..4910352242 --- /dev/null +++ b/containerized.mk @@ -0,0 +1,49 @@ +IMAGE_NAME=docker/swarmkit +GOPATH=/go +DOCKER_IMAGE_DIR=${GOPATH}/src/${PROJECT_ROOT} + +# don't bother writing every single make target. just pass the call through to +# docker and make +# we prefer `%:` to `.DEFAULT` as the latter doesn't run phony deps +# (see https://www.gnu.org/software/make/manual/html_node/Special-Targets.html) +%:: + @ echo "Running target $@ inside a container" + @ DOCKER_SWARMKIT_DOCKER_RUN_CMD="make $*" $(MAKE) run + +shell: + @ DOCKER_SWARMKIT_DOCKER_RUN_CMD='bash' DOCKER_SWARMKIT_DOCKER_RUN_FLAGS='-i' $(MAKE) run + +.PHONY: image +image: + docker build -t ${IMAGE_NAME} . + +# internal target, only builds the image if it doesn't exist +.PHONY: ensure_image_exists +ensure_image_exists: + @ if [ ! $$(docker images -q ${IMAGE_NAME}) ]; then $(MAKE) image; fi + +# internal target, starts the sync if needed +# uses https://github.com/EugenMayer/docker-sync/blob/47363ee31b71810a60b05822b9c4bd2176951ce8/tasks/sync/sync.thor#L193-L196 +# which is not great, but that's all they expose so far to do this... +# checks if the daemon pid in the .docker-sync directory maps to a running +# process owned by the current user, and otherwise assumes the sync is not +# running, and starts it +.PHONY: ensure_sync_started +ensure_sync_started: + @ kill -0 $$(cat .docker-sync/daemon.pid) 2&> /dev/null || docker-sync start + +# internal target, actually runs a command inside a container +# we don't use the `-i` flag for `docker run` by default as that makes it a pain +# to kill running containers (can't kill with ctrl-c) +.PHONY: run +run: ensure_image_exists + @ [ "$$DOCKER_SWARMKIT_DOCKER_RUN_CMD" ] || exit 1 + @ DOCKER_RUN_COMMAND="docker run -t -v swarmkit-cache:${GOPATH}" \ + && if [ "$$DOCKER_SWARMKIT_USE_DOCKER_SYNC" ]; then \ + $(MAKE) ensure_sync_started && DOCKER_RUN_COMMAND="$$DOCKER_RUN_COMMAND -v swarmkit-sync:${DOCKER_IMAGE_DIR}"; \ + else \ + DOCKER_RUN_COMMAND="$$DOCKER_RUN_COMMAND -v ${ROOTDIR}:${DOCKER_IMAGE_DIR}"; \ + fi \ + && DOCKER_RUN_COMMAND="$$DOCKER_RUN_COMMAND $$DOCKER_SWARMKIT_DOCKER_RUN_FLAGS ${IMAGE_NAME} $$DOCKER_SWARMKIT_DOCKER_RUN_CMD" \ + && echo $$DOCKER_RUN_COMMAND \ + && $$DOCKER_RUN_COMMAND diff --git a/direct.mk b/direct.mk new file mode 100644 index 0000000000..334d3fc81b --- /dev/null +++ b/direct.mk @@ -0,0 +1,156 @@ +.DEFAULT_GOAL = all +.PHONY: all +all: check binaries test integration-tests ## run fmt, vet, lint, build the binaries and run the tests + +.PHONY: check +check: fmt vet lint ineffassign misspell + +.PHONY: ci +ci: check binaries checkprotos coverage coverage-integration ## to be used by the CI + +.PHONY: AUTHORS +AUTHORS: .mailmap .git/HEAD + git log --format='%aN <%aE>' | sort -fu > $@ + +# This only needs to be generated by hand when cutting full releases. +version/version.go: + ./version/version.sh > $@ + +.PHONY: setup +setup: ## install dependencies + @echo "🐳 $@" + # TODO(stevvooe): Install these from the vendor directory + @go get -u github.com/golang/lint/golint + #@go get -u github.com/kisielk/errcheck + @go get -u github.com/gordonklaus/ineffassign + @go get -u github.com/client9/misspell/cmd/misspell + @go get -u github.com/lk4d4/vndr + @go get -u github.com/stevvooe/protobuild + +.PHONY: generate +generate: protos + @echo "🐳 $@" + @PATH=${ROOTDIR}/bin:${PATH} go generate -x ${PACKAGES} + +.PHONY: protos +protos: bin/protoc-gen-gogoswarm ## generate protobuf + @echo "🐳 $@" + @PATH=${ROOTDIR}/bin:${PATH} protobuild ${PACKAGES} + +.PHONY: checkprotos +checkprotos: generate ## check if protobufs needs to be generated again + @echo "🐳 $@" + @test -z "$$(git status --short | grep ".pb.go" | tee /dev/stderr)" || \ + ((git diff | cat) && \ + (echo "👹 please run 'make generate' when making changes to proto files" && false)) + +# Depends on binaries because vet will silently fail if it can't load compiled +# imports +.PHONY: vet +vet: binaries ## run go vet + @echo "🐳 $@" + @test -z "$$(go vet ${PACKAGES} 2>&1 | grep -v 'constant [0-9]* not a string in call to Errorf' | egrep -v '(timestamp_test.go|duration_test.go|exit status 1)' | tee /dev/stderr)" + +.PHONY: misspell +misspell: + @echo "🐳 $@" + @test -z "$$(find . -type f | grep -v vendor/ | grep -v bin/ | grep -v .git/ | grep -v MAINTAINERS | xargs misspell | tee /dev/stderr)" + +.PHONY: fmt +fmt: ## run go fmt + @echo "🐳 $@" + @test -z "$$(gofmt -s -l . | grep -v vendor/ | grep -v ".pb.go$$" | tee /dev/stderr)" || \ + (echo "👹 please format Go code with 'gofmt -s -w'" && false) + @test -z "$$(find . -path ./vendor -prune -o ! -name timestamp.proto ! -name duration.proto -name '*.proto' -type f -exec grep -Hn -e "^ " {} \; | tee /dev/stderr)" || \ + (echo "👹 please indent proto files with tabs only" && false) + @test -z "$$(find . -path ./vendor -prune -o -name '*.proto' -type f -exec grep -Hn "Meta meta = " {} \; | grep -v '(gogoproto.nullable) = false' | tee /dev/stderr)" || \ + (echo "👹 meta fields in proto files must have option (gogoproto.nullable) = false" && false) + +.PHONY: lint +lint: ## run go lint + @echo "🐳 $@" + @test -z "$$(golint ./... | grep -v vendor/ | grep -v ".pb.go:" | tee /dev/stderr)" + +.PHONY: ineffassign +ineffassign: ## run ineffassign + @echo "🐳 $@" + @test -z "$$(ineffassign . | grep -v vendor/ | grep -v ".pb.go:" | tee /dev/stderr)" + +#errcheck: ## run go errcheck +# @echo "🐳 $@" +# @test -z "$$(errcheck ./... | grep -v vendor/ | grep -v ".pb.go:" | tee /dev/stderr)" + +.PHONY: build +build: ## build the go packages + @echo "🐳 $@" + @go build -i -tags "${DOCKER_BUILDTAGS}" -v ${GO_LDFLAGS} ${GO_GCFLAGS} ${PACKAGES} + +.PHONY: test +test: ## run tests, except integration tests + @echo "🐳 $@" + @go test -parallel 8 ${RACE} -tags "${DOCKER_BUILDTAGS}" $(filter-out ${INTEGRATION_PACKAGE},${PACKAGES}) + +.PHONY: integration-tests +integration-tests: ## run integration tests + @echo "🐳 $@" + @go test -parallel 8 ${RACE} -tags "${DOCKER_BUILDTAGS}" ${INTEGRATION_PACKAGE} + +# Build a binary from a cmd. +bin/%: cmd/% .FORCE + @test $$(go list) = "${PROJECT_ROOT}" || \ + (echo "👹 Please correctly set up your Go build environment. This project must be located at /src/${PROJECT_ROOT}" && false) + @echo "🐳 $@" + @go build -i -tags "${DOCKER_BUILDTAGS}" -o $@ ${GO_LDFLAGS} ${GO_GCFLAGS} ./$< + +.PHONY: .FORCE +.FORCE: + +.PHONY: binaries +binaries: $(BINARIES) ## build binaries + @echo "🐳 $@" + +.PHONY: clean +clean: ## clean up binaries + @echo "🐳 $@" + @rm -f $(BINARIES) + +.PHONY: install +install: $(BINARIES) ## install binaries + @echo "🐳 $@" + @mkdir -p $(DESTDIR)/bin + @install $(BINARIES) $(DESTDIR)/bin + +.PHONY: uninstall +uninstall: + @echo "🐳 $@" + @rm -f $(addprefix $(DESTDIR)/bin/,$(notdir $(BINARIES))) + +.PHONY: coverage +coverage: ## generate coverprofiles from the unit tests + @echo "🐳 $@" + @( for pkg in $(filter-out ${INTEGRATION_PACKAGE},${PACKAGES}); do \ + go test -i ${RACE} -tags "${DOCKER_BUILDTAGS}" -test.short -coverprofile="../../../$$pkg/coverage.txt" -covermode=atomic $$pkg || exit; \ + go test ${RACE} -tags "${DOCKER_BUILDTAGS}" -test.short -coverprofile="../../../$$pkg/coverage.txt" -covermode=atomic $$pkg || exit; \ + done ) + +.PHONY: coverage-integration +coverage-integration: ## generate coverprofiles from the integration tests + @echo "🐳 $@" + go test ${RACE} -tags "${DOCKER_BUILDTAGS}" -test.short -coverprofile="../../../${INTEGRATION_PACKAGE}/coverage.txt" -covermode=atomic ${INTEGRATION_PACKAGE} + +.PHONY: help +help: ## this help + @awk 'BEGIN {FS = ":.*?## "} /^[a-zA-Z_-]+:.*?## / {printf "\033[36m%-30s\033[0m %s\n", $$1, $$2}' $(MAKEFILE_LIST) | sort + +.PHONY: dep-validate +dep-validate: + @echo "+ $@" + $(if $(VNDR), , \ + $(error Please install vndr: go get github.com/lk4d4/vndr)) + @rm -Rf .vendor.bak + @mv vendor .vendor.bak + @$(VNDR) + @test -z "$$(diff -r vendor .vendor.bak 2>&1 | tee /dev/stderr)" || \ + (echo >&2 "+ inconsistent dependencies! what you have in vendor.conf does not match with what you have in vendor" && false) + @rm -Rf vendor + @mv .vendor.bak vendor diff --git a/docker-sync.yml b/docker-sync.yml new file mode 100644 index 0000000000..67856985da --- /dev/null +++ b/docker-sync.yml @@ -0,0 +1,9 @@ +version: "2" + +options: + verbose: true +syncs: + # should stay the same as the volume name used in `containerized.mk`'s `run` target + swarmkit-sync: + src: '.' + sync_excludes: ['_obj', '_test', 'bin'] From 17a74c32c42cfb87a1ebe95195faeb41bf15e339 Mon Sep 17 00:00:00 2001 From: Kir Kolyshkin Date: Tue, 18 Sep 2018 02:17:17 -0700 Subject: [PATCH 2/7] Makefile: use gometalinter Instead of running many small source code checkers and linters one by one, let's use gometalinter that runs them all in parallel. While at it, remove the individual make targets (fmt, vet, lint, ineffassign, and misspell) and replace with a single check target. One thing it provides is faster source validation. BEFORE: real 0m24.025s user 1m2.646s sys 0m3.860s (note these timings are without building binaries, which for some reason was a dependency of the vet target) AFTER: real 0m6.330s user 0m20.255s sys 0m1.019s In addition to this, it is now way easier to add/remove the checks, as well as to filter out some errors from linters that we consider false positives. [v2: add 2m deadline] [v3: use gometalinter --install; move configuration to .json] Signed-off-by: Kir Kolyshkin (cherry picked from commit 318574db9d8b5953f966b7f7e0e8803fb4de03b4) Signed-off-by: Sebastiaan van Stijn --- .gometalinter.json | 14 ++++++++++++++ direct.mk | 46 +++++++++------------------------------------- 2 files changed, 23 insertions(+), 37 deletions(-) create mode 100644 .gometalinter.json diff --git a/.gometalinter.json b/.gometalinter.json new file mode 100644 index 0000000000..28f126de0f --- /dev/null +++ b/.gometalinter.json @@ -0,0 +1,14 @@ +{ + "Vendor": true, + "Exclude": [ + ".*\\.pb\\.go" + ], + "Enable": [ + "vet", + "misspell", + "gofmt", + "golint", + "ineffassign" + ], + "Deadline": "2m" +} diff --git a/direct.mk b/direct.mk index 334d3fc81b..8ac8348c22 100644 --- a/direct.mk +++ b/direct.mk @@ -1,9 +1,6 @@ .DEFAULT_GOAL = all .PHONY: all -all: check binaries test integration-tests ## run fmt, vet, lint, build the binaries and run the tests - -.PHONY: check -check: fmt vet lint ineffassign misspell +all: check binaries test integration-tests ## run check, build the binaries and run the tests .PHONY: ci ci: check binaries checkprotos coverage coverage-integration ## to be used by the CI @@ -20,10 +17,8 @@ version/version.go: setup: ## install dependencies @echo "🐳 $@" # TODO(stevvooe): Install these from the vendor directory - @go get -u github.com/golang/lint/golint - #@go get -u github.com/kisielk/errcheck - @go get -u github.com/gordonklaus/ineffassign - @go get -u github.com/client9/misspell/cmd/misspell + @go get -u github.com/alecthomas/gometalinter + @gometalinter --install @go get -u github.com/lk4d4/vndr @go get -u github.com/stevvooe/protobuild @@ -44,42 +39,19 @@ checkprotos: generate ## check if protobufs needs to be generated again ((git diff | cat) && \ (echo "👹 please run 'make generate' when making changes to proto files" && false)) -# Depends on binaries because vet will silently fail if it can't load compiled -# imports -.PHONY: vet -vet: binaries ## run go vet - @echo "🐳 $@" - @test -z "$$(go vet ${PACKAGES} 2>&1 | grep -v 'constant [0-9]* not a string in call to Errorf' | egrep -v '(timestamp_test.go|duration_test.go|exit status 1)' | tee /dev/stderr)" - -.PHONY: misspell -misspell: +.PHONY: check +check: fmt-proto +check: ## Run various source code validation tools @echo "🐳 $@" - @test -z "$$(find . -type f | grep -v vendor/ | grep -v bin/ | grep -v .git/ | grep -v MAINTAINERS | xargs misspell | tee /dev/stderr)" + @gometalinter ./... -.PHONY: fmt -fmt: ## run go fmt - @echo "🐳 $@" - @test -z "$$(gofmt -s -l . | grep -v vendor/ | grep -v ".pb.go$$" | tee /dev/stderr)" || \ - (echo "👹 please format Go code with 'gofmt -s -w'" && false) +.PHONY: fmt-proto +fmt-proto: @test -z "$$(find . -path ./vendor -prune -o ! -name timestamp.proto ! -name duration.proto -name '*.proto' -type f -exec grep -Hn -e "^ " {} \; | tee /dev/stderr)" || \ (echo "👹 please indent proto files with tabs only" && false) @test -z "$$(find . -path ./vendor -prune -o -name '*.proto' -type f -exec grep -Hn "Meta meta = " {} \; | grep -v '(gogoproto.nullable) = false' | tee /dev/stderr)" || \ (echo "👹 meta fields in proto files must have option (gogoproto.nullable) = false" && false) -.PHONY: lint -lint: ## run go lint - @echo "🐳 $@" - @test -z "$$(golint ./... | grep -v vendor/ | grep -v ".pb.go:" | tee /dev/stderr)" - -.PHONY: ineffassign -ineffassign: ## run ineffassign - @echo "🐳 $@" - @test -z "$$(ineffassign . | grep -v vendor/ | grep -v ".pb.go:" | tee /dev/stderr)" - -#errcheck: ## run go errcheck -# @echo "🐳 $@" -# @test -z "$$(errcheck ./... | grep -v vendor/ | grep -v ".pb.go:" | tee /dev/stderr)" - .PHONY: build build: ## build the go packages @echo "🐳 $@" From 3a06e5d65e4c2aa2b7c3612cf9504712f38efde1 Mon Sep 17 00:00:00 2001 From: Kir Kolyshkin Date: Tue, 18 Sep 2018 02:47:40 -0700 Subject: [PATCH 3/7] Switch from x/net/context -> context 1. Since Go 1.7, context is a standard package. Since Go 1.9, everything that is provided by "x/net/context" is a couple of type aliases to types in "context". 2. While at it, fix the order of imports (done by goimports and some shell trickery, see below). 3. Also, when the standard context package is used, the errors of not calling cancel() are detected/reported by go vet: > the cancel function returned by context.WithTimeout should be called, > not discarded, to avoid a context leak (vet) This essentially asks to call cancel() as otherwise a stray timer is leaked. Fix a few such issues, mostly in _test.go files. 4. Since in func (*session).start (see agent/session.go) we deliberately do not want to cancel the context, govet gives us a couple of errors: > agent/session.go:140: the cancelSession function is not used > on all paths (possible context leak) > agent/session.go:163: this return statement may be reached > without using the cancelSession var defined on line 140 To silence these, use `// nolint: vet` mark in a couple of places (this is a feature of gometalinter). Oh, the conversion (items 1 and 2 above) was performed by this shell script: ```sh FILES=$* test -z "$FILES" && FILES=$(git ls-files \*.go | grep -v ^vendor/ | grep -v .pb.go$) for f in $FILES; do sed -i 's|"golang.org/x/net/context"|"context"|' $f goimports -w $f for i in 1 2; do awk '/^$/ {e=1; next;} /\t"context"$/ {e=0;} {if (e) {print ""; e=0}; print;}' < $f > $f.new && mv $f.new $f goimports -w $f done echo -n . done echo ``` Multiple `goimports` calls and some awk trickery is needed to iron out incorrect formatting (excessive empty lines) from the import statements. Signed-off-by: Kir Kolyshkin (cherry picked from commit b25f50fdda5b4999e8c37d5e54725cd6734911eb) Signed-off-by: Sebastiaan van Stijn --- agent/agent.go | 2 +- agent/agent_test.go | 5 +++-- agent/exec/containerd/adapter.go | 2 +- agent/exec/containerd/controller.go | 2 +- agent/exec/containerd/executor.go | 2 +- agent/exec/controller.go | 2 +- agent/exec/controller_stub.go | 5 +++-- agent/exec/controller_test.go | 2 +- agent/exec/dockerapi/adapter.go | 2 +- agent/exec/dockerapi/controller.go | 2 +- .../dockerapi/controller_integration_test.go | 2 +- agent/exec/dockerapi/controller_test.go | 2 +- agent/exec/dockerapi/docker_client_stub.go | 11 ++++++----- agent/exec/dockerapi/executor.go | 4 ++-- agent/exec/executor.go | 3 ++- agent/helpers.go | 2 +- agent/reporter.go | 2 +- agent/reporter_test.go | 2 +- agent/resource.go | 3 ++- agent/session.go | 6 +++--- agent/task.go | 2 +- agent/task_test.go | 2 +- agent/testutils/fakes.go | 2 +- agent/worker.go | 2 +- agent/worker_test.go | 2 +- api/genericresource/resource_management.go | 1 + api/genericresource/validate.go | 1 + ca/auth.go | 2 +- ca/certificates.go | 2 +- ca/certificates_test.go | 5 +++-- ca/config.go | 3 +-- ca/config_test.go | 3 +-- ca/external.go | 2 +- ca/forward.go | 3 ++- ca/renewer.go | 2 +- ca/renewer_test.go | 2 +- ca/server.go | 2 +- ca/server_test.go | 2 +- ca/testutils/cautils.go | 2 +- ca/transport.go | 2 +- cmd/swarm-bench/benchmark.go | 2 +- cmd/swarm-bench/collector.go | 2 +- cmd/swarm-bench/main.go | 2 +- cmd/swarm-rafttool/common.go | 3 +-- cmd/swarmctl/cluster/common.go | 3 +-- cmd/swarmctl/common/common.go | 2 +- cmd/swarmctl/common/resolver.go | 2 +- cmd/swarmctl/config/common.go | 2 +- cmd/swarmctl/network/common.go | 2 +- cmd/swarmctl/node/common.go | 3 +-- cmd/swarmctl/secret/common.go | 2 +- cmd/swarmctl/service/common.go | 3 +-- cmd/swarmctl/service/logs.go | 2 +- cmd/swarmd/main.go | 2 +- integration/api.go | 3 ++- integration/cluster.go | 2 +- integration/integration_test.go | 3 +-- integration/node.go | 2 +- log/context.go | 2 +- log/context_test.go | 2 +- log/grpc.go | 3 ++- manager/allocator/allocator.go | 2 +- manager/allocator/allocator_linux_test.go | 3 +-- manager/allocator/allocator_test.go | 3 +-- .../allocator/cnmallocator/networkallocator.go | 2 +- manager/allocator/network.go | 2 +- manager/controlapi/cluster.go | 2 +- manager/controlapi/cluster_test.go | 2 +- manager/controlapi/config.go | 2 +- manager/controlapi/config_test.go | 2 +- manager/controlapi/network.go | 2 +- manager/controlapi/network_test.go | 3 +-- manager/controlapi/node.go | 2 +- manager/controlapi/node_test.go | 2 +- manager/controlapi/secret.go | 2 +- manager/controlapi/secret_test.go | 2 +- manager/controlapi/server_test.go | 2 +- manager/controlapi/service.go | 2 +- manager/controlapi/service_test.go | 2 +- manager/controlapi/task.go | 3 ++- manager/controlapi/task_test.go | 2 +- manager/dirty_test.go | 3 +-- manager/dispatcher/dispatcher.go | 2 +- manager/dispatcher/dispatcher_test.go | 3 +-- manager/health/health.go | 2 +- manager/keymanager/keymanager.go | 2 +- manager/keymanager/keymanager_test.go | 2 +- manager/logbroker/broker.go | 2 +- manager/logbroker/broker_test.go | 2 +- manager/logbroker/subscription.go | 2 +- manager/manager.go | 2 +- manager/manager_test.go | 3 +-- manager/orchestrator/global/global.go | 3 ++- manager/orchestrator/global/global_test.go | 2 +- manager/orchestrator/replicated/drain_test.go | 2 +- manager/orchestrator/replicated/replicated.go | 3 ++- .../orchestrator/replicated/replicated_test.go | 2 +- .../orchestrator/replicated/restart_test.go | 2 +- manager/orchestrator/replicated/services.go | 2 +- manager/orchestrator/replicated/slot.go | 3 ++- manager/orchestrator/replicated/tasks.go | 3 ++- manager/orchestrator/replicated/update_test.go | 2 +- manager/orchestrator/restart/restart.go | 2 +- manager/orchestrator/service.go | 3 ++- manager/orchestrator/task_test.go | 5 +++-- manager/orchestrator/taskinit/init.go | 2 +- manager/orchestrator/taskreaper/task_reaper.go | 2 +- manager/orchestrator/update/updater.go | 3 +-- manager/orchestrator/update/updater_test.go | 2 +- manager/raftselector/raftselector.go | 3 +-- manager/resourceapi/allocator.go | 2 +- manager/role_manager.go | 2 +- manager/scheduler/nodeinfo.go | 2 +- manager/scheduler/scheduler.go | 2 +- manager/scheduler/scheduler_test.go | 2 +- manager/state/proposer.go | 3 ++- manager/state/raft/membership/cluster_test.go | 18 +++++++++++------- manager/state/raft/raft.go | 2 +- manager/state/raft/raft_test.go | 11 ++++++----- manager/state/raft/storage.go | 2 +- manager/state/raft/storage/storage.go | 3 +-- manager/state/raft/storage/storage_test.go | 2 +- manager/state/raft/storage/walwrap.go | 2 +- manager/state/raft/storage/walwrap_test.go | 2 +- manager/state/raft/storage_test.go | 8 +++++--- manager/state/raft/testutils/testutils.go | 6 +++--- manager/state/raft/transport/mock_raft_test.go | 2 +- manager/state/raft/transport/peer.go | 3 +-- manager/state/raft/transport/peer_test.go | 3 +-- manager/state/raft/transport/transport.go | 3 +-- manager/state/raft/transport/transport_test.go | 3 +-- manager/state/raft/util.go | 3 +-- manager/state/store/memory.go | 2 +- manager/state/testutils/mock_proposer.go | 2 +- manager/watchapi/server.go | 2 +- manager/watchapi/server_test.go | 2 +- manager/watchapi/watch_test.go | 2 +- node/node.go | 2 +- node/node_test.go | 2 +- .../plugin/raftproxy/test/raftproxy_test.go | 3 +-- 140 files changed, 189 insertions(+), 185 deletions(-) diff --git a/agent/agent.go b/agent/agent.go index 4a11c69e2f..a40221a99a 100644 --- a/agent/agent.go +++ b/agent/agent.go @@ -2,6 +2,7 @@ package agent import ( "bytes" + "context" "fmt" "math/rand" "reflect" @@ -11,7 +12,6 @@ import ( "github.com/docker/swarmkit/agent/exec" "github.com/docker/swarmkit/api" "github.com/docker/swarmkit/log" - "golang.org/x/net/context" ) const ( diff --git a/agent/agent_test.go b/agent/agent_test.go index 8b84e957b2..49c33b908a 100644 --- a/agent/agent_test.go +++ b/agent/agent_test.go @@ -1,6 +1,7 @@ package agent import ( + "context" "crypto/tls" "errors" "fmt" @@ -25,7 +26,6 @@ import ( "github.com/docker/swarmkit/xnet" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" - "golang.org/x/net/context" ) var localDispatcher = false @@ -90,7 +90,8 @@ func TestAgentStartStop(t *testing.T) { require.NoError(t, err) assert.NotNil(t, agent) - ctx, _ := context.WithTimeout(tc.Context, 5000*time.Millisecond) + ctx, cancel := context.WithTimeout(tc.Context, 5000*time.Millisecond) + defer cancel() assert.Equal(t, errAgentNotStarted, agent.Stop(ctx)) assert.NoError(t, agent.Start(ctx)) diff --git a/agent/exec/containerd/adapter.go b/agent/exec/containerd/adapter.go index 36365e8887..a07a6947d9 100644 --- a/agent/exec/containerd/adapter.go +++ b/agent/exec/containerd/adapter.go @@ -1,6 +1,7 @@ package containerd import ( + "context" "fmt" "os" "path/filepath" @@ -20,7 +21,6 @@ import ( "github.com/opencontainers/runtime-spec/specs-go" "github.com/pkg/errors" "github.com/sirupsen/logrus" - "golang.org/x/net/context" ) var ( diff --git a/agent/exec/containerd/controller.go b/agent/exec/containerd/controller.go index 43b8bfebc4..8c1070f88a 100644 --- a/agent/exec/containerd/controller.go +++ b/agent/exec/containerd/controller.go @@ -1,6 +1,7 @@ package containerd import ( + "context" "fmt" "github.com/containerd/containerd" @@ -8,7 +9,6 @@ import ( "github.com/docker/swarmkit/api" "github.com/docker/swarmkit/log" "github.com/pkg/errors" - "golang.org/x/net/context" ) type controller struct { diff --git a/agent/exec/containerd/executor.go b/agent/exec/containerd/executor.go index 3b9f9ba09c..8949ec7ec7 100644 --- a/agent/exec/containerd/executor.go +++ b/agent/exec/containerd/executor.go @@ -1,6 +1,7 @@ package containerd import ( + "context" "os" "runtime" @@ -12,7 +13,6 @@ import ( "github.com/docker/swarmkit/api" "github.com/docker/swarmkit/log" "github.com/pkg/errors" - "golang.org/x/net/context" ) type executor struct { diff --git a/agent/exec/controller.go b/agent/exec/controller.go index c9e9343fd7..b617d37ca3 100644 --- a/agent/exec/controller.go +++ b/agent/exec/controller.go @@ -1,6 +1,7 @@ package exec import ( + "context" "fmt" "time" @@ -10,7 +11,6 @@ import ( "github.com/docker/swarmkit/protobuf/ptypes" "github.com/pkg/errors" "github.com/sirupsen/logrus" - "golang.org/x/net/context" ) // Controller controls execution of a task. diff --git a/agent/exec/controller_stub.go b/agent/exec/controller_stub.go index 076955ff80..dd16ce457d 100644 --- a/agent/exec/controller_stub.go +++ b/agent/exec/controller_stub.go @@ -1,10 +1,11 @@ package exec import ( - "github.com/docker/swarmkit/api" - "golang.org/x/net/context" + "context" "runtime" "strings" + + "github.com/docker/swarmkit/api" ) // StubController implements the Controller interface, diff --git a/agent/exec/controller_test.go b/agent/exec/controller_test.go index 2de4f436f3..76634056a2 100644 --- a/agent/exec/controller_test.go +++ b/agent/exec/controller_test.go @@ -1,6 +1,7 @@ package exec import ( + "context" "errors" "fmt" "runtime" @@ -10,7 +11,6 @@ import ( "github.com/docker/swarmkit/log" gogotypes "github.com/gogo/protobuf/types" "github.com/stretchr/testify/assert" - "golang.org/x/net/context" ) func TestResolve(t *testing.T) { diff --git a/agent/exec/dockerapi/adapter.go b/agent/exec/dockerapi/adapter.go index 45943dd9ea..c30b749f31 100644 --- a/agent/exec/dockerapi/adapter.go +++ b/agent/exec/dockerapi/adapter.go @@ -1,6 +1,7 @@ package dockerapi import ( + "context" "encoding/json" "fmt" "io" @@ -16,7 +17,6 @@ import ( gogotypes "github.com/gogo/protobuf/types" "github.com/pkg/errors" "github.com/sirupsen/logrus" - "golang.org/x/net/context" "golang.org/x/time/rate" ) diff --git a/agent/exec/dockerapi/controller.go b/agent/exec/dockerapi/controller.go index 12bac6ec63..1450fbdc36 100644 --- a/agent/exec/dockerapi/controller.go +++ b/agent/exec/dockerapi/controller.go @@ -3,6 +3,7 @@ package dockerapi import ( "bufio" "bytes" + "context" "encoding/binary" "fmt" "io" @@ -19,7 +20,6 @@ import ( "github.com/docker/swarmkit/log" gogotypes "github.com/gogo/protobuf/types" "github.com/pkg/errors" - "golang.org/x/net/context" "golang.org/x/time/rate" ) diff --git a/agent/exec/dockerapi/controller_integration_test.go b/agent/exec/dockerapi/controller_integration_test.go index 3c4d6866d5..7e766e051a 100644 --- a/agent/exec/dockerapi/controller_integration_test.go +++ b/agent/exec/dockerapi/controller_integration_test.go @@ -1,6 +1,7 @@ package dockerapi import ( + "context" "flag" "testing" @@ -9,7 +10,6 @@ import ( "github.com/docker/swarmkit/api" "github.com/docker/swarmkit/api/genericresource" "github.com/stretchr/testify/assert" - "golang.org/x/net/context" ) var ( diff --git a/agent/exec/dockerapi/controller_test.go b/agent/exec/dockerapi/controller_test.go index 7c95fabbe4..2ec2e8af52 100644 --- a/agent/exec/dockerapi/controller_test.go +++ b/agent/exec/dockerapi/controller_test.go @@ -2,6 +2,7 @@ package dockerapi import ( "bytes" + "context" "fmt" "io" "io/ioutil" @@ -20,7 +21,6 @@ import ( "github.com/docker/swarmkit/log" gogotypes "github.com/gogo/protobuf/types" "github.com/stretchr/testify/assert" - "golang.org/x/net/context" ) var tenSecond = 10 * time.Second diff --git a/agent/exec/dockerapi/docker_client_stub.go b/agent/exec/dockerapi/docker_client_stub.go index 653f3df1a8..41ee3ee89c 100644 --- a/agent/exec/dockerapi/docker_client_stub.go +++ b/agent/exec/dockerapi/docker_client_stub.go @@ -1,16 +1,17 @@ package dockerapi import ( + "context" + "io" + "runtime" + "strings" + "time" + "github.com/docker/docker/api/types" "github.com/docker/docker/api/types/container" "github.com/docker/docker/api/types/events" "github.com/docker/docker/api/types/network" "github.com/docker/docker/client" - "golang.org/x/net/context" - "io" - "runtime" - "strings" - "time" ) // StubAPIClient implements the client.APIClient interface, but allows diff --git a/agent/exec/dockerapi/executor.go b/agent/exec/dockerapi/executor.go index 6601ce224b..011164596c 100644 --- a/agent/exec/dockerapi/executor.go +++ b/agent/exec/dockerapi/executor.go @@ -1,8 +1,10 @@ package dockerapi import ( + "context" "sort" "strings" + "sync" "github.com/docker/docker/api/types/filters" engineapi "github.com/docker/docker/client" @@ -10,8 +12,6 @@ import ( "github.com/docker/swarmkit/agent/secrets" "github.com/docker/swarmkit/api" "github.com/docker/swarmkit/log" - "golang.org/x/net/context" - "sync" ) type executor struct { diff --git a/agent/exec/executor.go b/agent/exec/executor.go index 8c3fd03506..26c1bfcba7 100644 --- a/agent/exec/executor.go +++ b/agent/exec/executor.go @@ -1,8 +1,9 @@ package exec import ( + "context" + "github.com/docker/swarmkit/api" - "golang.org/x/net/context" ) // Executor provides controllers for tasks. diff --git a/agent/helpers.go b/agent/helpers.go index 5fdf166059..5e95d93297 100644 --- a/agent/helpers.go +++ b/agent/helpers.go @@ -1,6 +1,6 @@ package agent -import "golang.org/x/net/context" +import "context" // runctx blocks until the function exits, closed is closed, or the context is // cancelled. Call as part of go statement. diff --git a/agent/reporter.go b/agent/reporter.go index 73e6ab3fd9..2afb75795f 100644 --- a/agent/reporter.go +++ b/agent/reporter.go @@ -1,12 +1,12 @@ package agent import ( + "context" "reflect" "sync" "github.com/docker/swarmkit/api" "github.com/docker/swarmkit/log" - "golang.org/x/net/context" ) // StatusReporter receives updates to task status. Method may be called diff --git a/agent/reporter_test.go b/agent/reporter_test.go index d0b5dc6d8e..fcafec5a8c 100644 --- a/agent/reporter_test.go +++ b/agent/reporter_test.go @@ -1,6 +1,7 @@ package agent import ( + "context" "errors" "fmt" "math/rand" @@ -9,7 +10,6 @@ import ( "github.com/docker/swarmkit/api" "github.com/stretchr/testify/assert" - "golang.org/x/net/context" ) type uniqueStatus struct { diff --git a/agent/resource.go b/agent/resource.go index 8e88d2cd65..32be069c11 100644 --- a/agent/resource.go +++ b/agent/resource.go @@ -1,8 +1,9 @@ package agent import ( + "context" + "github.com/docker/swarmkit/api" - "golang.org/x/net/context" ) type resourceAllocator struct { diff --git a/agent/session.go b/agent/session.go index 9bb9773a6c..1e374f86c2 100644 --- a/agent/session.go +++ b/agent/session.go @@ -1,6 +1,7 @@ package agent import ( + "context" "errors" "sync" "time" @@ -9,7 +10,6 @@ import ( "github.com/docker/swarmkit/connectionbroker" "github.com/docker/swarmkit/log" "github.com/sirupsen/logrus" - "golang.org/x/net/context" "google.golang.org/grpc" "google.golang.org/grpc/codes" ) @@ -129,7 +129,7 @@ func (s *session) start(ctx context.Context, description *api.NodeDescription) e // `ctx` is done and hence fail to propagate the timeout error to the agent. // If the error is not propogated to the agent, the agent will not close // the session or rebuild a new sesssion. - sessionCtx, cancelSession := context.WithCancel(ctx) + sessionCtx, cancelSession := context.WithCancel(ctx) // nolint: vet // Need to run Session in a goroutine since there's no way to set a // timeout for an individual Recv call in a stream. @@ -152,7 +152,7 @@ func (s *session) start(ctx context.Context, description *api.NodeDescription) e select { case err := <-errChan: if err != nil { - return err + return err // nolint: vet } case <-time.After(dispatcherRPCTimeout): cancelSession() diff --git a/agent/task.go b/agent/task.go index 95fe93179b..17c713c092 100644 --- a/agent/task.go +++ b/agent/task.go @@ -1,6 +1,7 @@ package agent import ( + "context" "sync" "time" @@ -8,7 +9,6 @@ import ( "github.com/docker/swarmkit/api" "github.com/docker/swarmkit/api/equality" "github.com/docker/swarmkit/log" - "golang.org/x/net/context" ) // taskManager manages all aspects of task execution and reporting for an agent diff --git a/agent/task_test.go b/agent/task_test.go index 3a6afce51b..85b83ddba2 100644 --- a/agent/task_test.go +++ b/agent/task_test.go @@ -1,6 +1,7 @@ package agent import ( + "context" "testing" "time" @@ -8,7 +9,6 @@ import ( "github.com/docker/swarmkit/api" "github.com/sirupsen/logrus" "github.com/stretchr/testify/assert" - "golang.org/x/net/context" ) func init() { diff --git a/agent/testutils/fakes.go b/agent/testutils/fakes.go index b2e5c81150..03d6f30dd0 100644 --- a/agent/testutils/fakes.go +++ b/agent/testutils/fakes.go @@ -1,6 +1,7 @@ package testutils import ( + "context" "io/ioutil" "net" "os" @@ -17,7 +18,6 @@ import ( "github.com/docker/swarmkit/identity" "github.com/docker/swarmkit/log" "github.com/stretchr/testify/require" - "golang.org/x/net/context" ) // TestExecutor is executor for integration tests diff --git a/agent/worker.go b/agent/worker.go index 6b500059a8..a5bf94f833 100644 --- a/agent/worker.go +++ b/agent/worker.go @@ -1,6 +1,7 @@ package agent import ( + "context" "sync" "github.com/boltdb/bolt" @@ -9,7 +10,6 @@ import ( "github.com/docker/swarmkit/log" "github.com/docker/swarmkit/watch" "github.com/sirupsen/logrus" - "golang.org/x/net/context" ) // Worker implements the core task management logic and persistence. It diff --git a/agent/worker_test.go b/agent/worker_test.go index f75e925e71..307a753c54 100644 --- a/agent/worker_test.go +++ b/agent/worker_test.go @@ -1,6 +1,7 @@ package agent import ( + "context" "testing" "github.com/boltdb/bolt" @@ -9,7 +10,6 @@ import ( "github.com/docker/swarmkit/log" "github.com/sirupsen/logrus" "github.com/stretchr/testify/assert" - "golang.org/x/net/context" ) type testPublisherProvider struct { diff --git a/api/genericresource/resource_management.go b/api/genericresource/resource_management.go index a89a118d62..506257ab97 100644 --- a/api/genericresource/resource_management.go +++ b/api/genericresource/resource_management.go @@ -2,6 +2,7 @@ package genericresource import ( "fmt" + "github.com/docker/swarmkit/api" ) diff --git a/api/genericresource/validate.go b/api/genericresource/validate.go index eee3706c74..0ad49ff75f 100644 --- a/api/genericresource/validate.go +++ b/api/genericresource/validate.go @@ -2,6 +2,7 @@ package genericresource import ( "fmt" + "github.com/docker/swarmkit/api" ) diff --git a/ca/auth.go b/ca/auth.go index df4547fb13..e0ff898c19 100644 --- a/ca/auth.go +++ b/ca/auth.go @@ -1,6 +1,7 @@ package ca import ( + "context" "crypto/tls" "crypto/x509/pkix" "strings" @@ -9,7 +10,6 @@ import ( "github.com/docker/swarmkit/api" "github.com/docker/swarmkit/log" - "golang.org/x/net/context" "google.golang.org/grpc/codes" "google.golang.org/grpc/credentials" "google.golang.org/grpc/peer" diff --git a/ca/certificates.go b/ca/certificates.go index f2d3dbac55..32e852d9e0 100644 --- a/ca/certificates.go +++ b/ca/certificates.go @@ -2,6 +2,7 @@ package ca import ( "bytes" + "context" "crypto" "crypto/ecdsa" "crypto/elliptic" @@ -31,7 +32,6 @@ import ( "github.com/docker/swarmkit/ioutils" "github.com/opencontainers/go-digest" "github.com/pkg/errors" - "golang.org/x/net/context" "google.golang.org/grpc" "google.golang.org/grpc/codes" "google.golang.org/grpc/credentials" diff --git a/ca/certificates_test.go b/ca/certificates_test.go index 2c7895510c..82bffc06f5 100644 --- a/ca/certificates_test.go +++ b/ca/certificates_test.go @@ -1,6 +1,7 @@ package ca_test import ( + "context" "crypto/ecdsa" "crypto/elliptic" cryptorand "crypto/rand" @@ -38,7 +39,6 @@ import ( "github.com/phayes/permbits" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" - "golang.org/x/net/context" ) func init() { @@ -747,7 +747,8 @@ func TestGetRemoteSignedCertificateWithPending(t *testing.T) { // make sure if we time out the GetRemoteSignedCertificate call, it cancels immediately and doesn't keep // polling the status go func() { - ctx, _ := context.WithTimeout(tc.Context, 1*time.Second) + ctx, cancel := context.WithTimeout(tc.Context, 1*time.Second) + defer cancel() _, err := ca.GetRemoteSignedCertificate(ctx, csr, tc.RootCA.Pool, ca.CertificateRequestConfig{ Token: tc.WorkerToken, diff --git a/ca/config.go b/ca/config.go index 4a7230ac2f..f31527c750 100644 --- a/ca/config.go +++ b/ca/config.go @@ -1,6 +1,7 @@ package ca import ( + "context" cryptorand "crypto/rand" "crypto/tls" "crypto/x509" @@ -23,8 +24,6 @@ import ( "github.com/pkg/errors" "github.com/sirupsen/logrus" "google.golang.org/grpc/credentials" - - "golang.org/x/net/context" ) const ( diff --git a/ca/config_test.go b/ca/config_test.go index f30d7e3284..e5a0e80388 100644 --- a/ca/config_test.go +++ b/ca/config_test.go @@ -2,6 +2,7 @@ package ca_test import ( "bytes" + "context" "crypto/tls" "crypto/x509" "fmt" @@ -15,8 +16,6 @@ import ( "google.golang.org/grpc" - "golang.org/x/net/context" - cfconfig "github.com/cloudflare/cfssl/config" "github.com/cloudflare/cfssl/helpers" "github.com/docker/swarmkit/api" diff --git a/ca/external.go b/ca/external.go index 789361eb61..6b81204595 100644 --- a/ca/external.go +++ b/ca/external.go @@ -2,6 +2,7 @@ package ca import ( "bytes" + "context" cryptorand "crypto/rand" "crypto/tls" "crypto/x509" @@ -21,7 +22,6 @@ import ( "github.com/docker/swarmkit/log" "github.com/pkg/errors" "github.com/sirupsen/logrus" - "golang.org/x/net/context" "golang.org/x/net/context/ctxhttp" ) diff --git a/ca/forward.go b/ca/forward.go index 617b151423..db4fd67da7 100644 --- a/ca/forward.go +++ b/ca/forward.go @@ -1,7 +1,8 @@ package ca import ( - "golang.org/x/net/context" + "context" + "google.golang.org/grpc/metadata" "google.golang.org/grpc/peer" ) diff --git a/ca/renewer.go b/ca/renewer.go index 2a2fae7808..e5d165f6a8 100644 --- a/ca/renewer.go +++ b/ca/renewer.go @@ -1,6 +1,7 @@ package ca import ( + "context" "sync" "time" @@ -9,7 +10,6 @@ import ( "github.com/docker/swarmkit/log" "github.com/pkg/errors" "github.com/sirupsen/logrus" - "golang.org/x/net/context" ) // RenewTLSExponentialBackoff sets the exponential backoff when trying to renew TLS certificates that have expired diff --git a/ca/renewer_test.go b/ca/renewer_test.go index b8ce3f81be..a0f3cd3258 100644 --- a/ca/renewer_test.go +++ b/ca/renewer_test.go @@ -1,6 +1,7 @@ package ca_test import ( + "context" "testing" "time" @@ -10,7 +11,6 @@ import ( "github.com/docker/swarmkit/manager/state/store" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" - "golang.org/x/net/context" ) func TestForceRenewTLSConfig(t *testing.T) { diff --git a/ca/server.go b/ca/server.go index a456df7900..c3e8999f89 100644 --- a/ca/server.go +++ b/ca/server.go @@ -2,6 +2,7 @@ package ca import ( "bytes" + "context" "crypto/subtle" "crypto/x509" "sync" @@ -15,7 +16,6 @@ import ( gogotypes "github.com/gogo/protobuf/types" "github.com/pkg/errors" "github.com/sirupsen/logrus" - "golang.org/x/net/context" "google.golang.org/grpc/codes" "google.golang.org/grpc/status" ) diff --git a/ca/server_test.go b/ca/server_test.go index 996051960d..d628347a87 100644 --- a/ca/server_test.go +++ b/ca/server_test.go @@ -2,6 +2,7 @@ package ca_test import ( "bytes" + "context" "crypto/tls" "crypto/x509" "fmt" @@ -25,7 +26,6 @@ import ( "github.com/sirupsen/logrus" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" - "golang.org/x/net/context" "google.golang.org/grpc" "google.golang.org/grpc/codes" ) diff --git a/ca/testutils/cautils.go b/ca/testutils/cautils.go index c3b086ed76..eb8ca882c1 100644 --- a/ca/testutils/cautils.go +++ b/ca/testutils/cautils.go @@ -1,6 +1,7 @@ package testutils import ( + "context" "crypto" cryptorand "crypto/rand" "crypto/tls" @@ -29,7 +30,6 @@ import ( "github.com/sirupsen/logrus" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" - "golang.org/x/net/context" "google.golang.org/grpc" "google.golang.org/grpc/credentials" ) diff --git a/ca/transport.go b/ca/transport.go index 6a6309a613..b505c66818 100644 --- a/ca/transport.go +++ b/ca/transport.go @@ -1,6 +1,7 @@ package ca import ( + "context" "crypto/tls" "crypto/x509" "crypto/x509/pkix" @@ -9,7 +10,6 @@ import ( "sync" "github.com/pkg/errors" - "golang.org/x/net/context" "google.golang.org/grpc/credentials" ) diff --git a/cmd/swarm-bench/benchmark.go b/cmd/swarm-bench/benchmark.go index fe2b61f276..312649e502 100644 --- a/cmd/swarm-bench/benchmark.go +++ b/cmd/swarm-bench/benchmark.go @@ -1,13 +1,13 @@ package main import ( + "context" "fmt" "os" "strconv" "time" "github.com/docker/swarmkit/api" - "golang.org/x/net/context" "google.golang.org/grpc" ) diff --git a/cmd/swarm-bench/collector.go b/cmd/swarm-bench/collector.go index 62d5022868..a93c1f077e 100644 --- a/cmd/swarm-bench/collector.go +++ b/cmd/swarm-bench/collector.go @@ -1,6 +1,7 @@ package main import ( + "context" "fmt" "io" "net" @@ -9,7 +10,6 @@ import ( "github.com/docker/swarmkit/log" "github.com/rcrowley/go-metrics" - "golang.org/x/net/context" ) // Collector waits for tasks to phone home while collecting statistics. diff --git a/cmd/swarm-bench/main.go b/cmd/swarm-bench/main.go index 8dab2244d8..445c7cace3 100644 --- a/cmd/swarm-bench/main.go +++ b/cmd/swarm-bench/main.go @@ -1,12 +1,12 @@ package main import ( + "context" "errors" "os" "time" "github.com/spf13/cobra" - "golang.org/x/net/context" ) var ( diff --git a/cmd/swarm-rafttool/common.go b/cmd/swarm-rafttool/common.go index a169b9af6e..dddb6e2428 100644 --- a/cmd/swarm-rafttool/common.go +++ b/cmd/swarm-rafttool/common.go @@ -1,13 +1,12 @@ package main import ( + "context" "errors" "io/ioutil" "os" "path/filepath" - "golang.org/x/net/context" - "github.com/coreos/etcd/pkg/fileutil" "github.com/coreos/etcd/wal/walpb" "github.com/docker/swarmkit/ca" diff --git a/cmd/swarmctl/cluster/common.go b/cmd/swarmctl/cluster/common.go index 0f9a922d1d..a667d05fbd 100644 --- a/cmd/swarmctl/cluster/common.go +++ b/cmd/swarmctl/cluster/common.go @@ -1,10 +1,9 @@ package cluster import ( + "context" "fmt" - "golang.org/x/net/context" - "github.com/docker/swarmkit/api" ) diff --git a/cmd/swarmctl/common/common.go b/cmd/swarmctl/common/common.go index 5872a77258..4f27e1a670 100644 --- a/cmd/swarmctl/common/common.go +++ b/cmd/swarmctl/common/common.go @@ -1,6 +1,7 @@ package common import ( + "context" "crypto/tls" "net" "strings" @@ -10,7 +11,6 @@ import ( "github.com/docker/swarmkit/xnet" "github.com/spf13/cobra" "github.com/spf13/pflag" - "golang.org/x/net/context" "google.golang.org/grpc" "google.golang.org/grpc/credentials" ) diff --git a/cmd/swarmctl/common/resolver.go b/cmd/swarmctl/common/resolver.go index 28d79ee70f..b4a9d416a1 100644 --- a/cmd/swarmctl/common/resolver.go +++ b/cmd/swarmctl/common/resolver.go @@ -1,11 +1,11 @@ package common import ( + "context" "fmt" "github.com/docker/swarmkit/api" "github.com/spf13/cobra" - "golang.org/x/net/context" ) // Resolver provides ID to Name resolution. diff --git a/cmd/swarmctl/config/common.go b/cmd/swarmctl/config/common.go index 247c3e5969..bbdc1d5c29 100644 --- a/cmd/swarmctl/config/common.go +++ b/cmd/swarmctl/config/common.go @@ -1,10 +1,10 @@ package config import ( + "context" "fmt" "github.com/docker/swarmkit/api" - "golang.org/x/net/context" ) func getConfig(ctx context.Context, c api.ControlClient, input string) (*api.Config, error) { diff --git a/cmd/swarmctl/network/common.go b/cmd/swarmctl/network/common.go index f4d4dc76d2..ad2c68bd73 100644 --- a/cmd/swarmctl/network/common.go +++ b/cmd/swarmctl/network/common.go @@ -1,10 +1,10 @@ package network import ( + "context" "fmt" "github.com/docker/swarmkit/api" - "golang.org/x/net/context" ) // GetNetwork tries to query for a network as an ID and if it can't be diff --git a/cmd/swarmctl/node/common.go b/cmd/swarmctl/node/common.go index 2d0beb9ad3..537a4f4292 100644 --- a/cmd/swarmctl/node/common.go +++ b/cmd/swarmctl/node/common.go @@ -1,13 +1,12 @@ package node import ( + "context" "errors" "fmt" "reflect" "strings" - "golang.org/x/net/context" - "github.com/docker/swarmkit/api" "github.com/docker/swarmkit/cmd/swarmctl/common" "github.com/spf13/cobra" diff --git a/cmd/swarmctl/secret/common.go b/cmd/swarmctl/secret/common.go index b6d5b0d4c3..5f7ca4e888 100644 --- a/cmd/swarmctl/secret/common.go +++ b/cmd/swarmctl/secret/common.go @@ -1,10 +1,10 @@ package secret import ( + "context" "fmt" "github.com/docker/swarmkit/api" - "golang.org/x/net/context" ) func getSecret(ctx context.Context, c api.ControlClient, input string) (*api.Secret, error) { diff --git a/cmd/swarmctl/service/common.go b/cmd/swarmctl/service/common.go index bab0a32d37..5d5db81fb0 100644 --- a/cmd/swarmctl/service/common.go +++ b/cmd/swarmctl/service/common.go @@ -1,10 +1,9 @@ package service import ( + "context" "fmt" - "golang.org/x/net/context" - "github.com/docker/swarmkit/api" ) diff --git a/cmd/swarmctl/service/logs.go b/cmd/swarmctl/service/logs.go index df7d0a5dcc..12ba7af664 100644 --- a/cmd/swarmctl/service/logs.go +++ b/cmd/swarmctl/service/logs.go @@ -1,6 +1,7 @@ package service import ( + "context" "fmt" "io" "os" @@ -9,7 +10,6 @@ import ( "github.com/docker/swarmkit/cmd/swarmctl/common" "github.com/pkg/errors" "github.com/spf13/cobra" - "golang.org/x/net/context" ) var ( diff --git a/cmd/swarmd/main.go b/cmd/swarmd/main.go index d5ffec0b3d..e4c5b5948f 100644 --- a/cmd/swarmd/main.go +++ b/cmd/swarmd/main.go @@ -1,6 +1,7 @@ package main import ( + "context" _ "expvar" "fmt" "net" @@ -25,7 +26,6 @@ import ( "github.com/prometheus/client_golang/prometheus" "github.com/sirupsen/logrus" "github.com/spf13/cobra" - "golang.org/x/net/context" ) var externalCAOpt cli.ExternalCAOpt diff --git a/integration/api.go b/integration/api.go index 0f44037887..b0042309dd 100644 --- a/integration/api.go +++ b/integration/api.go @@ -1,8 +1,9 @@ package integration import ( + "context" + "github.com/docker/swarmkit/api" - "golang.org/x/net/context" ) type dummyAPI struct { diff --git a/integration/cluster.go b/integration/cluster.go index e46e01edbe..182cf31770 100644 --- a/integration/cluster.go +++ b/integration/cluster.go @@ -1,6 +1,7 @@ package integration import ( + "context" "crypto/tls" "fmt" "math/rand" @@ -19,7 +20,6 @@ import ( "github.com/docker/swarmkit/node" "github.com/docker/swarmkit/testutils" "github.com/sirupsen/logrus" - "golang.org/x/net/context" ) const opsTimeout = 64 * time.Second diff --git a/integration/integration_test.go b/integration/integration_test.go index 5fc6ef0efb..247b1a64f3 100644 --- a/integration/integration_test.go +++ b/integration/integration_test.go @@ -2,6 +2,7 @@ package integration import ( "bytes" + "context" "flag" "fmt" "io/ioutil" @@ -14,8 +15,6 @@ import ( "github.com/docker/swarmkit/node" - "golang.org/x/net/context" - "reflect" "github.com/cloudflare/cfssl/helpers" diff --git a/integration/node.go b/integration/node.go index 6b2100bfdf..263c3b7eec 100644 --- a/integration/node.go +++ b/integration/node.go @@ -1,6 +1,7 @@ package integration import ( + "context" "fmt" "io/ioutil" "os" @@ -15,7 +16,6 @@ import ( "github.com/docker/swarmkit/ca" "github.com/docker/swarmkit/node" "github.com/docker/swarmkit/testutils" - "golang.org/x/net/context" ) // TestNode is representation of *agent.Node. It stores listeners, connections, diff --git a/log/context.go b/log/context.go index ac4f848806..cc1d590f11 100644 --- a/log/context.go +++ b/log/context.go @@ -1,10 +1,10 @@ package log import ( + "context" "path" "github.com/sirupsen/logrus" - "golang.org/x/net/context" ) var ( diff --git a/log/context_test.go b/log/context_test.go index ddff398938..6c59874c0a 100644 --- a/log/context_test.go +++ b/log/context_test.go @@ -1,10 +1,10 @@ package log import ( + "context" "testing" "github.com/stretchr/testify/assert" - "golang.org/x/net/context" ) func TestLoggerContext(t *testing.T) { diff --git a/log/grpc.go b/log/grpc.go index 4978d49730..c209f75417 100644 --- a/log/grpc.go +++ b/log/grpc.go @@ -1,7 +1,8 @@ package log import ( - "golang.org/x/net/context" + "context" + "google.golang.org/grpc/grpclog" ) diff --git a/manager/allocator/allocator.go b/manager/allocator/allocator.go index 5ca50623bb..3686721a95 100644 --- a/manager/allocator/allocator.go +++ b/manager/allocator/allocator.go @@ -1,6 +1,7 @@ package allocator import ( + "context" "sync" "github.com/docker/docker/pkg/plugingetter" @@ -8,7 +9,6 @@ import ( "github.com/docker/swarmkit/api" "github.com/docker/swarmkit/manager/state" "github.com/docker/swarmkit/manager/state/store" - "golang.org/x/net/context" ) // Allocator controls how the allocation stage in the manager is handled. diff --git a/manager/allocator/allocator_linux_test.go b/manager/allocator/allocator_linux_test.go index b94b1b0637..765adc1299 100644 --- a/manager/allocator/allocator_linux_test.go +++ b/manager/allocator/allocator_linux_test.go @@ -1,10 +1,9 @@ package allocator import ( + "context" "testing" - "golang.org/x/net/context" - "github.com/docker/swarmkit/api" "github.com/docker/swarmkit/manager/state" "github.com/docker/swarmkit/manager/state/store" diff --git a/manager/allocator/allocator_test.go b/manager/allocator/allocator_test.go index 5c1dc6b5b3..2bff7d3695 100644 --- a/manager/allocator/allocator_test.go +++ b/manager/allocator/allocator_test.go @@ -1,14 +1,13 @@ package allocator import ( + "context" "net" "runtime/debug" "strconv" "testing" "time" - "golang.org/x/net/context" - "github.com/docker/go-events" "github.com/docker/swarmkit/api" "github.com/docker/swarmkit/manager/state" diff --git a/manager/allocator/cnmallocator/networkallocator.go b/manager/allocator/cnmallocator/networkallocator.go index 2d533a47cd..c07632acb2 100644 --- a/manager/allocator/cnmallocator/networkallocator.go +++ b/manager/allocator/cnmallocator/networkallocator.go @@ -1,6 +1,7 @@ package cnmallocator import ( + "context" "fmt" "net" "strings" @@ -16,7 +17,6 @@ import ( "github.com/docker/swarmkit/manager/allocator/networkallocator" "github.com/pkg/errors" "github.com/sirupsen/logrus" - "golang.org/x/net/context" ) const ( diff --git a/manager/allocator/network.go b/manager/allocator/network.go index 1036017490..437f455afe 100644 --- a/manager/allocator/network.go +++ b/manager/allocator/network.go @@ -1,6 +1,7 @@ package allocator import ( + "context" "fmt" "time" @@ -13,7 +14,6 @@ import ( "github.com/docker/swarmkit/manager/state/store" "github.com/docker/swarmkit/protobuf/ptypes" "github.com/pkg/errors" - "golang.org/x/net/context" ) const ( diff --git a/manager/controlapi/cluster.go b/manager/controlapi/cluster.go index adc0c1a485..fd2daad125 100644 --- a/manager/controlapi/cluster.go +++ b/manager/controlapi/cluster.go @@ -1,6 +1,7 @@ package controlapi import ( + "context" "strings" "time" @@ -10,7 +11,6 @@ import ( "github.com/docker/swarmkit/manager/encryption" "github.com/docker/swarmkit/manager/state/store" gogotypes "github.com/gogo/protobuf/types" - "golang.org/x/net/context" "google.golang.org/grpc/codes" "google.golang.org/grpc/status" ) diff --git a/manager/controlapi/cluster_test.go b/manager/controlapi/cluster_test.go index ad05a13596..4c22b0e2ab 100644 --- a/manager/controlapi/cluster_test.go +++ b/manager/controlapi/cluster_test.go @@ -1,6 +1,7 @@ package controlapi import ( + "context" "fmt" "testing" "time" @@ -13,7 +14,6 @@ import ( gogotypes "github.com/gogo/protobuf/types" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" - "golang.org/x/net/context" "google.golang.org/grpc" "google.golang.org/grpc/codes" ) diff --git a/manager/controlapi/config.go b/manager/controlapi/config.go index ae08885b00..bc8726fb86 100644 --- a/manager/controlapi/config.go +++ b/manager/controlapi/config.go @@ -2,6 +2,7 @@ package controlapi import ( "bytes" + "context" "strings" "github.com/docker/swarmkit/api" @@ -9,7 +10,6 @@ import ( "github.com/docker/swarmkit/log" "github.com/docker/swarmkit/manager/state/store" "github.com/sirupsen/logrus" - "golang.org/x/net/context" "google.golang.org/grpc/codes" "google.golang.org/grpc/status" ) diff --git a/manager/controlapi/config_test.go b/manager/controlapi/config_test.go index 3774527442..460a08ba6a 100644 --- a/manager/controlapi/config_test.go +++ b/manager/controlapi/config_test.go @@ -1,6 +1,7 @@ package controlapi import ( + "context" "fmt" "strings" "testing" @@ -8,7 +9,6 @@ import ( "github.com/docker/swarmkit/api" "github.com/docker/swarmkit/manager/state/store" "github.com/stretchr/testify/assert" - "golang.org/x/net/context" "google.golang.org/grpc" "google.golang.org/grpc/codes" ) diff --git a/manager/controlapi/network.go b/manager/controlapi/network.go index 481b0cfe4b..d3047fec72 100644 --- a/manager/controlapi/network.go +++ b/manager/controlapi/network.go @@ -1,6 +1,7 @@ package controlapi import ( + "context" "net" "github.com/docker/docker/pkg/plugingetter" @@ -11,7 +12,6 @@ import ( "github.com/docker/swarmkit/manager/allocator" "github.com/docker/swarmkit/manager/allocator/networkallocator" "github.com/docker/swarmkit/manager/state/store" - "golang.org/x/net/context" "google.golang.org/grpc/codes" "google.golang.org/grpc/status" ) diff --git a/manager/controlapi/network_test.go b/manager/controlapi/network_test.go index e719018acc..d11792221e 100644 --- a/manager/controlapi/network_test.go +++ b/manager/controlapi/network_test.go @@ -1,10 +1,9 @@ package controlapi import ( + "context" "testing" - "golang.org/x/net/context" - "google.golang.org/grpc" "google.golang.org/grpc/codes" diff --git a/manager/controlapi/node.go b/manager/controlapi/node.go index e1fe3dec1d..18576ae25c 100644 --- a/manager/controlapi/node.go +++ b/manager/controlapi/node.go @@ -1,6 +1,7 @@ package controlapi import ( + "context" "crypto/x509" "encoding/pem" @@ -8,7 +9,6 @@ import ( "github.com/docker/swarmkit/manager/state/raft/membership" "github.com/docker/swarmkit/manager/state/store" gogotypes "github.com/gogo/protobuf/types" - "golang.org/x/net/context" "google.golang.org/grpc/codes" "google.golang.org/grpc/status" ) diff --git a/manager/controlapi/node_test.go b/manager/controlapi/node_test.go index 603b72b894..9290a19d42 100644 --- a/manager/controlapi/node_test.go +++ b/manager/controlapi/node_test.go @@ -1,6 +1,7 @@ package controlapi import ( + "context" "fmt" "io/ioutil" "log" @@ -15,7 +16,6 @@ import ( "github.com/sirupsen/logrus" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" - "golang.org/x/net/context" "google.golang.org/grpc" "google.golang.org/grpc/codes" "google.golang.org/grpc/grpclog" diff --git a/manager/controlapi/secret.go b/manager/controlapi/secret.go index fdcd2c412c..f3d87d1a7c 100644 --- a/manager/controlapi/secret.go +++ b/manager/controlapi/secret.go @@ -1,6 +1,7 @@ package controlapi import ( + "context" "crypto/subtle" "strings" @@ -10,7 +11,6 @@ import ( "github.com/docker/swarmkit/log" "github.com/docker/swarmkit/manager/state/store" "github.com/sirupsen/logrus" - "golang.org/x/net/context" "google.golang.org/grpc/codes" "google.golang.org/grpc/status" ) diff --git a/manager/controlapi/secret_test.go b/manager/controlapi/secret_test.go index cf66e39144..00d87ea85f 100644 --- a/manager/controlapi/secret_test.go +++ b/manager/controlapi/secret_test.go @@ -1,6 +1,7 @@ package controlapi import ( + "context" "fmt" "strings" "testing" @@ -8,7 +9,6 @@ import ( "github.com/docker/swarmkit/api" "github.com/docker/swarmkit/manager/state/store" "github.com/stretchr/testify/assert" - "golang.org/x/net/context" "google.golang.org/grpc" "google.golang.org/grpc/codes" ) diff --git a/manager/controlapi/server_test.go b/manager/controlapi/server_test.go index c788c796f4..3f07db8781 100644 --- a/manager/controlapi/server_test.go +++ b/manager/controlapi/server_test.go @@ -1,6 +1,7 @@ package controlapi import ( + "context" "io/ioutil" "net" "os" @@ -15,7 +16,6 @@ import ( "github.com/docker/swarmkit/manager/state/store" stateutils "github.com/docker/swarmkit/manager/state/testutils" "github.com/stretchr/testify/assert" - "golang.org/x/net/context" ) type testServer struct { diff --git a/manager/controlapi/service.go b/manager/controlapi/service.go index 3912052bf0..3e6c789444 100644 --- a/manager/controlapi/service.go +++ b/manager/controlapi/service.go @@ -1,6 +1,7 @@ package controlapi import ( + "context" "errors" "reflect" "strings" @@ -18,7 +19,6 @@ import ( "github.com/docker/swarmkit/protobuf/ptypes" "github.com/docker/swarmkit/template" gogotypes "github.com/gogo/protobuf/types" - "golang.org/x/net/context" "google.golang.org/grpc/codes" "google.golang.org/grpc/status" ) diff --git a/manager/controlapi/service_test.go b/manager/controlapi/service_test.go index 7ce97cd982..81b71caa21 100644 --- a/manager/controlapi/service_test.go +++ b/manager/controlapi/service_test.go @@ -1,6 +1,7 @@ package controlapi import ( + "context" "fmt" "strings" "testing" @@ -10,7 +11,6 @@ import ( "github.com/docker/swarmkit/manager/state/store" gogotypes "github.com/gogo/protobuf/types" "github.com/stretchr/testify/assert" - "golang.org/x/net/context" "google.golang.org/grpc" "google.golang.org/grpc/codes" ) diff --git a/manager/controlapi/task.go b/manager/controlapi/task.go index dc56e74105..5f85f9a93c 100644 --- a/manager/controlapi/task.go +++ b/manager/controlapi/task.go @@ -1,11 +1,12 @@ package controlapi import ( + "context" + "github.com/docker/swarmkit/api" "github.com/docker/swarmkit/api/naming" "github.com/docker/swarmkit/manager/orchestrator" "github.com/docker/swarmkit/manager/state/store" - "golang.org/x/net/context" "google.golang.org/grpc/codes" "google.golang.org/grpc/status" ) diff --git a/manager/controlapi/task_test.go b/manager/controlapi/task_test.go index 075428bb8b..031fe0006d 100644 --- a/manager/controlapi/task_test.go +++ b/manager/controlapi/task_test.go @@ -1,10 +1,10 @@ package controlapi import ( + "context" "strings" "testing" - "golang.org/x/net/context" "google.golang.org/grpc" "google.golang.org/grpc/codes" diff --git a/manager/dirty_test.go b/manager/dirty_test.go index 259cedcb2f..3f6468f8b2 100644 --- a/manager/dirty_test.go +++ b/manager/dirty_test.go @@ -1,12 +1,11 @@ package manager import ( + "context" "io/ioutil" "os" "testing" - "golang.org/x/net/context" - "github.com/docker/swarmkit/api" "github.com/docker/swarmkit/ca" "github.com/docker/swarmkit/ca/testutils" diff --git a/manager/dispatcher/dispatcher.go b/manager/dispatcher/dispatcher.go index 991459574a..1330a155e4 100644 --- a/manager/dispatcher/dispatcher.go +++ b/manager/dispatcher/dispatcher.go @@ -1,6 +1,7 @@ package dispatcher import ( + "context" "fmt" "net" "strconv" @@ -21,7 +22,6 @@ import ( gogotypes "github.com/gogo/protobuf/types" "github.com/pkg/errors" "github.com/sirupsen/logrus" - "golang.org/x/net/context" "google.golang.org/grpc/codes" "google.golang.org/grpc/status" "google.golang.org/grpc/transport" diff --git a/manager/dispatcher/dispatcher_test.go b/manager/dispatcher/dispatcher_test.go index 09dcf0d684..a84e074eb1 100644 --- a/manager/dispatcher/dispatcher_test.go +++ b/manager/dispatcher/dispatcher_test.go @@ -1,6 +1,7 @@ package dispatcher import ( + "context" "crypto/tls" "encoding/json" "errors" @@ -13,8 +14,6 @@ import ( "testing" "time" - "golang.org/x/net/context" - "google.golang.org/grpc" "google.golang.org/grpc/codes" "google.golang.org/grpc/credentials" diff --git a/manager/health/health.go b/manager/health/health.go index ef6658b09d..d75cbf4b60 100644 --- a/manager/health/health.go +++ b/manager/health/health.go @@ -8,10 +8,10 @@ package health import ( + "context" "sync" "github.com/docker/swarmkit/api" - "golang.org/x/net/context" "google.golang.org/grpc/codes" "google.golang.org/grpc/status" ) diff --git a/manager/keymanager/keymanager.go b/manager/keymanager/keymanager.go index e61979cb36..7a5d7bf14d 100644 --- a/manager/keymanager/keymanager.go +++ b/manager/keymanager/keymanager.go @@ -6,6 +6,7 @@ package keymanager // which is used to exchange service discovery and overlay network control // plane information. It can also be used to encrypt overlay data traffic. import ( + "context" cryptorand "crypto/rand" "encoding/binary" "sync" @@ -15,7 +16,6 @@ import ( "github.com/docker/swarmkit/log" "github.com/docker/swarmkit/manager/state/store" "github.com/pkg/errors" - "golang.org/x/net/context" ) const ( diff --git a/manager/keymanager/keymanager_test.go b/manager/keymanager/keymanager_test.go index fc4e06f340..6b91cbf0bd 100644 --- a/manager/keymanager/keymanager_test.go +++ b/manager/keymanager/keymanager_test.go @@ -2,13 +2,13 @@ package keymanager import ( "bytes" + "context" "testing" "time" "github.com/docker/swarmkit/api" "github.com/docker/swarmkit/manager/state/store" "github.com/stretchr/testify/assert" - "golang.org/x/net/context" ) func createClusterSpec(name string) *api.ClusterSpec { diff --git a/manager/logbroker/broker.go b/manager/logbroker/broker.go index dfc898e070..c19438a27a 100644 --- a/manager/logbroker/broker.go +++ b/manager/logbroker/broker.go @@ -1,6 +1,7 @@ package logbroker import ( + "context" "errors" "fmt" "io" @@ -14,7 +15,6 @@ import ( "github.com/docker/swarmkit/manager/state/store" "github.com/docker/swarmkit/watch" "github.com/sirupsen/logrus" - "golang.org/x/net/context" "google.golang.org/grpc/codes" "google.golang.org/grpc/status" ) diff --git a/manager/logbroker/broker_test.go b/manager/logbroker/broker_test.go index c133f0097c..ec85921016 100644 --- a/manager/logbroker/broker_test.go +++ b/manager/logbroker/broker_test.go @@ -1,6 +1,7 @@ package logbroker import ( + "context" "fmt" "io" "net" @@ -8,7 +9,6 @@ import ( "testing" "time" - "golang.org/x/net/context" "google.golang.org/grpc" "github.com/docker/swarmkit/api" diff --git a/manager/logbroker/subscription.go b/manager/logbroker/subscription.go index b9c9c7b403..883ddce655 100644 --- a/manager/logbroker/subscription.go +++ b/manager/logbroker/subscription.go @@ -1,6 +1,7 @@ package logbroker import ( + "context" "fmt" "strings" "sync" @@ -11,7 +12,6 @@ import ( "github.com/docker/swarmkit/manager/state" "github.com/docker/swarmkit/manager/state/store" "github.com/docker/swarmkit/watch" - "golang.org/x/net/context" ) type subscription struct { diff --git a/manager/manager.go b/manager/manager.go index 2c6a0d3dcc..040f7f9ff8 100644 --- a/manager/manager.go +++ b/manager/manager.go @@ -1,6 +1,7 @@ package manager import ( + "context" "crypto/tls" "fmt" "net" @@ -44,7 +45,6 @@ import ( grpc_prometheus "github.com/grpc-ecosystem/go-grpc-prometheus" "github.com/pkg/errors" "github.com/sirupsen/logrus" - "golang.org/x/net/context" "google.golang.org/grpc" "google.golang.org/grpc/credentials" ) diff --git a/manager/manager_test.go b/manager/manager_test.go index f55b7f38a8..7aa3be104c 100644 --- a/manager/manager_test.go +++ b/manager/manager_test.go @@ -2,6 +2,7 @@ package manager import ( "bytes" + "context" "crypto/tls" "encoding/pem" "errors" @@ -12,8 +13,6 @@ import ( "testing" "time" - "golang.org/x/net/context" - "google.golang.org/grpc" "google.golang.org/grpc/credentials" diff --git a/manager/orchestrator/global/global.go b/manager/orchestrator/global/global.go index 2b20813ce2..f2cb7da9be 100644 --- a/manager/orchestrator/global/global.go +++ b/manager/orchestrator/global/global.go @@ -1,6 +1,8 @@ package global import ( + "context" + "github.com/docker/swarmkit/api" "github.com/docker/swarmkit/log" "github.com/docker/swarmkit/manager/constraint" @@ -9,7 +11,6 @@ import ( "github.com/docker/swarmkit/manager/orchestrator/taskinit" "github.com/docker/swarmkit/manager/orchestrator/update" "github.com/docker/swarmkit/manager/state/store" - "golang.org/x/net/context" ) type globalService struct { diff --git a/manager/orchestrator/global/global_test.go b/manager/orchestrator/global/global_test.go index 4a88f763c9..c7cede8d94 100644 --- a/manager/orchestrator/global/global_test.go +++ b/manager/orchestrator/global/global_test.go @@ -1,6 +1,7 @@ package global import ( + "context" "testing" "time" @@ -13,7 +14,6 @@ import ( gogotypes "github.com/gogo/protobuf/types" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" - "golang.org/x/net/context" ) var ( diff --git a/manager/orchestrator/replicated/drain_test.go b/manager/orchestrator/replicated/drain_test.go index 58a76c4a7f..690cc09aa8 100644 --- a/manager/orchestrator/replicated/drain_test.go +++ b/manager/orchestrator/replicated/drain_test.go @@ -1,6 +1,7 @@ package replicated import ( + "context" "testing" "github.com/docker/swarmkit/api" @@ -8,7 +9,6 @@ import ( "github.com/docker/swarmkit/manager/state" "github.com/docker/swarmkit/manager/state/store" "github.com/stretchr/testify/assert" - "golang.org/x/net/context" ) func TestDrain(t *testing.T) { diff --git a/manager/orchestrator/replicated/replicated.go b/manager/orchestrator/replicated/replicated.go index 18b8e24aba..dc45528682 100644 --- a/manager/orchestrator/replicated/replicated.go +++ b/manager/orchestrator/replicated/replicated.go @@ -1,12 +1,13 @@ package replicated import ( + "context" + "github.com/docker/swarmkit/api" "github.com/docker/swarmkit/manager/orchestrator/restart" "github.com/docker/swarmkit/manager/orchestrator/update" "github.com/docker/swarmkit/manager/state" "github.com/docker/swarmkit/manager/state/store" - "golang.org/x/net/context" ) // An Orchestrator runs a reconciliation loop to create and destroy diff --git a/manager/orchestrator/replicated/replicated_test.go b/manager/orchestrator/replicated/replicated_test.go index 3b1e9133fe..6484b0ba50 100644 --- a/manager/orchestrator/replicated/replicated_test.go +++ b/manager/orchestrator/replicated/replicated_test.go @@ -1,6 +1,7 @@ package replicated import ( + "context" "testing" "time" @@ -12,7 +13,6 @@ import ( gogotypes "github.com/gogo/protobuf/types" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" - "golang.org/x/net/context" ) func TestReplicatedOrchestrator(t *testing.T) { diff --git a/manager/orchestrator/replicated/restart_test.go b/manager/orchestrator/replicated/restart_test.go index b90268db94..2105b84a95 100644 --- a/manager/orchestrator/replicated/restart_test.go +++ b/manager/orchestrator/replicated/restart_test.go @@ -1,6 +1,7 @@ package replicated import ( + "context" "testing" "time" @@ -12,7 +13,6 @@ import ( gogotypes "github.com/gogo/protobuf/types" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" - "golang.org/x/net/context" ) func TestOrchestratorRestartOnAny(t *testing.T) { diff --git a/manager/orchestrator/replicated/services.go b/manager/orchestrator/replicated/services.go index 04aea8795a..b5e6bb12e8 100644 --- a/manager/orchestrator/replicated/services.go +++ b/manager/orchestrator/replicated/services.go @@ -1,6 +1,7 @@ package replicated import ( + "context" "sort" "github.com/docker/go-events" @@ -8,7 +9,6 @@ import ( "github.com/docker/swarmkit/log" "github.com/docker/swarmkit/manager/orchestrator" "github.com/docker/swarmkit/manager/state/store" - "golang.org/x/net/context" ) // This file provices service-level orchestration. It observes changes to diff --git a/manager/orchestrator/replicated/slot.go b/manager/orchestrator/replicated/slot.go index cee9fe10a0..1160d4c96c 100644 --- a/manager/orchestrator/replicated/slot.go +++ b/manager/orchestrator/replicated/slot.go @@ -1,10 +1,11 @@ package replicated import ( + "context" + "github.com/docker/swarmkit/api" "github.com/docker/swarmkit/manager/orchestrator" "github.com/docker/swarmkit/manager/state/store" - "golang.org/x/net/context" ) type slotsByRunningState []orchestrator.Slot diff --git a/manager/orchestrator/replicated/tasks.go b/manager/orchestrator/replicated/tasks.go index 66000e5d86..b6336aa88a 100644 --- a/manager/orchestrator/replicated/tasks.go +++ b/manager/orchestrator/replicated/tasks.go @@ -1,13 +1,14 @@ package replicated import ( + "context" + "github.com/docker/go-events" "github.com/docker/swarmkit/api" "github.com/docker/swarmkit/log" "github.com/docker/swarmkit/manager/orchestrator" "github.com/docker/swarmkit/manager/orchestrator/taskinit" "github.com/docker/swarmkit/manager/state/store" - "golang.org/x/net/context" ) // This file provides task-level orchestration. It observes changes to task diff --git a/manager/orchestrator/replicated/update_test.go b/manager/orchestrator/replicated/update_test.go index 1599256fe8..4b769f3147 100644 --- a/manager/orchestrator/replicated/update_test.go +++ b/manager/orchestrator/replicated/update_test.go @@ -1,6 +1,7 @@ package replicated import ( + "context" "sync/atomic" "testing" "time" @@ -12,7 +13,6 @@ import ( gogotypes "github.com/gogo/protobuf/types" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" - "golang.org/x/net/context" ) func TestUpdaterRollback(t *testing.T) { diff --git a/manager/orchestrator/restart/restart.go b/manager/orchestrator/restart/restart.go index 6af44b734c..c034183ba2 100644 --- a/manager/orchestrator/restart/restart.go +++ b/manager/orchestrator/restart/restart.go @@ -2,6 +2,7 @@ package restart import ( "container/list" + "context" "errors" "sync" "time" @@ -14,7 +15,6 @@ import ( "github.com/docker/swarmkit/manager/state" "github.com/docker/swarmkit/manager/state/store" gogotypes "github.com/gogo/protobuf/types" - "golang.org/x/net/context" ) const defaultOldTaskTimeout = time.Minute diff --git a/manager/orchestrator/service.go b/manager/orchestrator/service.go index 7356c38cd5..037e493b30 100644 --- a/manager/orchestrator/service.go +++ b/manager/orchestrator/service.go @@ -1,10 +1,11 @@ package orchestrator import ( + "context" + "github.com/docker/swarmkit/api" "github.com/docker/swarmkit/log" "github.com/docker/swarmkit/manager/state/store" - "golang.org/x/net/context" ) // IsReplicatedService checks if a service is a replicated service. diff --git a/manager/orchestrator/task_test.go b/manager/orchestrator/task_test.go index 6ac210b1c2..ec7f379f7a 100644 --- a/manager/orchestrator/task_test.go +++ b/manager/orchestrator/task_test.go @@ -1,12 +1,13 @@ package orchestrator import ( - google_protobuf "github.com/gogo/protobuf/types" - "github.com/stretchr/testify/assert" "sort" "strconv" "testing" + google_protobuf "github.com/gogo/protobuf/types" + "github.com/stretchr/testify/assert" + "github.com/docker/swarmkit/api" ) diff --git a/manager/orchestrator/taskinit/init.go b/manager/orchestrator/taskinit/init.go index b893428d51..85ad6d1e01 100644 --- a/manager/orchestrator/taskinit/init.go +++ b/manager/orchestrator/taskinit/init.go @@ -1,6 +1,7 @@ package taskinit import ( + "context" "sort" "time" @@ -11,7 +12,6 @@ import ( "github.com/docker/swarmkit/manager/orchestrator/restart" "github.com/docker/swarmkit/manager/state/store" gogotypes "github.com/gogo/protobuf/types" - "golang.org/x/net/context" ) // InitHandler defines orchestrator's action to fix tasks at start. diff --git a/manager/orchestrator/taskreaper/task_reaper.go b/manager/orchestrator/taskreaper/task_reaper.go index cbeb321de9..5d2d2c7490 100644 --- a/manager/orchestrator/taskreaper/task_reaper.go +++ b/manager/orchestrator/taskreaper/task_reaper.go @@ -1,6 +1,7 @@ package taskreaper import ( + "context" "sort" "sync" "time" @@ -10,7 +11,6 @@ import ( "github.com/docker/swarmkit/manager/orchestrator" "github.com/docker/swarmkit/manager/state" "github.com/docker/swarmkit/manager/state/store" - "golang.org/x/net/context" ) const ( diff --git a/manager/orchestrator/update/updater.go b/manager/orchestrator/update/updater.go index 5a7d61231c..7c977dba1c 100644 --- a/manager/orchestrator/update/updater.go +++ b/manager/orchestrator/update/updater.go @@ -1,14 +1,13 @@ package update import ( + "context" "errors" "fmt" "reflect" "sync" "time" - "golang.org/x/net/context" - "github.com/docker/go-events" "github.com/docker/swarmkit/api" "github.com/docker/swarmkit/api/defaults" diff --git a/manager/orchestrator/update/updater_test.go b/manager/orchestrator/update/updater_test.go index 1eca0f24eb..d54086d529 100644 --- a/manager/orchestrator/update/updater_test.go +++ b/manager/orchestrator/update/updater_test.go @@ -1,6 +1,7 @@ package update import ( + "context" "testing" "time" @@ -12,7 +13,6 @@ import ( gogotypes "github.com/gogo/protobuf/types" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" - "golang.org/x/net/context" ) func getRunnableSlotSlice(t *testing.T, s *store.MemoryStore, service *api.Service) []orchestrator.Slot { diff --git a/manager/raftselector/raftselector.go b/manager/raftselector/raftselector.go index 89e7918a3d..47adcf0fd9 100644 --- a/manager/raftselector/raftselector.go +++ b/manager/raftselector/raftselector.go @@ -1,10 +1,9 @@ package raftselector import ( + "context" "errors" - "golang.org/x/net/context" - "google.golang.org/grpc" ) diff --git a/manager/resourceapi/allocator.go b/manager/resourceapi/allocator.go index ec19fba850..545e4ded99 100644 --- a/manager/resourceapi/allocator.go +++ b/manager/resourceapi/allocator.go @@ -1,6 +1,7 @@ package resourceapi import ( + "context" "errors" "time" @@ -9,7 +10,6 @@ import ( "github.com/docker/swarmkit/identity" "github.com/docker/swarmkit/manager/state/store" "github.com/docker/swarmkit/protobuf/ptypes" - "golang.org/x/net/context" "google.golang.org/grpc/codes" "google.golang.org/grpc/status" ) diff --git a/manager/role_manager.go b/manager/role_manager.go index e5cf27b62f..a68bc3fc3b 100644 --- a/manager/role_manager.go +++ b/manager/role_manager.go @@ -1,6 +1,7 @@ package manager import ( + "context" "time" "github.com/docker/swarmkit/api" @@ -9,7 +10,6 @@ import ( "github.com/docker/swarmkit/manager/state/raft/membership" "github.com/docker/swarmkit/manager/state/store" "github.com/pivotal-golang/clock" - "golang.org/x/net/context" ) const ( diff --git a/manager/scheduler/nodeinfo.go b/manager/scheduler/nodeinfo.go index 78fa630ca3..3094402a58 100644 --- a/manager/scheduler/nodeinfo.go +++ b/manager/scheduler/nodeinfo.go @@ -1,12 +1,12 @@ package scheduler import ( + "context" "time" "github.com/docker/swarmkit/api" "github.com/docker/swarmkit/api/genericresource" "github.com/docker/swarmkit/log" - "golang.org/x/net/context" ) // hostPortSpec specifies a used host port. diff --git a/manager/scheduler/scheduler.go b/manager/scheduler/scheduler.go index 9e708ed1b6..939fc6f96d 100644 --- a/manager/scheduler/scheduler.go +++ b/manager/scheduler/scheduler.go @@ -1,6 +1,7 @@ package scheduler import ( + "context" "time" "github.com/docker/swarmkit/api" @@ -9,7 +10,6 @@ import ( "github.com/docker/swarmkit/manager/state" "github.com/docker/swarmkit/manager/state/store" "github.com/docker/swarmkit/protobuf/ptypes" - "golang.org/x/net/context" ) const ( diff --git a/manager/scheduler/scheduler_test.go b/manager/scheduler/scheduler_test.go index d387dc4a01..da59acd72d 100644 --- a/manager/scheduler/scheduler_test.go +++ b/manager/scheduler/scheduler_test.go @@ -1,6 +1,7 @@ package scheduler import ( + "context" "fmt" "runtime" "strconv" @@ -16,7 +17,6 @@ import ( "github.com/docker/swarmkit/manager/state/store" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" - "golang.org/x/net/context" ) func TestScheduler(t *testing.T) { diff --git a/manager/state/proposer.go b/manager/state/proposer.go index 4967f98a1e..8d53f5772f 100644 --- a/manager/state/proposer.go +++ b/manager/state/proposer.go @@ -1,8 +1,9 @@ package state import ( + "context" + "github.com/docker/swarmkit/api" - "golang.org/x/net/context" ) // A Change includes a version number and a set of store actions from a diff --git a/manager/state/raft/membership/cluster_test.go b/manager/state/raft/membership/cluster_test.go index fc37de3d50..1917066a98 100644 --- a/manager/state/raft/membership/cluster_test.go +++ b/manager/state/raft/membership/cluster_test.go @@ -1,6 +1,7 @@ package membership_test import ( + "context" "errors" "fmt" "io/ioutil" @@ -9,8 +10,6 @@ import ( "testing" "time" - "golang.org/x/net/context" - "google.golang.org/grpc/grpclog" "github.com/coreos/etcd/raft/raftpb" @@ -279,7 +278,8 @@ func TestCanRemoveMember(t *testing.T) { // Removing nodes at this point fails because we lost quorum for i := 1; i <= 3; i++ { - ctx, _ := context.WithTimeout(context.Background(), 10*time.Second) + ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second) + defer cancel() err := nodes[1].RemoveMember(ctx, uint64(i)) assert.Error(t, err) members := nodes[1].GetMemberlist() @@ -341,15 +341,17 @@ func TestCanRemoveMember(t *testing.T) { })) // Removing node 2 should fail (this would break the quorum) - ctx, _ := context.WithTimeout(context.Background(), 10*time.Second) + ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second) err := nodes[leader].RemoveMember(ctx, nodes[2].Config.ID) + cancel() assert.EqualError(t, err, raft.ErrCannotRemoveMember.Error()) members := nodes[leader].GetMemberlist() assert.Equal(t, len(members), 3) // Removing node 3 works fine because it is already unreachable - ctx, _ = context.WithTimeout(context.Background(), 10*time.Second) + ctx, cancel = context.WithTimeout(context.Background(), 10*time.Second) err = nodes[leader].RemoveMember(ctx, nodes[3].Config.ID) + cancel() assert.NoError(t, err) members = nodes[leader].GetMemberlist() assert.Nil(t, members[nodes[3].Config.ID]) @@ -380,16 +382,18 @@ func TestCanRemoveMember(t *testing.T) { })) // Removing node 3 should succeed - ctx, _ = context.WithTimeout(context.Background(), 10*time.Second) + ctx, cancel = context.WithTimeout(context.Background(), 10*time.Second) err = nodes[leader].RemoveMember(ctx, nodes[3].Config.ID) + cancel() assert.NoError(t, err) members = nodes[leader].GetMemberlist() assert.Nil(t, members[nodes[3].Config.ID]) assert.Equal(t, len(members), 2) // Removing node 2 should succeed - ctx, _ = context.WithTimeout(context.Background(), 10*time.Second) + ctx, cancel = context.WithTimeout(context.Background(), 10*time.Second) err = nodes[leader].RemoveMember(ctx, nodes[2].Config.ID) + cancel() assert.NoError(t, err) members = nodes[leader].GetMemberlist() assert.Nil(t, members[nodes[2].Config.ID]) diff --git a/manager/state/raft/raft.go b/manager/state/raft/raft.go index 9eec8d4dfb..14ae3c299d 100644 --- a/manager/state/raft/raft.go +++ b/manager/state/raft/raft.go @@ -1,6 +1,7 @@ package raft import ( + "context" "fmt" "io" "math" @@ -30,7 +31,6 @@ import ( "github.com/pivotal-golang/clock" "github.com/pkg/errors" "github.com/sirupsen/logrus" - "golang.org/x/net/context" "golang.org/x/time/rate" "google.golang.org/grpc" "google.golang.org/grpc/codes" diff --git a/manager/state/raft/raft_test.go b/manager/state/raft/raft_test.go index 3b3172e3dd..152d830e06 100644 --- a/manager/state/raft/raft_test.go +++ b/manager/state/raft/raft_test.go @@ -1,6 +1,7 @@ package raft_test import ( + "context" "errors" "fmt" "io/ioutil" @@ -18,8 +19,6 @@ import ( "google.golang.org/grpc/grpclog" "google.golang.org/grpc/status" - "golang.org/x/net/context" - "github.com/coreos/etcd/raft/raftpb" "github.com/coreos/etcd/wal" "github.com/docker/swarmkit/api" @@ -112,8 +111,9 @@ func TestRaftJoinTwice(t *testing.T) { assert.NoError(t, err) raftClient := api.NewRaftMembershipClient(cc) defer cc.Close() - ctx, _ := context.WithTimeout(context.Background(), 10*time.Second) + ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second) _, err = raftClient.Join(ctx, &api.JoinRequest{Addr: l.Addr().String()}) + cancel() assert.NoError(t, err) // Propose a value and wait for it to propagate @@ -369,8 +369,9 @@ func TestRaftFollowerLeave(t *testing.T) { assert.NoError(t, err) raftClient := api.NewRaftMembershipClient(cc) defer cc.Close() - ctx, _ := context.WithTimeout(context.Background(), 10*time.Second) + ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second) resp, err := raftClient.Leave(ctx, &api.LeaveRequest{Node: &api.RaftMember{RaftID: nodes[5].Config.ID}}) + cancel() assert.NoError(t, err, "error sending message to leave the raft") assert.NotNil(t, resp, "leave response message is nil") @@ -414,8 +415,8 @@ func TestRaftLeaderLeave(t *testing.T) { raftClient := api.NewRaftMembershipClient(cc) defer cc.Close() ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second) - defer cancel() resp, err := raftClient.Leave(ctx, &api.LeaveRequest{Node: &api.RaftMember{RaftID: nodes[1].Config.ID}}) + cancel() assert.NoError(t, err, "error sending message to leave the raft") assert.NotNil(t, resp, "leave response message is nil") diff --git a/manager/state/raft/storage.go b/manager/state/raft/storage.go index 547b775645..915cc3f241 100644 --- a/manager/state/raft/storage.go +++ b/manager/state/raft/storage.go @@ -1,6 +1,7 @@ package raft import ( + "context" "fmt" "github.com/coreos/etcd/raft" @@ -13,7 +14,6 @@ import ( "github.com/docker/swarmkit/manager/state/raft/storage" "github.com/docker/swarmkit/manager/state/store" "github.com/pkg/errors" - "golang.org/x/net/context" ) var ( diff --git a/manager/state/raft/storage/storage.go b/manager/state/raft/storage/storage.go index bbd262f37c..64d821894e 100644 --- a/manager/state/raft/storage/storage.go +++ b/manager/state/raft/storage/storage.go @@ -1,13 +1,12 @@ package storage import ( + "context" "fmt" "os" "path/filepath" "sync" - "golang.org/x/net/context" - "github.com/coreos/etcd/pkg/fileutil" "github.com/coreos/etcd/raft/raftpb" "github.com/coreos/etcd/snap" diff --git a/manager/state/raft/storage/storage_test.go b/manager/state/raft/storage/storage_test.go index f192eb48c2..2811f6e7d4 100644 --- a/manager/state/raft/storage/storage_test.go +++ b/manager/state/raft/storage/storage_test.go @@ -1,6 +1,7 @@ package storage import ( + "context" "io/ioutil" "os" "path/filepath" @@ -11,7 +12,6 @@ import ( "github.com/docker/swarmkit/manager/encryption" "github.com/pkg/errors" "github.com/stretchr/testify/require" - "golang.org/x/net/context" ) func TestBootstrapFromDisk(t *testing.T) { diff --git a/manager/state/raft/storage/walwrap.go b/manager/state/raft/storage/walwrap.go index 3c1208cdd0..d1155975bf 100644 --- a/manager/state/raft/storage/walwrap.go +++ b/manager/state/raft/storage/walwrap.go @@ -1,6 +1,7 @@ package storage import ( + "context" "io" "io/ioutil" "os" @@ -14,7 +15,6 @@ import ( "github.com/docker/swarmkit/log" "github.com/docker/swarmkit/manager/encryption" "github.com/pkg/errors" - "golang.org/x/net/context" ) // This package wraps the github.com/coreos/etcd/wal package, and encrypts diff --git a/manager/state/raft/storage/walwrap_test.go b/manager/state/raft/storage/walwrap_test.go index 18fa5b77ea..ffe4d39107 100644 --- a/manager/state/raft/storage/walwrap_test.go +++ b/manager/state/raft/storage/walwrap_test.go @@ -2,6 +2,7 @@ package storage import ( "bytes" + "context" "fmt" "io/ioutil" "os" @@ -13,7 +14,6 @@ import ( "github.com/docker/swarmkit/api" "github.com/docker/swarmkit/manager/encryption" "github.com/stretchr/testify/require" - "golang.org/x/net/context" ) var _ WALFactory = walCryptor{} diff --git a/manager/state/raft/storage_test.go b/manager/state/raft/storage_test.go index 2fcbcd18c1..9b49c6bd59 100644 --- a/manager/state/raft/storage_test.go +++ b/manager/state/raft/storage_test.go @@ -1,6 +1,7 @@ package raft_test import ( + "context" "fmt" "io/ioutil" "os" @@ -18,7 +19,6 @@ import ( "github.com/pivotal-golang/clock/fakeclock" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" - "golang.org/x/net/context" ) func TestRaftSnapshot(t *testing.T) { @@ -276,8 +276,9 @@ func TestRaftSnapshotForceNewCluster(t *testing.T) { assert.NoError(t, err) raftClient := api.NewRaftMembershipClient(cc) defer cc.Close() - ctx, _ := context.WithTimeout(context.Background(), 10*time.Second) + ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second) resp, err := raftClient.Leave(ctx, &api.LeaveRequest{Node: &api.RaftMember{RaftID: nodes[2].Config.ID}}) + cancel() assert.NoError(t, err, "error sending message to leave the raft") assert.NotNil(t, resp, "leave response message is nil") @@ -502,12 +503,13 @@ func proposeLargeValue(t *testing.T, raftNode *raftutils.TestNode, time time.Dur }, } - ctx, _ := context.WithTimeout(context.Background(), time) + ctx, cancel := context.WithTimeout(context.Background(), time) err := raftNode.ProposeValue(ctx, storeActions, func() { err := raftNode.MemoryStore().ApplyStoreActions(storeActions) assert.NoError(t, err, "error applying actions") }) + cancel() if err != nil { return nil, err } diff --git a/manager/state/raft/testutils/testutils.go b/manager/state/raft/testutils/testutils.go index dae38b9afa..d5ceeaeade 100644 --- a/manager/state/raft/testutils/testutils.go +++ b/manager/state/raft/testutils/testutils.go @@ -1,6 +1,7 @@ package testutils import ( + "context" "io/ioutil" "net" "os" @@ -9,8 +10,6 @@ import ( "testing" "time" - "golang.org/x/net/context" - "google.golang.org/grpc" etcdraft "github.com/coreos/etcd/raft" @@ -526,12 +525,13 @@ func ProposeValue(t *testing.T, raftNode *TestNode, time time.Duration, nodeID . }, } - ctx, _ := context.WithTimeout(context.Background(), time) + ctx, cancel := context.WithTimeout(context.Background(), time) err := raftNode.ProposeValue(ctx, storeActions, func() { err := raftNode.MemoryStore().ApplyStoreActions(storeActions) assert.NoError(t, err, "error applying actions") }) + cancel() if err != nil { return nil, err } diff --git a/manager/state/raft/transport/mock_raft_test.go b/manager/state/raft/transport/mock_raft_test.go index f6aa625acf..c8f4a9ebb0 100644 --- a/manager/state/raft/transport/mock_raft_test.go +++ b/manager/state/raft/transport/mock_raft_test.go @@ -1,6 +1,7 @@ package transport import ( + "context" "io" "net" "time" @@ -11,7 +12,6 @@ import ( "github.com/docker/swarmkit/log" "github.com/docker/swarmkit/manager/health" "github.com/docker/swarmkit/manager/state/raft/membership" - "golang.org/x/net/context" "google.golang.org/grpc" "google.golang.org/grpc/codes" "google.golang.org/grpc/status" diff --git a/manager/state/raft/transport/peer.go b/manager/state/raft/transport/peer.go index bdd3ec0293..aabfddf97e 100644 --- a/manager/state/raft/transport/peer.go +++ b/manager/state/raft/transport/peer.go @@ -1,12 +1,11 @@ package transport import ( + "context" "fmt" "sync" "time" - "golang.org/x/net/context" - "google.golang.org/grpc" "google.golang.org/grpc/codes" diff --git a/manager/state/raft/transport/peer_test.go b/manager/state/raft/transport/peer_test.go index 1b04e1b72a..21089eba98 100644 --- a/manager/state/raft/transport/peer_test.go +++ b/manager/state/raft/transport/peer_test.go @@ -1,11 +1,10 @@ package transport import ( + "context" "math" "testing" - "golang.org/x/net/context" - "github.com/coreos/etcd/raft/raftpb" "github.com/stretchr/testify/assert" ) diff --git a/manager/state/raft/transport/transport.go b/manager/state/raft/transport/transport.go index b741c4aa67..72cf073ba5 100644 --- a/manager/state/raft/transport/transport.go +++ b/manager/state/raft/transport/transport.go @@ -3,12 +3,11 @@ package transport import ( + "context" "net" "sync" "time" - "golang.org/x/net/context" - grpc_prometheus "github.com/grpc-ecosystem/go-grpc-prometheus" "google.golang.org/grpc" "google.golang.org/grpc/credentials" diff --git a/manager/state/raft/transport/transport_test.go b/manager/state/raft/transport/transport_test.go index c203e7447b..b631958ea5 100644 --- a/manager/state/raft/transport/transport_test.go +++ b/manager/state/raft/transport/transport_test.go @@ -1,11 +1,10 @@ package transport import ( + "context" "testing" "time" - "golang.org/x/net/context" - "github.com/coreos/etcd/raft" "github.com/coreos/etcd/raft/raftpb" "github.com/stretchr/testify/assert" diff --git a/manager/state/raft/util.go b/manager/state/raft/util.go index da44dca6a5..75872fe77c 100644 --- a/manager/state/raft/util.go +++ b/manager/state/raft/util.go @@ -1,10 +1,9 @@ package raft import ( + "context" "time" - "golang.org/x/net/context" - "github.com/docker/swarmkit/api" "github.com/docker/swarmkit/manager/state" "github.com/docker/swarmkit/manager/state/store" diff --git a/manager/state/store/memory.go b/manager/state/store/memory.go index e64565fae8..c02214d96d 100644 --- a/manager/state/store/memory.go +++ b/manager/state/store/memory.go @@ -1,6 +1,7 @@ package store import ( + "context" "errors" "fmt" "runtime" @@ -18,7 +19,6 @@ import ( "github.com/docker/swarmkit/watch" gogotypes "github.com/gogo/protobuf/types" memdb "github.com/hashicorp/go-memdb" - "golang.org/x/net/context" ) const ( diff --git a/manager/state/testutils/mock_proposer.go b/manager/state/testutils/mock_proposer.go index caf8ebaf55..38b0662b3e 100644 --- a/manager/state/testutils/mock_proposer.go +++ b/manager/state/testutils/mock_proposer.go @@ -1,11 +1,11 @@ package testutils import ( + "context" "errors" "github.com/docker/swarmkit/api" "github.com/docker/swarmkit/manager/state" - "golang.org/x/net/context" ) // MockProposer is a simple proposer implementation for use in tests. diff --git a/manager/watchapi/server.go b/manager/watchapi/server.go index 6d49dca715..eb086b8ac0 100644 --- a/manager/watchapi/server.go +++ b/manager/watchapi/server.go @@ -1,11 +1,11 @@ package watchapi import ( + "context" "errors" "sync" "github.com/docker/swarmkit/manager/state/store" - "golang.org/x/net/context" ) var ( diff --git a/manager/watchapi/server_test.go b/manager/watchapi/server_test.go index 2e223ba91a..afc8b39780 100644 --- a/manager/watchapi/server_test.go +++ b/manager/watchapi/server_test.go @@ -1,6 +1,7 @@ package watchapi import ( + "context" "io/ioutil" "log" "net" @@ -15,7 +16,6 @@ import ( "github.com/sirupsen/logrus" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" - "golang.org/x/net/context" "google.golang.org/grpc" "google.golang.org/grpc/grpclog" ) diff --git a/manager/watchapi/watch_test.go b/manager/watchapi/watch_test.go index 3d908c1766..41aa7a0e97 100644 --- a/manager/watchapi/watch_test.go +++ b/manager/watchapi/watch_test.go @@ -1,13 +1,13 @@ package watchapi import ( + "context" "testing" "github.com/docker/swarmkit/api" "github.com/docker/swarmkit/manager/state/store" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" - "golang.org/x/net/context" ) func TestWatch(t *testing.T) { diff --git a/node/node.go b/node/node.go index 9845192c47..58f34e2619 100644 --- a/node/node.go +++ b/node/node.go @@ -2,6 +2,7 @@ package node import ( "bytes" + "context" "crypto/tls" "encoding/json" "io/ioutil" @@ -34,7 +35,6 @@ import ( grpc_prometheus "github.com/grpc-ecosystem/go-grpc-prometheus" "github.com/pkg/errors" "github.com/sirupsen/logrus" - "golang.org/x/net/context" "google.golang.org/grpc" "google.golang.org/grpc/codes" "google.golang.org/grpc/credentials" diff --git a/node/node_test.go b/node/node_test.go index ebd44b03e8..6f6bd25c67 100644 --- a/node/node_test.go +++ b/node/node_test.go @@ -2,6 +2,7 @@ package node import ( "bytes" + "context" "crypto/x509" "encoding/pem" "fmt" @@ -25,7 +26,6 @@ import ( "github.com/docker/swarmkit/testutils" "github.com/pkg/errors" "github.com/stretchr/testify/require" - "golang.org/x/net/context" ) func getLoggingContext(t *testing.T) context.Context { diff --git a/protobuf/plugin/raftproxy/test/raftproxy_test.go b/protobuf/plugin/raftproxy/test/raftproxy_test.go index 3dd8990661..00fe9f3a06 100644 --- a/protobuf/plugin/raftproxy/test/raftproxy_test.go +++ b/protobuf/plugin/raftproxy/test/raftproxy_test.go @@ -1,6 +1,7 @@ package test import ( + "context" "net" "testing" "time" @@ -8,8 +9,6 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" - "golang.org/x/net/context" - "google.golang.org/grpc" "google.golang.org/grpc/codes" ) From dac1440453973bdf24cdc7b9c1fc639ec6022d71 Mon Sep 17 00:00:00 2001 From: Kir Kolyshkin Date: Tue, 18 Sep 2018 09:50:22 -0700 Subject: [PATCH 4/7] gometalinter: add deadcode linter ...and fix the following initial bunch of warnings: agent/session.go:18:1:warning: errSessionDisconnect is unused (deadcode) agent/errors.go:7:1:warning: errTaskNoController is unused (deadcode) agent/errors.go:7:1:warning: errTaskStatusUpdateNoChange is unused (deadcode) agent/errors.go:7:1:warning: errTaskNotAssigned is unused (deadcode) agent/errors.go:7:1:warning: errTaskInvalid is unused (deadcode) ca/transport.go:21:1:warning: timeoutError is unused (deadcode) ca/config.go:29:1:warning: nodeCSRFilename is unused (deadcode) cmd/swarmctl/node/common.go:58:1:warning: changeNodeMembership is unused (deadcode) integration/cluster.go:44:1:warning: newTestCluster is unused (deadcode) manager/orchestrator/global/global.go:590:1:warning: isTaskCompleted is unused (deadcode) Signed-off-by: Kir Kolyshkin (cherry picked from commit 04ae7e3c35c50f0d28c27b79ccbb45db2c28f780) Signed-off-by: Sebastiaan van Stijn --- .gometalinter.json | 3 ++- agent/errors.go | 7 +---- agent/session.go | 1 - ca/config.go | 1 - ca/transport.go | 6 ----- cmd/swarmctl/node/common.go | 38 --------------------------- integration/cluster.go | 17 ------------ integration/integration_test.go | 17 ++++++++++++ manager/orchestrator/global/global.go | 8 ------ 9 files changed, 20 insertions(+), 78 deletions(-) diff --git a/.gometalinter.json b/.gometalinter.json index 28f126de0f..efc9579617 100644 --- a/.gometalinter.json +++ b/.gometalinter.json @@ -8,7 +8,8 @@ "misspell", "gofmt", "golint", - "ineffassign" + "ineffassign", + "deadcode" ], "Deadline": "2m" } diff --git a/agent/errors.go b/agent/errors.go index 29f8ff1c9f..f5514d8311 100644 --- a/agent/errors.go +++ b/agent/errors.go @@ -13,10 +13,5 @@ var ( errAgentStarted = errors.New("agent: already started") errAgentNotStarted = errors.New("agent: not started") - errTaskNoController = errors.New("agent: no task controller") - errTaskNotAssigned = errors.New("agent: task not assigned") - errTaskStatusUpdateNoChange = errors.New("agent: no change in task status") - errTaskUnknown = errors.New("agent: task unknown") - - errTaskInvalid = errors.New("task: invalid") + errTaskUnknown = errors.New("agent: task unknown") ) diff --git a/agent/session.go b/agent/session.go index 1e374f86c2..66e5a8cf0b 100644 --- a/agent/session.go +++ b/agent/session.go @@ -16,7 +16,6 @@ import ( var ( dispatcherRPCTimeout = 5 * time.Second - errSessionDisconnect = errors.New("agent: session disconnect") // instructed to disconnect errSessionClosed = errors.New("agent: session closed") ) diff --git a/ca/config.go b/ca/config.go index f31527c750..90e7ea7341 100644 --- a/ca/config.go +++ b/ca/config.go @@ -31,7 +31,6 @@ const ( rootCAKeyFilename = "swarm-root-ca.key" nodeTLSCertFilename = "swarm-node.crt" nodeTLSKeyFilename = "swarm-node.key" - nodeCSRFilename = "swarm-node.csr" // DefaultRootCN represents the root CN that we should create roots CAs with by default DefaultRootCN = "swarm-ca" diff --git a/ca/transport.go b/ca/transport.go index b505c66818..c4ae764a8d 100644 --- a/ca/transport.go +++ b/ca/transport.go @@ -18,12 +18,6 @@ var ( alpnProtoStr = []string{"h2"} ) -type timeoutError struct{} - -func (timeoutError) Error() string { return "mutablecredentials: Dial timed out" } -func (timeoutError) Timeout() bool { return true } -func (timeoutError) Temporary() bool { return true } - // MutableTLSCreds is the credentials required for authenticating a connection using TLS. type MutableTLSCreds struct { // Mutex for the tls config diff --git a/cmd/swarmctl/node/common.go b/cmd/swarmctl/node/common.go index 537a4f4292..5d399cd1d9 100644 --- a/cmd/swarmctl/node/common.go +++ b/cmd/swarmctl/node/common.go @@ -55,44 +55,6 @@ func changeNodeAvailability(cmd *cobra.Command, args []string, availability api. return nil } -func changeNodeMembership(cmd *cobra.Command, args []string, membership api.NodeSpec_Membership) error { - if len(args) == 0 { - return errors.New("missing node ID") - } - - if len(args) > 1 { - return errors.New("command takes exactly 1 argument") - } - - c, err := common.Dial(cmd) - if err != nil { - return err - } - node, err := getNode(common.Context(cmd), c, args[0]) - if err != nil { - return err - } - spec := &node.Spec - - if spec.Membership == membership { - return errNoChange - } - - spec.Membership = membership - - _, err = c.UpdateNode(common.Context(cmd), &api.UpdateNodeRequest{ - NodeID: node.ID, - NodeVersion: &node.Meta.Version, - Spec: spec, - }) - - if err != nil { - return err - } - - return nil -} - func changeNodeRole(cmd *cobra.Command, args []string, role api.NodeRole) error { if len(args) == 0 { return errors.New("missing node ID") diff --git a/integration/cluster.go b/integration/cluster.go index 182cf31770..1c605f7214 100644 --- a/integration/cluster.go +++ b/integration/cluster.go @@ -39,23 +39,6 @@ type testCluster struct { var testnameKey struct{} -// NewCluster creates new cluster to which nodes can be added. -// AcceptancePolicy is set to most permissive mode on first manager node added. -func newTestCluster(testname string, fips bool) *testCluster { - ctx, cancel := context.WithCancel(context.Background()) - ctx = context.WithValue(ctx, testnameKey, testname) - c := &testCluster{ - ctx: ctx, - cancel: cancel, - nodes: make(map[string]*testNode), - nodesOrder: make(map[string]int), - errs: make(chan error, 1024), - fips: fips, - } - c.api = &dummyAPI{c: c} - return c -} - // Stop makes best effort to stop all nodes and close connections to them. func (c *testCluster) Stop() error { c.cancel() diff --git a/integration/integration_test.go b/integration/integration_test.go index 247b1a64f3..4c3011575c 100644 --- a/integration/integration_test.go +++ b/integration/integration_test.go @@ -62,6 +62,23 @@ func TestMain(m *testing.M) { os.Exit(res) } +// newTestCluster creates new cluster to which nodes can be added. +// AcceptancePolicy is set to most permissive mode on first manager node added. +func newTestCluster(testname string, fips bool) *testCluster { + ctx, cancel := context.WithCancel(context.Background()) + ctx = context.WithValue(ctx, testnameKey, testname) + c := &testCluster{ + ctx: ctx, + cancel: cancel, + nodes: make(map[string]*testNode), + nodesOrder: make(map[string]int), + errs: make(chan error, 1024), + fips: fips, + } + c.api = &dummyAPI{c: c} + return c +} + // pollClusterReady calls control api until all conditions are true: // * all nodes are ready // * all managers has membership == accepted diff --git a/manager/orchestrator/global/global.go b/manager/orchestrator/global/global.go index f2cb7da9be..715781e817 100644 --- a/manager/orchestrator/global/global.go +++ b/manager/orchestrator/global/global.go @@ -586,11 +586,3 @@ func (g *Orchestrator) SlotTuple(t *api.Task) orchestrator.SlotTuple { NodeID: t.NodeID, } } - -func isTaskCompleted(t *api.Task, restartPolicy api.RestartPolicy_RestartCondition) bool { - if t == nil || t.DesiredState <= api.TaskStateRunning { - return false - } - return restartPolicy == api.RestartOnNone || - (restartPolicy == api.RestartOnFailure && t.Status.State == api.TaskStateCompleted) -} From f8340c803aafa58a30f11bfb79e96372ed9a0044 Mon Sep 17 00:00:00 2001 From: Kir Kolyshkin Date: Tue, 18 Sep 2018 10:15:17 -0700 Subject: [PATCH 5/7] gometalinter: add deadcode, goimports, unconvert ... and fix some warnings from unconvert: ca/config.go:627:58:warning: unnecessary conversion (unconvert) manager/allocator/cnmallocator/portallocator.go:410:38:warning: unnecessary conversion (unconvert) manager/allocator/cnmallocator/portallocator.go:415:50:warning: unnecessary conversion (unconvert) manager/controlapi/service.go:200:47:warning: unnecessary conversion (unconvert) manager/controlapi/service.go:210:45:warning: unnecessary conversion (unconvert) manager/controlapi/service.go:220:35:warning: unnecessary conversion (unconvert) manager/dispatcher/nodes.go:159:33:warning: unnecessary conversion (unconvert) manager/state/store/memory.go:692:91:warning: unnecessary conversion (unconvert) Signed-off-by: Kir Kolyshkin (cherry picked from commit 278edc28b8c4330496c01f39b72c32a054af766d) Signed-off-by: Sebastiaan van Stijn --- .gometalinter.json | 4 +++- ca/config.go | 2 +- manager/allocator/cnmallocator/portallocator.go | 4 ++-- manager/controlapi/service.go | 6 +++--- manager/dispatcher/nodes.go | 2 +- manager/state/store/memory.go | 2 +- 6 files changed, 11 insertions(+), 9 deletions(-) diff --git a/.gometalinter.json b/.gometalinter.json index efc9579617..6710a180dc 100644 --- a/.gometalinter.json +++ b/.gometalinter.json @@ -7,9 +7,11 @@ "vet", "misspell", "gofmt", + "goimports", "golint", "ineffassign", - "deadcode" + "deadcode", + "unconvert" ], "Deadline": "2m" } diff --git a/ca/config.go b/ca/config.go index 90e7ea7341..356c2910b9 100644 --- a/ca/config.go +++ b/ca/config.go @@ -624,7 +624,7 @@ func calculateRandomExpiry(validFrom, validUntil time.Time) time.Duration { if maxValidity-minValidity < 1 { randomExpiry = minValidity } else { - randomExpiry = rand.Intn(maxValidity-minValidity) + int(minValidity) + randomExpiry = rand.Intn(maxValidity-minValidity) + minValidity } expiry := validFrom.Add(time.Duration(randomExpiry) * time.Minute).Sub(time.Now()) diff --git a/manager/allocator/cnmallocator/portallocator.go b/manager/allocator/cnmallocator/portallocator.go index 113f900242..81447cbdb4 100644 --- a/manager/allocator/cnmallocator/portallocator.go +++ b/manager/allocator/cnmallocator/portallocator.go @@ -407,12 +407,12 @@ func (ps *portSpace) allocate(p *api.PortConfig) (err error) { } defer func() { if err != nil { - ps.dynamicPortSpace.Release(uint64(swarmPort)) + ps.dynamicPortSpace.Release(swarmPort) } }() // Make sure we allocate the same port from the master space. - if err = ps.masterPortSpace.GetSpecificID(uint64(swarmPort)); err != nil { + if err = ps.masterPortSpace.GetSpecificID(swarmPort); err != nil { return } diff --git a/manager/controlapi/service.go b/manager/controlapi/service.go index 3e6c789444..17bc2500e2 100644 --- a/manager/controlapi/service.go +++ b/manager/controlapi/service.go @@ -197,7 +197,7 @@ func validateHealthCheck(hc *api.HealthConfig) error { if err != nil { return err } - if interval != 0 && interval < time.Duration(minimumDuration) { + if interval != 0 && interval < minimumDuration { return status.Errorf(codes.InvalidArgument, "ContainerSpec: Interval in HealthConfig cannot be less than %s", minimumDuration) } } @@ -207,7 +207,7 @@ func validateHealthCheck(hc *api.HealthConfig) error { if err != nil { return err } - if timeout != 0 && timeout < time.Duration(minimumDuration) { + if timeout != 0 && timeout < minimumDuration { return status.Errorf(codes.InvalidArgument, "ContainerSpec: Timeout in HealthConfig cannot be less than %s", minimumDuration) } } @@ -217,7 +217,7 @@ func validateHealthCheck(hc *api.HealthConfig) error { if err != nil { return err } - if sp != 0 && sp < time.Duration(minimumDuration) { + if sp != 0 && sp < minimumDuration { return status.Errorf(codes.InvalidArgument, "ContainerSpec: StartPeriod in HealthConfig cannot be less than %s", minimumDuration) } } diff --git a/manager/dispatcher/nodes.go b/manager/dispatcher/nodes.go index cf35bb869a..fae6dc5f82 100644 --- a/manager/dispatcher/nodes.go +++ b/manager/dispatcher/nodes.go @@ -156,7 +156,7 @@ func (s *nodeStore) Heartbeat(id, sid string) (time.Duration, error) { return 0, err } period := s.periodChooser.Choose() // base period for node - grace := period * time.Duration(s.gracePeriodMultiplierNormal) + grace := period * s.gracePeriodMultiplierNormal rn.mu.Lock() rn.Heartbeat.Update(grace) rn.Heartbeat.Beat() diff --git a/manager/state/store/memory.go b/manager/state/store/memory.go index c02214d96d..a1d84021f7 100644 --- a/manager/state/store/memory.go +++ b/manager/state/store/memory.go @@ -689,7 +689,7 @@ func (tx readTx) findIterators(table string, by By, checkType func(By) error) ([ } return []memdb.ResultIterator{it}, nil case bySlot: - it, err := tx.memDBTx.Get(table, indexSlot, v.serviceID+"\x00"+strconv.FormatUint(uint64(v.slot), 10)) + it, err := tx.memDBTx.Get(table, indexSlot, v.serviceID+"\x00"+strconv.FormatUint(v.slot, 10)) if err != nil { return nil, err } From 51a6be3e539c029feeaeedb9643f868357c6b4ce Mon Sep 17 00:00:00 2001 From: Kir Kolyshkin Date: Tue, 18 Sep 2018 10:45:05 -0700 Subject: [PATCH 6/7] gometalinter: add gosimple ... and fix warnings reported by it: agent/exec/dockerapi/adapter.go:147:2:warning: 'if err != nil { return err }; return nil' can be simplified to 'return err' (S1013) (gosimple) agent/testutils/fakes.go:143:2:warning: should use a simple channel send/receive instead of select with a single case (S1000) (gosimple) agent/testutils/fakes.go:151:2:warning: should use a simple channel send/receive instead of select with a single case (S1000) (gosimple) ca/certificates_test.go:708:2:warning: should use for range instead of for { select {} } (S1000) (gosimple) ca/config.go:630:12:warning: should use time.Until instead of t.Sub(time.Now()) (S1024) (gosimple) ca/config_test.go:790:3:warning: should use a simple channel send/receive instead of select with a single case (S1000) (gosimple) ca/external_test.go:116:3:warning: should use a simple channel send/receive instead of select with a single case (S1000) (gosimple) cmd/swarm-bench/collector.go:26:2:warning: 'if err != nil { return err }; return nil' can be simplified to 'return err' (S1013) (gosimple) cmd/swarmctl/node/common.go:51:2:warning: 'if err != nil { return err }; return nil' can be simplified to 'return err' (S1013) (gosimple) cmd/swarmctl/node/common.go:89:2:warning: 'if err != nil { return err }; return nil' can be simplified to 'return err' (S1013) (gosimple) cmd/swarmctl/node/common.go:172:2:warning: 'if err != nil { return err }; return nil' can be simplified to 'return err' (S1013) (gosimple) ioutils/ioutils_test.go:28:5:warning: should use !bytes.Equal(actual, expected) instead (S1004) (gosimple) manager/allocator/cnmallocator/networkallocator.go:818:3:warning: should merge variable declaration with assignment on next line (S1021) (gosimple) manager/constraint/constraint.go:59:7:warning: should omit comparison to bool constant, can be simplified to !matched (S1002) (gosimple) manager/constraint/constraint.go:67:7:warning: should omit comparison to bool constant, can be simplified to !matched (S1002) (gosimple) manager/dispatcher/dispatcher.go:1095:5:warning: 'if err != nil { return err }; return nil' can be simplified to 'return err' (S1013) (gosimple) manager/dispatcher/dispatcher.go:1095:5:warning: 'if err != nil { return err }; return nil' can be simplified to 'return err' (S1013) (gosimple) manager/dispatcher/dispatcher.go:1095:5:warning: 'if err != nil { return err }; return nil' can be simplified to 'return err' (S1013) (gosimple) manager/dispatcher/dispatcher_test.go:2090:2:warning: redundant return statement (S1023) (gosimple) manager/manager.go:1005:4:warning: should replace loop with m.config.NetworkConfig.DefaultAddrPool = append(m.config.NetworkConfig.DefaultAddrPool, cluster.DefaultAddressPool...) (S1011) (gosimple) manager/metrics/collector.go:191:2:warning: redundant return statement (S1023) (gosimple) manager/metrics/collector.go:222:2:warning: redundant return statement (S1023) (gosimple) manager/orchestrator/replicated/update_test.go:53:3:warning: should use for range instead of for { select {} } (S1000) (gosimple) manager/orchestrator/taskinit/init.go:83:32:warning: should use time.Until instead of t.Sub(time.Now()) (S1024) (gosimple) manager/state/raft/raft.go:1185:2:warning: should use 'return ' instead of 'if { return }; return ' (S1008) (gosimple) manager/state/raft/raft.go:1594:2:warning: 'if err != nil { return err }; return nil' can be simplified to 'return err' (S1013) (gosimple) node/node.go:1209:2:warning: redundant return statement (S1023) (gosimple) node/node.go:1219:2:warning: redundant return statement (S1023) (gosimple) watch/sinks_test.go:42:2:warning: should merge variable declaration with assignment on next line (S1021) (gosimple) Signed-off-by: Kir Kolyshkin (cherry picked from commit 0e8bb705bab9c06e98dc1f23e8a5be123b002a8b) Signed-off-by: Sebastiaan van Stijn --- .gometalinter.json | 1 + agent/exec/dockerapi/adapter.go | 8 +-- agent/testutils/fakes.go | 8 +-- ca/certificates_test.go | 10 ++-- ca/config.go | 2 +- ca/config_test.go | 34 +++++------ ca/external_test.go | 4 +- cmd/swarm-bench/collector.go | 5 +- cmd/swarmctl/node/common.go | 18 +----- ioutils/ioutils_test.go | 2 +- .../cnmallocator/networkallocator.go | 3 +- manager/constraint/constraint.go | 4 +- manager/dispatcher/dispatcher.go | 12 ++-- manager/dispatcher/dispatcher_test.go | 1 - manager/metrics/collector.go | 3 - .../orchestrator/replicated/update_test.go | 60 +++++++++---------- manager/orchestrator/taskinit/init.go | 2 +- manager/state/raft/raft.go | 10 +--- node/node.go | 5 +- watch/sinks_test.go | 3 +- 20 files changed, 74 insertions(+), 121 deletions(-) diff --git a/.gometalinter.json b/.gometalinter.json index 6710a180dc..c20515ad37 100644 --- a/.gometalinter.json +++ b/.gometalinter.json @@ -9,6 +9,7 @@ "gofmt", "goimports", "golint", + "gosimple", "ineffassign", "deadcode", "unconvert" diff --git a/agent/exec/dockerapi/adapter.go b/agent/exec/dockerapi/adapter.go index c30b749f31..fd3cab4b31 100644 --- a/agent/exec/dockerapi/adapter.go +++ b/agent/exec/dockerapi/adapter.go @@ -144,15 +144,13 @@ func (c *containerAdapter) removeNetworks(ctx context.Context) error { } func (c *containerAdapter) create(ctx context.Context) error { - if _, err := c.client.ContainerCreate(ctx, + _, err := c.client.ContainerCreate(ctx, c.container.config(), c.container.hostConfig(), c.container.networkingConfig(), - c.container.name()); err != nil { - return err - } + c.container.name()) - return nil + return err } func (c *containerAdapter) start(ctx context.Context) error { diff --git a/agent/testutils/fakes.go b/agent/testutils/fakes.go index 03d6f30dd0..150d06935f 100644 --- a/agent/testutils/fakes.go +++ b/agent/testutils/fakes.go @@ -140,17 +140,13 @@ func (m *MockDispatcher) UpdateTaskStatus(context.Context, *api.UpdateTaskStatus // Tasks keeps an open stream until canceled func (m *MockDispatcher) Tasks(_ *api.TasksRequest, stream api.Dispatcher_TasksServer) error { - select { - case <-stream.Context().Done(): - } + <-stream.Context().Done() return nil } // Assignments keeps an open stream until canceled func (m *MockDispatcher) Assignments(_ *api.AssignmentsRequest, stream api.Dispatcher_AssignmentsServer) error { - select { - case <-stream.Context().Done(): - } + <-stream.Context().Done() return nil } diff --git a/ca/certificates_test.go b/ca/certificates_test.go index 82bffc06f5..6a6670bbd6 100644 --- a/ca/certificates_test.go +++ b/ca/certificates_test.go @@ -705,12 +705,10 @@ func TestGetRemoteSignedCertificateWithPending(t *testing.T) { var node *api.Node // wait for a new node to show up for node == nil { - select { - case event := <-updates: // we want to skip the first node, which is the test CA - n := event.(api.EventCreateNode).Node.Copy() - if n.Certificate.Status.State == api.IssuanceStatePending { - node = n - } + event := <-updates // we want to skip the first node, which is the test CA + n := event.(api.EventCreateNode).Node.Copy() + if n.Certificate.Status.State == api.IssuanceStatePending { + node = n } } diff --git a/ca/config.go b/ca/config.go index 356c2910b9..4befee5bcc 100644 --- a/ca/config.go +++ b/ca/config.go @@ -627,7 +627,7 @@ func calculateRandomExpiry(validFrom, validUntil time.Time) time.Duration { randomExpiry = rand.Intn(maxValidity-minValidity) + minValidity } - expiry := validFrom.Add(time.Duration(randomExpiry) * time.Minute).Sub(time.Now()) + expiry := time.Until(validFrom.Add(time.Duration(randomExpiry) * time.Minute)) if expiry < 0 { return 0 } diff --git a/ca/config_test.go b/ca/config_test.go index e5a0e80388..ad7528775e 100644 --- a/ca/config_test.go +++ b/ca/config_test.go @@ -742,24 +742,22 @@ func TestRenewTLSConfigUpdatesRootNonUnknownAuthError(t *testing.T) { go func() { updates, cancel := state.Watch(tc.MemoryStore.WatchQueue(), api.EventCreateNode{}) defer cancel() - select { - case event := <-updates: // we want to skip the first node, which is the test CA - n := event.(api.EventCreateNode).Node - if n.Certificate.Status.State == api.IssuanceStatePending { - signErr <- tc.MemoryStore.Update(func(tx store.Tx) error { - node := store.GetNode(tx, n.ID) - certChain, err := rootCA.ParseValidateAndSignCSR(node.Certificate.CSR, node.Certificate.CN, ca.WorkerRole, tc.Organization) - if err != nil { - return err - } - node.Certificate.Certificate = cautils.ReDateCert(t, certChain, cert, key, time.Now().Add(-5*time.Hour), time.Now().Add(-4*time.Hour)) - node.Certificate.Status = api.IssuanceStatus{ - State: api.IssuanceStateIssued, - } - return store.UpdateNode(tx, node) - }) - return - } + event := <-updates // we want to skip the first node, which is the test CA + n := event.(api.EventCreateNode).Node + if n.Certificate.Status.State == api.IssuanceStatePending { + signErr <- tc.MemoryStore.Update(func(tx store.Tx) error { + node := store.GetNode(tx, n.ID) + certChain, err := rootCA.ParseValidateAndSignCSR(node.Certificate.CSR, node.Certificate.CN, ca.WorkerRole, tc.Organization) + if err != nil { + return err + } + node.Certificate.Certificate = cautils.ReDateCert(t, certChain, cert, key, time.Now().Add(-5*time.Hour), time.Now().Add(-4*time.Hour)) + node.Certificate.Status = api.IssuanceStatus{ + State: api.IssuanceStateIssued, + } + return store.UpdateNode(tx, node) + }) + return } }() diff --git a/ca/external_test.go b/ca/external_test.go index 7018ba1f95..17272dfbd5 100644 --- a/ca/external_test.go +++ b/ca/external_test.go @@ -113,9 +113,7 @@ func TestExternalCASignRequestTimesOut(t *testing.T) { mux := http.NewServeMux() mux.HandleFunc("/", func(http.ResponseWriter, *http.Request) { // hang forever - select { - case <-allDone: - } + <-allDone }) server := httptest.NewServer(mux) diff --git a/cmd/swarm-bench/collector.go b/cmd/swarm-bench/collector.go index a93c1f077e..7c886bbec9 100644 --- a/cmd/swarm-bench/collector.go +++ b/cmd/swarm-bench/collector.go @@ -23,10 +23,7 @@ type Collector struct { func (c *Collector) Listen(port int) error { var err error c.ln, err = net.Listen("tcp", ":"+strconv.Itoa(port)) - if err != nil { - return err - } - return nil + return err } // Collect blocks until `count` tasks phoned home. diff --git a/cmd/swarmctl/node/common.go b/cmd/swarmctl/node/common.go index 5d399cd1d9..c70384817a 100644 --- a/cmd/swarmctl/node/common.go +++ b/cmd/swarmctl/node/common.go @@ -48,11 +48,7 @@ func changeNodeAvailability(cmd *cobra.Command, args []string, availability api. Spec: spec, }) - if err != nil { - return err - } - - return nil + return err } func changeNodeRole(cmd *cobra.Command, args []string, role api.NodeRole) error { @@ -86,11 +82,7 @@ func changeNodeRole(cmd *cobra.Command, args []string, role api.NodeRole) error Spec: spec, }) - if err != nil { - return err - } - - return nil + return err } func getNode(ctx context.Context, c api.ControlClient, input string) (*api.Node, error) { @@ -169,9 +161,5 @@ func updateNode(cmd *cobra.Command, args []string) error { Spec: spec, }) - if err != nil { - return err - } - - return nil + return err } diff --git a/ioutils/ioutils_test.go b/ioutils/ioutils_test.go index 40717a5108..56a69c4ec6 100644 --- a/ioutils/ioutils_test.go +++ b/ioutils/ioutils_test.go @@ -25,7 +25,7 @@ func TestAtomicWriteToFile(t *testing.T) { t.Fatalf("Error reading from file: %v", err) } - if bytes.Compare(actual, expected) != 0 { + if !bytes.Equal(actual, expected) { t.Fatalf("Data mismatch, expected %q, got %q", expected, actual) } } diff --git a/manager/allocator/cnmallocator/networkallocator.go b/manager/allocator/cnmallocator/networkallocator.go index c07632acb2..8f23319aae 100644 --- a/manager/allocator/cnmallocator/networkallocator.go +++ b/manager/allocator/cnmallocator/networkallocator.go @@ -805,8 +805,7 @@ func (na *cnmNetworkAllocator) resolveDriver(n *api.Network) (*networkDriver, er d, drvcap := na.drvRegistry.Driver(dName) if d == nil { - var err error - err = na.loadDriver(dName) + err := na.loadDriver(dName) if err != nil { return nil, err } diff --git a/manager/constraint/constraint.go b/manager/constraint/constraint.go index 9f13217ae4..6c49c07728 100644 --- a/manager/constraint/constraint.go +++ b/manager/constraint/constraint.go @@ -56,7 +56,7 @@ func Parse(env []string) ([]Constraint, error) { part0 := strings.TrimSpace(parts[0]) // validate key matched := alphaNumeric.MatchString(part0) - if matched == false { + if !matched { return nil, fmt.Errorf("key '%s' is invalid", part0) } @@ -64,7 +64,7 @@ func Parse(env []string) ([]Constraint, error) { // validate Value matched = valuePattern.MatchString(part1) - if matched == false { + if !matched { return nil, fmt.Errorf("value '%s' is invalid", part1) } // TODO(dongluochen): revisit requirements to see if globing or regex are useful diff --git a/manager/dispatcher/dispatcher.go b/manager/dispatcher/dispatcher.go index 1330a155e4..7fb287b9f1 100644 --- a/manager/dispatcher/dispatcher.go +++ b/manager/dispatcher/dispatcher.go @@ -1055,14 +1055,10 @@ func (d *Dispatcher) moveTasksToOrphaned(nodeID string) error { task.Status.State = api.TaskStateOrphaned } - if err := batch.Update(func(tx store.Tx) error { - err := store.UpdateTask(tx, task) - if err != nil { - return err - } - - return nil - }); err != nil { + err := batch.Update(func(tx store.Tx) error { + return store.UpdateTask(tx, task) + }) + if err != nil { return err } diff --git a/manager/dispatcher/dispatcher_test.go b/manager/dispatcher/dispatcher_test.go index a84e074eb1..173e75b7c4 100644 --- a/manager/dispatcher/dispatcher_test.go +++ b/manager/dispatcher/dispatcher_test.go @@ -2087,7 +2087,6 @@ func (m *mockPluginGetter) GetAllManagedPluginsByCap(capability string) []plugin return nil } func (m *mockPluginGetter) Handle(capability string, callback func(string, *plugins.Client)) { - return } // MockPlugin mocks a v2 docker plugin diff --git a/manager/metrics/collector.go b/manager/metrics/collector.go index 384743707d..5539a898ca 100644 --- a/manager/metrics/collector.go +++ b/manager/metrics/collector.go @@ -188,7 +188,6 @@ func (c *Collector) handleNodeEvent(event events.Event) { if newNode != nil { nodesMetric.WithValues(strings.ToLower(newNode.Status.State.String())).Inc(1) } - return } func (c *Collector) handleTaskEvent(event events.Event) { @@ -218,8 +217,6 @@ func (c *Collector) handleTaskEvent(event events.Event) { strings.ToLower(newTask.Status.State.String()), ).Inc(1) } - - return } func (c *Collector) handleServiceEvent(event events.Event) { diff --git a/manager/orchestrator/replicated/update_test.go b/manager/orchestrator/replicated/update_test.go index 4b769f3147..45dacac6f6 100644 --- a/manager/orchestrator/replicated/update_test.go +++ b/manager/orchestrator/replicated/update_test.go @@ -51,38 +51,36 @@ func testUpdaterRollback(t *testing.T, rollbackFailureAction api.UpdateConfig_Fa go func() { failedLast := false for { - select { - case e := <-watchUpdate: - task := e.(api.EventUpdateTask).Task - if task.DesiredState == task.Status.State { - continue - } - if task.DesiredState == api.TaskStateRunning && task.Status.State != api.TaskStateFailed && task.Status.State != api.TaskStateRunning { - err := s.Update(func(tx store.Tx) error { - task = store.GetTask(tx, task.ID) - // Never fail two image2 tasks in a row, so there's a mix of - // failed and successful tasks for the rollback. - if task.Spec.GetContainer().Image == "image1" && atomic.LoadUint32(&failImage1) == 1 { - task.Status.State = api.TaskStateFailed - failedLast = true - } else if task.Spec.GetContainer().Image == "image2" && atomic.LoadUint32(&failImage2) == 1 && !failedLast { - task.Status.State = api.TaskStateFailed - failedLast = true - } else { - task.Status.State = task.DesiredState - failedLast = false - } - return store.UpdateTask(tx, task) - }) - assert.NoError(t, err) - } else if task.DesiredState > api.TaskStateRunning { - err := s.Update(func(tx store.Tx) error { - task = store.GetTask(tx, task.ID) + e := <-watchUpdate + task := e.(api.EventUpdateTask).Task + if task.DesiredState == task.Status.State { + continue + } + if task.DesiredState == api.TaskStateRunning && task.Status.State != api.TaskStateFailed && task.Status.State != api.TaskStateRunning { + err := s.Update(func(tx store.Tx) error { + task = store.GetTask(tx, task.ID) + // Never fail two image2 tasks in a row, so there's a mix of + // failed and successful tasks for the rollback. + if task.Spec.GetContainer().Image == "image1" && atomic.LoadUint32(&failImage1) == 1 { + task.Status.State = api.TaskStateFailed + failedLast = true + } else if task.Spec.GetContainer().Image == "image2" && atomic.LoadUint32(&failImage2) == 1 && !failedLast { + task.Status.State = api.TaskStateFailed + failedLast = true + } else { task.Status.State = task.DesiredState - return store.UpdateTask(tx, task) - }) - assert.NoError(t, err) - } + failedLast = false + } + return store.UpdateTask(tx, task) + }) + assert.NoError(t, err) + } else if task.DesiredState > api.TaskStateRunning { + err := s.Update(func(tx store.Tx) error { + task = store.GetTask(tx, task.ID) + task.Status.State = task.DesiredState + return store.UpdateTask(tx, task) + }) + assert.NoError(t, err) } } }() diff --git a/manager/orchestrator/taskinit/init.go b/manager/orchestrator/taskinit/init.go index 85ad6d1e01..be319cc25d 100644 --- a/manager/orchestrator/taskinit/init.go +++ b/manager/orchestrator/taskinit/init.go @@ -80,7 +80,7 @@ func CheckTasks(ctx context.Context, s *store.MemoryStore, readTx store.ReadTx, } if err == nil { restartTime := timestamp.Add(restartDelay) - calculatedRestartDelay := restartTime.Sub(time.Now()) + calculatedRestartDelay := time.Until(restartTime) if calculatedRestartDelay < restartDelay { restartDelay = calculatedRestartDelay } diff --git a/manager/state/raft/raft.go b/manager/state/raft/raft.go index 14ae3c299d..2a2bbfe54c 100644 --- a/manager/state/raft/raft.go +++ b/manager/state/raft/raft.go @@ -1172,11 +1172,8 @@ func (n *Node) CanRemoveMember(id uint64) bool { } nquorum := (len(members)-1)/2 + 1 - if nreachable < nquorum { - return false - } - return true + return nreachable >= nquorum } func (n *Node) removeMember(ctx context.Context, id uint64) error { @@ -1581,10 +1578,7 @@ func (n *Node) ProposeValue(ctx context.Context, storeAction []api.StoreAction, defer cancel() _, err := n.processInternalRaftRequest(ctx, &api.InternalRaftRequest{Action: storeAction}, cb) - if err != nil { - return err - } - return nil + return err } // GetVersion returns the sequence information for the current raft round. diff --git a/node/node.go b/node/node.go index 58f34e2619..d4153d6177 100644 --- a/node/node.go +++ b/node/node.go @@ -1061,19 +1061,16 @@ func (s *persistentRemotes) Observe(peer api.Peer, weight int) { s.c.Broadcast() if err := s.save(); err != nil { logrus.Errorf("error writing cluster state file: %v", err) - return } - return } + func (s *persistentRemotes) Remove(peers ...api.Peer) { s.Lock() defer s.Unlock() s.Remotes.Remove(peers...) if err := s.save(); err != nil { logrus.Errorf("error writing cluster state file: %v", err) - return } - return } func (s *persistentRemotes) save() error { diff --git a/watch/sinks_test.go b/watch/sinks_test.go index 867b2f7c42..69593885eb 100644 --- a/watch/sinks_test.go +++ b/watch/sinks_test.go @@ -39,8 +39,7 @@ func TestTimeoutDropErrSinkGen(t *testing.T) { <-ch2.Done() // Make sure that closing a sink closes the channel - var errClose error - errClose = sink.Close() + errClose := sink.Close() <-ch.Done() require.NoError(errClose) From 77a55970a7e02a1449af31bf70be2cd7a4fb8d24 Mon Sep 17 00:00:00 2001 From: Drew Erny Date: Thu, 24 Jan 2019 11:24:23 -0600 Subject: [PATCH 7/7] Fix make check gometalinter dropped support for gosimple, which is deprecated anyway and has been subsumed by staticcheck. This commit removes gosimple from our list of enabled linters (as it's no longer valid). It does not enable staticcheck, because staticcheck throws too many errors. Signed-off-by: Drew Erny (cherry picked from commit 3bfc201ae805c67d604b45c2c4f48350f5873bae) Signed-off-by: Sebastiaan van Stijn --- .gometalinter.json | 1 - 1 file changed, 1 deletion(-) diff --git a/.gometalinter.json b/.gometalinter.json index c20515ad37..6710a180dc 100644 --- a/.gometalinter.json +++ b/.gometalinter.json @@ -9,7 +9,6 @@ "gofmt", "goimports", "golint", - "gosimple", "ineffassign", "deadcode", "unconvert"