Merge pull request #41540 from wojtek-t/upgrade_to_etcd_3_0_17

Automatic merge from submit-queue (batch tested with PRs 41540, 41808, 41710, 41838, 41840)

Update etcd Godeps to 3.0.17
This commit is contained in:
Kubernetes Submit Queue 2017-02-23 03:29:30 -08:00 committed by GitHub
commit 07cb35d4d9
30 changed files with 464 additions and 388 deletions

208
Godeps/Godeps.json generated
View File

@ -423,263 +423,263 @@
}, },
{ {
"ImportPath": "github.com/coreos/etcd/alarm", "ImportPath": "github.com/coreos/etcd/alarm",
"Comment": "v3.0.14", "Comment": "v3.0.17",
"Rev": "8a37349097a592db79ba3087f3cae9cd4b0af21c" "Rev": "cc198e22d3b8fd7ec98304c95e68ee375be54589"
}, },
{ {
"ImportPath": "github.com/coreos/etcd/auth", "ImportPath": "github.com/coreos/etcd/auth",
"Comment": "v3.0.14", "Comment": "v3.0.17",
"Rev": "8a37349097a592db79ba3087f3cae9cd4b0af21c" "Rev": "cc198e22d3b8fd7ec98304c95e68ee375be54589"
}, },
{ {
"ImportPath": "github.com/coreos/etcd/auth/authpb", "ImportPath": "github.com/coreos/etcd/auth/authpb",
"Comment": "v3.0.14", "Comment": "v3.0.17",
"Rev": "8a37349097a592db79ba3087f3cae9cd4b0af21c" "Rev": "cc198e22d3b8fd7ec98304c95e68ee375be54589"
}, },
{ {
"ImportPath": "github.com/coreos/etcd/client", "ImportPath": "github.com/coreos/etcd/client",
"Comment": "v3.0.14", "Comment": "v3.0.17",
"Rev": "8a37349097a592db79ba3087f3cae9cd4b0af21c" "Rev": "cc198e22d3b8fd7ec98304c95e68ee375be54589"
}, },
{ {
"ImportPath": "github.com/coreos/etcd/clientv3", "ImportPath": "github.com/coreos/etcd/clientv3",
"Comment": "v3.0.14", "Comment": "v3.0.17",
"Rev": "8a37349097a592db79ba3087f3cae9cd4b0af21c" "Rev": "cc198e22d3b8fd7ec98304c95e68ee375be54589"
}, },
{ {
"ImportPath": "github.com/coreos/etcd/compactor", "ImportPath": "github.com/coreos/etcd/compactor",
"Comment": "v3.0.14", "Comment": "v3.0.17",
"Rev": "8a37349097a592db79ba3087f3cae9cd4b0af21c" "Rev": "cc198e22d3b8fd7ec98304c95e68ee375be54589"
}, },
{ {
"ImportPath": "github.com/coreos/etcd/discovery", "ImportPath": "github.com/coreos/etcd/discovery",
"Comment": "v3.0.14", "Comment": "v3.0.17",
"Rev": "8a37349097a592db79ba3087f3cae9cd4b0af21c" "Rev": "cc198e22d3b8fd7ec98304c95e68ee375be54589"
}, },
{ {
"ImportPath": "github.com/coreos/etcd/error", "ImportPath": "github.com/coreos/etcd/error",
"Comment": "v3.0.14", "Comment": "v3.0.17",
"Rev": "8a37349097a592db79ba3087f3cae9cd4b0af21c" "Rev": "cc198e22d3b8fd7ec98304c95e68ee375be54589"
}, },
{ {
"ImportPath": "github.com/coreos/etcd/etcdserver", "ImportPath": "github.com/coreos/etcd/etcdserver",
"Comment": "v3.0.14", "Comment": "v3.0.17",
"Rev": "8a37349097a592db79ba3087f3cae9cd4b0af21c" "Rev": "cc198e22d3b8fd7ec98304c95e68ee375be54589"
}, },
{ {
"ImportPath": "github.com/coreos/etcd/etcdserver/api", "ImportPath": "github.com/coreos/etcd/etcdserver/api",
"Comment": "v3.0.14", "Comment": "v3.0.17",
"Rev": "8a37349097a592db79ba3087f3cae9cd4b0af21c" "Rev": "cc198e22d3b8fd7ec98304c95e68ee375be54589"
}, },
{ {
"ImportPath": "github.com/coreos/etcd/etcdserver/api/v2http", "ImportPath": "github.com/coreos/etcd/etcdserver/api/v2http",
"Comment": "v3.0.14", "Comment": "v3.0.17",
"Rev": "8a37349097a592db79ba3087f3cae9cd4b0af21c" "Rev": "cc198e22d3b8fd7ec98304c95e68ee375be54589"
}, },
{ {
"ImportPath": "github.com/coreos/etcd/etcdserver/api/v2http/httptypes", "ImportPath": "github.com/coreos/etcd/etcdserver/api/v2http/httptypes",
"Comment": "v3.0.14", "Comment": "v3.0.17",
"Rev": "8a37349097a592db79ba3087f3cae9cd4b0af21c" "Rev": "cc198e22d3b8fd7ec98304c95e68ee375be54589"
}, },
{ {
"ImportPath": "github.com/coreos/etcd/etcdserver/api/v3rpc", "ImportPath": "github.com/coreos/etcd/etcdserver/api/v3rpc",
"Comment": "v3.0.14", "Comment": "v3.0.17",
"Rev": "8a37349097a592db79ba3087f3cae9cd4b0af21c" "Rev": "cc198e22d3b8fd7ec98304c95e68ee375be54589"
}, },
{ {
"ImportPath": "github.com/coreos/etcd/etcdserver/api/v3rpc/rpctypes", "ImportPath": "github.com/coreos/etcd/etcdserver/api/v3rpc/rpctypes",
"Comment": "v3.0.14", "Comment": "v3.0.17",
"Rev": "8a37349097a592db79ba3087f3cae9cd4b0af21c" "Rev": "cc198e22d3b8fd7ec98304c95e68ee375be54589"
}, },
{ {
"ImportPath": "github.com/coreos/etcd/etcdserver/auth", "ImportPath": "github.com/coreos/etcd/etcdserver/auth",
"Comment": "v3.0.14", "Comment": "v3.0.17",
"Rev": "8a37349097a592db79ba3087f3cae9cd4b0af21c" "Rev": "cc198e22d3b8fd7ec98304c95e68ee375be54589"
}, },
{ {
"ImportPath": "github.com/coreos/etcd/etcdserver/etcdserverpb", "ImportPath": "github.com/coreos/etcd/etcdserver/etcdserverpb",
"Comment": "v3.0.14", "Comment": "v3.0.17",
"Rev": "8a37349097a592db79ba3087f3cae9cd4b0af21c" "Rev": "cc198e22d3b8fd7ec98304c95e68ee375be54589"
}, },
{ {
"ImportPath": "github.com/coreos/etcd/etcdserver/membership", "ImportPath": "github.com/coreos/etcd/etcdserver/membership",
"Comment": "v3.0.14", "Comment": "v3.0.17",
"Rev": "8a37349097a592db79ba3087f3cae9cd4b0af21c" "Rev": "cc198e22d3b8fd7ec98304c95e68ee375be54589"
}, },
{ {
"ImportPath": "github.com/coreos/etcd/etcdserver/stats", "ImportPath": "github.com/coreos/etcd/etcdserver/stats",
"Comment": "v3.0.14", "Comment": "v3.0.17",
"Rev": "8a37349097a592db79ba3087f3cae9cd4b0af21c" "Rev": "cc198e22d3b8fd7ec98304c95e68ee375be54589"
}, },
{ {
"ImportPath": "github.com/coreos/etcd/integration", "ImportPath": "github.com/coreos/etcd/integration",
"Comment": "v3.0.14", "Comment": "v3.0.17",
"Rev": "8a37349097a592db79ba3087f3cae9cd4b0af21c" "Rev": "cc198e22d3b8fd7ec98304c95e68ee375be54589"
}, },
{ {
"ImportPath": "github.com/coreos/etcd/lease", "ImportPath": "github.com/coreos/etcd/lease",
"Comment": "v3.0.14", "Comment": "v3.0.17",
"Rev": "8a37349097a592db79ba3087f3cae9cd4b0af21c" "Rev": "cc198e22d3b8fd7ec98304c95e68ee375be54589"
}, },
{ {
"ImportPath": "github.com/coreos/etcd/lease/leasehttp", "ImportPath": "github.com/coreos/etcd/lease/leasehttp",
"Comment": "v3.0.14", "Comment": "v3.0.17",
"Rev": "8a37349097a592db79ba3087f3cae9cd4b0af21c" "Rev": "cc198e22d3b8fd7ec98304c95e68ee375be54589"
}, },
{ {
"ImportPath": "github.com/coreos/etcd/lease/leasepb", "ImportPath": "github.com/coreos/etcd/lease/leasepb",
"Comment": "v3.0.14", "Comment": "v3.0.17",
"Rev": "8a37349097a592db79ba3087f3cae9cd4b0af21c" "Rev": "cc198e22d3b8fd7ec98304c95e68ee375be54589"
}, },
{ {
"ImportPath": "github.com/coreos/etcd/mvcc", "ImportPath": "github.com/coreos/etcd/mvcc",
"Comment": "v3.0.14", "Comment": "v3.0.17",
"Rev": "8a37349097a592db79ba3087f3cae9cd4b0af21c" "Rev": "cc198e22d3b8fd7ec98304c95e68ee375be54589"
}, },
{ {
"ImportPath": "github.com/coreos/etcd/mvcc/backend", "ImportPath": "github.com/coreos/etcd/mvcc/backend",
"Comment": "v3.0.14", "Comment": "v3.0.17",
"Rev": "8a37349097a592db79ba3087f3cae9cd4b0af21c" "Rev": "cc198e22d3b8fd7ec98304c95e68ee375be54589"
}, },
{ {
"ImportPath": "github.com/coreos/etcd/mvcc/mvccpb", "ImportPath": "github.com/coreos/etcd/mvcc/mvccpb",
"Comment": "v3.0.14", "Comment": "v3.0.17",
"Rev": "8a37349097a592db79ba3087f3cae9cd4b0af21c" "Rev": "cc198e22d3b8fd7ec98304c95e68ee375be54589"
}, },
{ {
"ImportPath": "github.com/coreos/etcd/pkg/adt", "ImportPath": "github.com/coreos/etcd/pkg/adt",
"Comment": "v3.0.14", "Comment": "v3.0.17",
"Rev": "8a37349097a592db79ba3087f3cae9cd4b0af21c" "Rev": "cc198e22d3b8fd7ec98304c95e68ee375be54589"
}, },
{ {
"ImportPath": "github.com/coreos/etcd/pkg/contention", "ImportPath": "github.com/coreos/etcd/pkg/contention",
"Comment": "v3.0.14", "Comment": "v3.0.17",
"Rev": "8a37349097a592db79ba3087f3cae9cd4b0af21c" "Rev": "cc198e22d3b8fd7ec98304c95e68ee375be54589"
}, },
{ {
"ImportPath": "github.com/coreos/etcd/pkg/crc", "ImportPath": "github.com/coreos/etcd/pkg/crc",
"Comment": "v3.0.14", "Comment": "v3.0.17",
"Rev": "8a37349097a592db79ba3087f3cae9cd4b0af21c" "Rev": "cc198e22d3b8fd7ec98304c95e68ee375be54589"
}, },
{ {
"ImportPath": "github.com/coreos/etcd/pkg/fileutil", "ImportPath": "github.com/coreos/etcd/pkg/fileutil",
"Comment": "v3.0.14", "Comment": "v3.0.17",
"Rev": "8a37349097a592db79ba3087f3cae9cd4b0af21c" "Rev": "cc198e22d3b8fd7ec98304c95e68ee375be54589"
}, },
{ {
"ImportPath": "github.com/coreos/etcd/pkg/httputil", "ImportPath": "github.com/coreos/etcd/pkg/httputil",
"Comment": "v3.0.14", "Comment": "v3.0.17",
"Rev": "8a37349097a592db79ba3087f3cae9cd4b0af21c" "Rev": "cc198e22d3b8fd7ec98304c95e68ee375be54589"
}, },
{ {
"ImportPath": "github.com/coreos/etcd/pkg/idutil", "ImportPath": "github.com/coreos/etcd/pkg/idutil",
"Comment": "v3.0.14", "Comment": "v3.0.17",
"Rev": "8a37349097a592db79ba3087f3cae9cd4b0af21c" "Rev": "cc198e22d3b8fd7ec98304c95e68ee375be54589"
}, },
{ {
"ImportPath": "github.com/coreos/etcd/pkg/ioutil", "ImportPath": "github.com/coreos/etcd/pkg/ioutil",
"Comment": "v3.0.14", "Comment": "v3.0.17",
"Rev": "8a37349097a592db79ba3087f3cae9cd4b0af21c" "Rev": "cc198e22d3b8fd7ec98304c95e68ee375be54589"
}, },
{ {
"ImportPath": "github.com/coreos/etcd/pkg/logutil", "ImportPath": "github.com/coreos/etcd/pkg/logutil",
"Comment": "v3.0.14", "Comment": "v3.0.17",
"Rev": "8a37349097a592db79ba3087f3cae9cd4b0af21c" "Rev": "cc198e22d3b8fd7ec98304c95e68ee375be54589"
}, },
{ {
"ImportPath": "github.com/coreos/etcd/pkg/netutil", "ImportPath": "github.com/coreos/etcd/pkg/netutil",
"Comment": "v3.0.14", "Comment": "v3.0.17",
"Rev": "8a37349097a592db79ba3087f3cae9cd4b0af21c" "Rev": "cc198e22d3b8fd7ec98304c95e68ee375be54589"
}, },
{ {
"ImportPath": "github.com/coreos/etcd/pkg/pathutil", "ImportPath": "github.com/coreos/etcd/pkg/pathutil",
"Comment": "v3.0.14", "Comment": "v3.0.17",
"Rev": "8a37349097a592db79ba3087f3cae9cd4b0af21c" "Rev": "cc198e22d3b8fd7ec98304c95e68ee375be54589"
}, },
{ {
"ImportPath": "github.com/coreos/etcd/pkg/pbutil", "ImportPath": "github.com/coreos/etcd/pkg/pbutil",
"Comment": "v3.0.14", "Comment": "v3.0.17",
"Rev": "8a37349097a592db79ba3087f3cae9cd4b0af21c" "Rev": "cc198e22d3b8fd7ec98304c95e68ee375be54589"
}, },
{ {
"ImportPath": "github.com/coreos/etcd/pkg/runtime", "ImportPath": "github.com/coreos/etcd/pkg/runtime",
"Comment": "v3.0.14", "Comment": "v3.0.17",
"Rev": "8a37349097a592db79ba3087f3cae9cd4b0af21c" "Rev": "cc198e22d3b8fd7ec98304c95e68ee375be54589"
}, },
{ {
"ImportPath": "github.com/coreos/etcd/pkg/schedule", "ImportPath": "github.com/coreos/etcd/pkg/schedule",
"Comment": "v3.0.14", "Comment": "v3.0.17",
"Rev": "8a37349097a592db79ba3087f3cae9cd4b0af21c" "Rev": "cc198e22d3b8fd7ec98304c95e68ee375be54589"
}, },
{ {
"ImportPath": "github.com/coreos/etcd/pkg/testutil", "ImportPath": "github.com/coreos/etcd/pkg/testutil",
"Comment": "v3.0.14", "Comment": "v3.0.17",
"Rev": "8a37349097a592db79ba3087f3cae9cd4b0af21c" "Rev": "cc198e22d3b8fd7ec98304c95e68ee375be54589"
}, },
{ {
"ImportPath": "github.com/coreos/etcd/pkg/tlsutil", "ImportPath": "github.com/coreos/etcd/pkg/tlsutil",
"Comment": "v3.0.14", "Comment": "v3.0.17",
"Rev": "8a37349097a592db79ba3087f3cae9cd4b0af21c" "Rev": "cc198e22d3b8fd7ec98304c95e68ee375be54589"
}, },
{ {
"ImportPath": "github.com/coreos/etcd/pkg/transport", "ImportPath": "github.com/coreos/etcd/pkg/transport",
"Comment": "v3.0.14", "Comment": "v3.0.17",
"Rev": "8a37349097a592db79ba3087f3cae9cd4b0af21c" "Rev": "cc198e22d3b8fd7ec98304c95e68ee375be54589"
}, },
{ {
"ImportPath": "github.com/coreos/etcd/pkg/types", "ImportPath": "github.com/coreos/etcd/pkg/types",
"Comment": "v3.0.14", "Comment": "v3.0.17",
"Rev": "8a37349097a592db79ba3087f3cae9cd4b0af21c" "Rev": "cc198e22d3b8fd7ec98304c95e68ee375be54589"
}, },
{ {
"ImportPath": "github.com/coreos/etcd/pkg/wait", "ImportPath": "github.com/coreos/etcd/pkg/wait",
"Comment": "v3.0.14", "Comment": "v3.0.17",
"Rev": "8a37349097a592db79ba3087f3cae9cd4b0af21c" "Rev": "cc198e22d3b8fd7ec98304c95e68ee375be54589"
}, },
{ {
"ImportPath": "github.com/coreos/etcd/raft", "ImportPath": "github.com/coreos/etcd/raft",
"Comment": "v3.0.14", "Comment": "v3.0.17",
"Rev": "8a37349097a592db79ba3087f3cae9cd4b0af21c" "Rev": "cc198e22d3b8fd7ec98304c95e68ee375be54589"
}, },
{ {
"ImportPath": "github.com/coreos/etcd/raft/raftpb", "ImportPath": "github.com/coreos/etcd/raft/raftpb",
"Comment": "v3.0.14", "Comment": "v3.0.17",
"Rev": "8a37349097a592db79ba3087f3cae9cd4b0af21c" "Rev": "cc198e22d3b8fd7ec98304c95e68ee375be54589"
}, },
{ {
"ImportPath": "github.com/coreos/etcd/rafthttp", "ImportPath": "github.com/coreos/etcd/rafthttp",
"Comment": "v3.0.14", "Comment": "v3.0.17",
"Rev": "8a37349097a592db79ba3087f3cae9cd4b0af21c" "Rev": "cc198e22d3b8fd7ec98304c95e68ee375be54589"
}, },
{ {
"ImportPath": "github.com/coreos/etcd/snap", "ImportPath": "github.com/coreos/etcd/snap",
"Comment": "v3.0.14", "Comment": "v3.0.17",
"Rev": "8a37349097a592db79ba3087f3cae9cd4b0af21c" "Rev": "cc198e22d3b8fd7ec98304c95e68ee375be54589"
}, },
{ {
"ImportPath": "github.com/coreos/etcd/snap/snappb", "ImportPath": "github.com/coreos/etcd/snap/snappb",
"Comment": "v3.0.14", "Comment": "v3.0.17",
"Rev": "8a37349097a592db79ba3087f3cae9cd4b0af21c" "Rev": "cc198e22d3b8fd7ec98304c95e68ee375be54589"
}, },
{ {
"ImportPath": "github.com/coreos/etcd/store", "ImportPath": "github.com/coreos/etcd/store",
"Comment": "v3.0.14", "Comment": "v3.0.17",
"Rev": "8a37349097a592db79ba3087f3cae9cd4b0af21c" "Rev": "cc198e22d3b8fd7ec98304c95e68ee375be54589"
}, },
{ {
"ImportPath": "github.com/coreos/etcd/version", "ImportPath": "github.com/coreos/etcd/version",
"Comment": "v3.0.14", "Comment": "v3.0.17",
"Rev": "8a37349097a592db79ba3087f3cae9cd4b0af21c" "Rev": "cc198e22d3b8fd7ec98304c95e68ee375be54589"
}, },
{ {
"ImportPath": "github.com/coreos/etcd/wal", "ImportPath": "github.com/coreos/etcd/wal",
"Comment": "v3.0.14", "Comment": "v3.0.17",
"Rev": "8a37349097a592db79ba3087f3cae9cd4b0af21c" "Rev": "cc198e22d3b8fd7ec98304c95e68ee375be54589"
}, },
{ {
"ImportPath": "github.com/coreos/etcd/wal/walpb", "ImportPath": "github.com/coreos/etcd/wal/walpb",
"Comment": "v3.0.14", "Comment": "v3.0.17",
"Rev": "8a37349097a592db79ba3087f3cae9cd4b0af21c" "Rev": "cc198e22d3b8fd7ec98304c95e68ee375be54589"
}, },
{ {
"ImportPath": "github.com/coreos/go-oidc/http", "ImportPath": "github.com/coreos/go-oidc/http",

View File

@ -72,7 +72,7 @@ RUN mkdir $TMPDIR \
github.com/tools/godep github.com/tools/godep
# Download and symlink etcd. We need this for our integration tests. # Download and symlink etcd. We need this for our integration tests.
RUN export ETCD_VERSION=v3.0.14; \ RUN export ETCD_VERSION=v3.0.17; \
mkdir -p /usr/local/src/etcd \ mkdir -p /usr/local/src/etcd \
&& cd /usr/local/src/etcd \ && cd /usr/local/src/etcd \
&& curl -fsSL https://github.com/coreos/etcd/releases/download/${ETCD_VERSION}/etcd-${ETCD_VERSION}-linux-amd64.tar.gz | tar -xz \ && curl -fsSL https://github.com/coreos/etcd/releases/download/${ETCD_VERSION}/etcd-${ETCD_VERSION}-linux-amd64.tar.gz | tar -xz \

View File

@ -1 +1 @@
v1.7.5-1 v1.7.5-2

View File

@ -110,7 +110,7 @@ ENABLE_L7_LOADBALANCING="${KUBE_ENABLE_L7_LOADBALANCING:-glbc}"
# standalone - Heapster only. Metrics available via Heapster REST API. # standalone - Heapster only. Metrics available via Heapster REST API.
ENABLE_CLUSTER_MONITORING="${KUBE_ENABLE_CLUSTER_MONITORING:-influxdb}" ENABLE_CLUSTER_MONITORING="${KUBE_ENABLE_CLUSTER_MONITORING:-influxdb}"
# Set etcd image (e.g. 3.0.14-experimental.1) version (e.g. 3.0.14) if you need # Set etcd image (e.g. 3.0.17-alpha.1) and version (e.g. 3.0.17) if you need
# non-default version. # non-default version.
ETCD_IMAGE="${TEST_ETCD_IMAGE:-}" ETCD_IMAGE="${TEST_ETCD_IMAGE:-}"
ETCD_VERSION="${TEST_ETCD_VERSION:-}" ETCD_VERSION="${TEST_ETCD_VERSION:-}"

View File

@ -15,7 +15,7 @@
# Build the etcd image # Build the etcd image
# #
# Usage: # Usage:
# [TAGS=2.2.1 2.3.7 3.0.14] [REGISTRY=gcr.io/google_containers] [ARCH=amd64] [BASEIMAGE=busybox] make (build|push) # [TAGS=2.2.1 2.3.7 3.0.17] [REGISTRY=gcr.io/google_containers] [ARCH=amd64] [BASEIMAGE=busybox] make (build|push)
# The image contains different etcd versions to simplify # The image contains different etcd versions to simplify
# upgrades. Thus be careful when removing any tag from here. # upgrades. Thus be careful when removing any tag from here.
@ -26,8 +26,8 @@
# Except from etcd-$(tag) and etcdctl-$(tag) binaries, we also # Except from etcd-$(tag) and etcdctl-$(tag) binaries, we also
# need etcd and etcdctl binaries for backward compatibility reasons. # need etcd and etcdctl binaries for backward compatibility reasons.
# That binary will be set to the last tag from $(TAGS). # That binary will be set to the last tag from $(TAGS).
TAGS?=2.2.1 2.3.7 3.0.14 TAGS?=2.2.1 2.3.7 3.0.17
REGISTRY_TAG?=3.0.14 REGISTRY_TAG?=3.0.17
ARCH?=amd64 ARCH?=amd64
REGISTRY?=gcr.io/google_containers REGISTRY?=gcr.io/google_containers
GOLANG_VERSION?=1.7.5 GOLANG_VERSION?=1.7.5

View File

@ -18,7 +18,7 @@
# This script performs etcd upgrade based on the following environmental # This script performs etcd upgrade based on the following environmental
# variables: # variables:
# TARGET_STORAGE - API of etcd to be used (supported: 'etcd2', 'etcd3') # TARGET_STORAGE - API of etcd to be used (supported: 'etcd2', 'etcd3')
# TARGET_VERSION - etcd release to be used (supported: '2.2.1', '2.3.7', '3.0.14') # TARGET_VERSION - etcd release to be used (supported: '2.2.1', '2.3.7', '3.0.17')
# DATA_DIRECTORY - directory with etcd data # DATA_DIRECTORY - directory with etcd data
# #
# The current etcd version and storage format is detected based on the # The current etcd version and storage format is detected based on the
@ -27,8 +27,8 @@
# #
# The update workflow support the following upgrade steps: # The update workflow support the following upgrade steps:
# - 2.2.1/etcd2 -> 2.3.7/etcd2 # - 2.2.1/etcd2 -> 2.3.7/etcd2
# - 2.3.7/etcd2 -> 3.0.14/etcd2 # - 2.3.7/etcd2 -> 3.0.17/etcd2
# - 3.0.14/etcd2 -> 3.0.14/etcd3 # - 3.0.17/etcd2 -> 3.0.17/etcd3
# #
# NOTE: The releases supported in this script has to match release binaries # NOTE: The releases supported in this script has to match release binaries
# present in the etcd image (to make this script work correctly). # present in the etcd image (to make this script work correctly).
@ -68,7 +68,7 @@ fi
# NOTE: SUPPORTED_VERSION has to match release binaries present in the # NOTE: SUPPORTED_VERSION has to match release binaries present in the
# etcd image (to make this script work correctly). # etcd image (to make this script work correctly).
# We cannot use array since sh doesn't support it. # We cannot use array since sh doesn't support it.
SUPPORTED_VERSIONS_STRING="2.2.1 2.3.7 3.0.14" SUPPORTED_VERSIONS_STRING="2.2.1 2.3.7 3.0.17"
SUPPORTED_VERSIONS=$(echo "${SUPPORTED_VERSIONS_STRING}" | tr " " "\n") SUPPORTED_VERSIONS=$(echo "${SUPPORTED_VERSIONS_STRING}" | tr " " "\n")
VERSION_FILE="version.txt" VERSION_FILE="version.txt"

View File

@ -49,7 +49,7 @@ CLUSTER_IP_RANGE="${CLUSTER_IP_RANGE:-10.240.0.0/11}"
RUNTIME_CONFIG="${KUBE_RUNTIME_CONFIG:-}" RUNTIME_CONFIG="${KUBE_RUNTIME_CONFIG:-}"
TERMINATED_POD_GC_THRESHOLD=${TERMINATED_POD_GC_THRESHOLD:-100} TERMINATED_POD_GC_THRESHOLD=${TERMINATED_POD_GC_THRESHOLD:-100}
# Set etcd image (e.g. 3.0.14-experimental.1) version (e.g. 3.0.14) if you need # Set etcd image (e.g. 3.0.17-alpha.1) and version (e.g. 3.0.17) if you need
# non-default version. # non-default version.
ETCD_IMAGE="${TEST_ETCD_IMAGE:-}" ETCD_IMAGE="${TEST_ETCD_IMAGE:-}"
ETCD_VERSION="${TEST_ETCD_VERSION:-}" ETCD_VERSION="${TEST_ETCD_VERSION:-}"

View File

@ -36,7 +36,7 @@
"containers":[ "containers":[
{ {
"name": "etcd-container", "name": "etcd-container",
"image": "gcr.io/google_containers/etcd:{{ pillar.get('etcd_docker_tag', '3.0.14-alpha.1') }}", "image": "gcr.io/google_containers/etcd:{{ pillar.get('etcd_docker_tag', '3.0.17-alpha.1') }}",
"resources": { "resources": {
"requests": { "requests": {
"cpu": {{ cpulimit }} "cpu": {{ cpulimit }}
@ -52,7 +52,7 @@
"value": "{{ pillar.get('storage_backend', 'etcd3') }}" "value": "{{ pillar.get('storage_backend', 'etcd3') }}"
}, },
{ "name": "TARGET_VERSION", { "name": "TARGET_VERSION",
"value": "{{ pillar.get('etcd_version', '3.0.14') }}" "value": "{{ pillar.get('etcd_version', '3.0.17') }}"
}, },
{ "name": "DATA_DIRECTORY", { "name": "DATA_DIRECTORY",
"value": "/var/etcd/data{{ suffix }}" "value": "/var/etcd/data{{ suffix }}"

View File

@ -43,7 +43,7 @@ spec:
mountPath: /srv/kubernetes/ mountPath: /srv/kubernetes/
readOnly: true readOnly: true
- name: etcd - name: etcd
image: gcr.io/google_containers/etcd:3.0.14-alpha.1 image: gcr.io/google_containers/etcd:3.0.17-alpha.1
command: command:
- /usr/local/bin/etcd - /usr/local/bin/etcd
- --data-dir - --data-dir

View File

@ -622,7 +622,7 @@ func createAPIServer(clientset *client.Clientset, namespace, name, image, creden
}, },
{ {
Name: "etcd", Name: "etcd",
Image: "gcr.io/google_containers/etcd:3.0.14-alpha.1", Image: "gcr.io/google_containers/etcd:3.0.17-alpha.1",
Command: []string{ Command: []string{
"/usr/local/bin/etcd", "/usr/local/bin/etcd",
"--data-dir", "--data-dir",

View File

@ -830,7 +830,7 @@ func fakeInitHostFactory(apiserverServiceType v1.ServiceType, federationName, na
}, },
{ {
Name: "etcd", Name: "etcd",
Image: "gcr.io/google_containers/etcd:3.0.14-alpha.1", Image: "gcr.io/google_containers/etcd:3.0.17-alpha.1",
Command: []string{ Command: []string{
"/usr/local/bin/etcd", "/usr/local/bin/etcd",
"--data-dir", "--data-dir",

View File

@ -16,7 +16,7 @@
# A set of helpers for starting/running etcd for tests # A set of helpers for starting/running etcd for tests
ETCD_VERSION=${ETCD_VERSION:-3.0.14} ETCD_VERSION=${ETCD_VERSION:-3.0.17}
ETCD_HOST=${ETCD_HOST:-127.0.0.1} ETCD_HOST=${ETCD_HOST:-127.0.0.1}
ETCD_PORT=${ETCD_PORT:-2379} ETCD_PORT=${ETCD_PORT:-2379}

View File

@ -159,7 +159,7 @@ killApiServer
kube::etcd::stop kube::etcd::stop
TARGET_STORAGE="etcd3" \ TARGET_STORAGE="etcd3" \
TARGET_VERSION="3.0.14" \ TARGET_VERSION="3.0.17" \
DATA_DIRECTORY="${ETCD_DIR}" \ DATA_DIRECTORY="${ETCD_DIR}" \
ETCD=$(which etcd) \ ETCD=$(which etcd) \
ETCDCTL=$(which etcdctl) \ ETCDCTL=$(which etcdctl) \

View File

@ -31,263 +31,263 @@
}, },
{ {
"ImportPath": "github.com/coreos/etcd/alarm", "ImportPath": "github.com/coreos/etcd/alarm",
"Comment": "v3.0.14", "Comment": "v3.0.17",
"Rev": "8a37349097a592db79ba3087f3cae9cd4b0af21c" "Rev": "cc198e22d3b8fd7ec98304c95e68ee375be54589"
}, },
{ {
"ImportPath": "github.com/coreos/etcd/auth", "ImportPath": "github.com/coreos/etcd/auth",
"Comment": "v3.0.14", "Comment": "v3.0.17",
"Rev": "8a37349097a592db79ba3087f3cae9cd4b0af21c" "Rev": "cc198e22d3b8fd7ec98304c95e68ee375be54589"
}, },
{ {
"ImportPath": "github.com/coreos/etcd/auth/authpb", "ImportPath": "github.com/coreos/etcd/auth/authpb",
"Comment": "v3.0.14", "Comment": "v3.0.17",
"Rev": "8a37349097a592db79ba3087f3cae9cd4b0af21c" "Rev": "cc198e22d3b8fd7ec98304c95e68ee375be54589"
}, },
{ {
"ImportPath": "github.com/coreos/etcd/client", "ImportPath": "github.com/coreos/etcd/client",
"Comment": "v3.0.14", "Comment": "v3.0.17",
"Rev": "8a37349097a592db79ba3087f3cae9cd4b0af21c" "Rev": "cc198e22d3b8fd7ec98304c95e68ee375be54589"
}, },
{ {
"ImportPath": "github.com/coreos/etcd/clientv3", "ImportPath": "github.com/coreos/etcd/clientv3",
"Comment": "v3.0.14", "Comment": "v3.0.17",
"Rev": "8a37349097a592db79ba3087f3cae9cd4b0af21c" "Rev": "cc198e22d3b8fd7ec98304c95e68ee375be54589"
}, },
{ {
"ImportPath": "github.com/coreos/etcd/compactor", "ImportPath": "github.com/coreos/etcd/compactor",
"Comment": "v3.0.14", "Comment": "v3.0.17",
"Rev": "8a37349097a592db79ba3087f3cae9cd4b0af21c" "Rev": "cc198e22d3b8fd7ec98304c95e68ee375be54589"
}, },
{ {
"ImportPath": "github.com/coreos/etcd/discovery", "ImportPath": "github.com/coreos/etcd/discovery",
"Comment": "v3.0.14", "Comment": "v3.0.17",
"Rev": "8a37349097a592db79ba3087f3cae9cd4b0af21c" "Rev": "cc198e22d3b8fd7ec98304c95e68ee375be54589"
}, },
{ {
"ImportPath": "github.com/coreos/etcd/error", "ImportPath": "github.com/coreos/etcd/error",
"Comment": "v3.0.14", "Comment": "v3.0.17",
"Rev": "8a37349097a592db79ba3087f3cae9cd4b0af21c" "Rev": "cc198e22d3b8fd7ec98304c95e68ee375be54589"
}, },
{ {
"ImportPath": "github.com/coreos/etcd/etcdserver", "ImportPath": "github.com/coreos/etcd/etcdserver",
"Comment": "v3.0.14", "Comment": "v3.0.17",
"Rev": "8a37349097a592db79ba3087f3cae9cd4b0af21c" "Rev": "cc198e22d3b8fd7ec98304c95e68ee375be54589"
}, },
{ {
"ImportPath": "github.com/coreos/etcd/etcdserver/api", "ImportPath": "github.com/coreos/etcd/etcdserver/api",
"Comment": "v3.0.14", "Comment": "v3.0.17",
"Rev": "8a37349097a592db79ba3087f3cae9cd4b0af21c" "Rev": "cc198e22d3b8fd7ec98304c95e68ee375be54589"
}, },
{ {
"ImportPath": "github.com/coreos/etcd/etcdserver/api/v2http", "ImportPath": "github.com/coreos/etcd/etcdserver/api/v2http",
"Comment": "v3.0.14", "Comment": "v3.0.17",
"Rev": "8a37349097a592db79ba3087f3cae9cd4b0af21c" "Rev": "cc198e22d3b8fd7ec98304c95e68ee375be54589"
}, },
{ {
"ImportPath": "github.com/coreos/etcd/etcdserver/api/v2http/httptypes", "ImportPath": "github.com/coreos/etcd/etcdserver/api/v2http/httptypes",
"Comment": "v3.0.14", "Comment": "v3.0.17",
"Rev": "8a37349097a592db79ba3087f3cae9cd4b0af21c" "Rev": "cc198e22d3b8fd7ec98304c95e68ee375be54589"
}, },
{ {
"ImportPath": "github.com/coreos/etcd/etcdserver/api/v3rpc", "ImportPath": "github.com/coreos/etcd/etcdserver/api/v3rpc",
"Comment": "v3.0.14", "Comment": "v3.0.17",
"Rev": "8a37349097a592db79ba3087f3cae9cd4b0af21c" "Rev": "cc198e22d3b8fd7ec98304c95e68ee375be54589"
}, },
{ {
"ImportPath": "github.com/coreos/etcd/etcdserver/api/v3rpc/rpctypes", "ImportPath": "github.com/coreos/etcd/etcdserver/api/v3rpc/rpctypes",
"Comment": "v3.0.14", "Comment": "v3.0.17",
"Rev": "8a37349097a592db79ba3087f3cae9cd4b0af21c" "Rev": "cc198e22d3b8fd7ec98304c95e68ee375be54589"
}, },
{ {
"ImportPath": "github.com/coreos/etcd/etcdserver/auth", "ImportPath": "github.com/coreos/etcd/etcdserver/auth",
"Comment": "v3.0.14", "Comment": "v3.0.17",
"Rev": "8a37349097a592db79ba3087f3cae9cd4b0af21c" "Rev": "cc198e22d3b8fd7ec98304c95e68ee375be54589"
}, },
{ {
"ImportPath": "github.com/coreos/etcd/etcdserver/etcdserverpb", "ImportPath": "github.com/coreos/etcd/etcdserver/etcdserverpb",
"Comment": "v3.0.14", "Comment": "v3.0.17",
"Rev": "8a37349097a592db79ba3087f3cae9cd4b0af21c" "Rev": "cc198e22d3b8fd7ec98304c95e68ee375be54589"
}, },
{ {
"ImportPath": "github.com/coreos/etcd/etcdserver/membership", "ImportPath": "github.com/coreos/etcd/etcdserver/membership",
"Comment": "v3.0.14", "Comment": "v3.0.17",
"Rev": "8a37349097a592db79ba3087f3cae9cd4b0af21c" "Rev": "cc198e22d3b8fd7ec98304c95e68ee375be54589"
}, },
{ {
"ImportPath": "github.com/coreos/etcd/etcdserver/stats", "ImportPath": "github.com/coreos/etcd/etcdserver/stats",
"Comment": "v3.0.14", "Comment": "v3.0.17",
"Rev": "8a37349097a592db79ba3087f3cae9cd4b0af21c" "Rev": "cc198e22d3b8fd7ec98304c95e68ee375be54589"
}, },
{ {
"ImportPath": "github.com/coreos/etcd/integration", "ImportPath": "github.com/coreos/etcd/integration",
"Comment": "v3.0.14", "Comment": "v3.0.17",
"Rev": "8a37349097a592db79ba3087f3cae9cd4b0af21c" "Rev": "cc198e22d3b8fd7ec98304c95e68ee375be54589"
}, },
{ {
"ImportPath": "github.com/coreos/etcd/lease", "ImportPath": "github.com/coreos/etcd/lease",
"Comment": "v3.0.14", "Comment": "v3.0.17",
"Rev": "8a37349097a592db79ba3087f3cae9cd4b0af21c" "Rev": "cc198e22d3b8fd7ec98304c95e68ee375be54589"
}, },
{ {
"ImportPath": "github.com/coreos/etcd/lease/leasehttp", "ImportPath": "github.com/coreos/etcd/lease/leasehttp",
"Comment": "v3.0.14", "Comment": "v3.0.17",
"Rev": "8a37349097a592db79ba3087f3cae9cd4b0af21c" "Rev": "cc198e22d3b8fd7ec98304c95e68ee375be54589"
}, },
{ {
"ImportPath": "github.com/coreos/etcd/lease/leasepb", "ImportPath": "github.com/coreos/etcd/lease/leasepb",
"Comment": "v3.0.14", "Comment": "v3.0.17",
"Rev": "8a37349097a592db79ba3087f3cae9cd4b0af21c" "Rev": "cc198e22d3b8fd7ec98304c95e68ee375be54589"
}, },
{ {
"ImportPath": "github.com/coreos/etcd/mvcc", "ImportPath": "github.com/coreos/etcd/mvcc",
"Comment": "v3.0.14", "Comment": "v3.0.17",
"Rev": "8a37349097a592db79ba3087f3cae9cd4b0af21c" "Rev": "cc198e22d3b8fd7ec98304c95e68ee375be54589"
}, },
{ {
"ImportPath": "github.com/coreos/etcd/mvcc/backend", "ImportPath": "github.com/coreos/etcd/mvcc/backend",
"Comment": "v3.0.14", "Comment": "v3.0.17",
"Rev": "8a37349097a592db79ba3087f3cae9cd4b0af21c" "Rev": "cc198e22d3b8fd7ec98304c95e68ee375be54589"
}, },
{ {
"ImportPath": "github.com/coreos/etcd/mvcc/mvccpb", "ImportPath": "github.com/coreos/etcd/mvcc/mvccpb",
"Comment": "v3.0.14", "Comment": "v3.0.17",
"Rev": "8a37349097a592db79ba3087f3cae9cd4b0af21c" "Rev": "cc198e22d3b8fd7ec98304c95e68ee375be54589"
}, },
{ {
"ImportPath": "github.com/coreos/etcd/pkg/adt", "ImportPath": "github.com/coreos/etcd/pkg/adt",
"Comment": "v3.0.14", "Comment": "v3.0.17",
"Rev": "8a37349097a592db79ba3087f3cae9cd4b0af21c" "Rev": "cc198e22d3b8fd7ec98304c95e68ee375be54589"
}, },
{ {
"ImportPath": "github.com/coreos/etcd/pkg/contention", "ImportPath": "github.com/coreos/etcd/pkg/contention",
"Comment": "v3.0.14", "Comment": "v3.0.17",
"Rev": "8a37349097a592db79ba3087f3cae9cd4b0af21c" "Rev": "cc198e22d3b8fd7ec98304c95e68ee375be54589"
}, },
{ {
"ImportPath": "github.com/coreos/etcd/pkg/crc", "ImportPath": "github.com/coreos/etcd/pkg/crc",
"Comment": "v3.0.14", "Comment": "v3.0.17",
"Rev": "8a37349097a592db79ba3087f3cae9cd4b0af21c" "Rev": "cc198e22d3b8fd7ec98304c95e68ee375be54589"
}, },
{ {
"ImportPath": "github.com/coreos/etcd/pkg/fileutil", "ImportPath": "github.com/coreos/etcd/pkg/fileutil",
"Comment": "v3.0.14", "Comment": "v3.0.17",
"Rev": "8a37349097a592db79ba3087f3cae9cd4b0af21c" "Rev": "cc198e22d3b8fd7ec98304c95e68ee375be54589"
}, },
{ {
"ImportPath": "github.com/coreos/etcd/pkg/httputil", "ImportPath": "github.com/coreos/etcd/pkg/httputil",
"Comment": "v3.0.14", "Comment": "v3.0.17",
"Rev": "8a37349097a592db79ba3087f3cae9cd4b0af21c" "Rev": "cc198e22d3b8fd7ec98304c95e68ee375be54589"
}, },
{ {
"ImportPath": "github.com/coreos/etcd/pkg/idutil", "ImportPath": "github.com/coreos/etcd/pkg/idutil",
"Comment": "v3.0.14", "Comment": "v3.0.17",
"Rev": "8a37349097a592db79ba3087f3cae9cd4b0af21c" "Rev": "cc198e22d3b8fd7ec98304c95e68ee375be54589"
}, },
{ {
"ImportPath": "github.com/coreos/etcd/pkg/ioutil", "ImportPath": "github.com/coreos/etcd/pkg/ioutil",
"Comment": "v3.0.14", "Comment": "v3.0.17",
"Rev": "8a37349097a592db79ba3087f3cae9cd4b0af21c" "Rev": "cc198e22d3b8fd7ec98304c95e68ee375be54589"
}, },
{ {
"ImportPath": "github.com/coreos/etcd/pkg/logutil", "ImportPath": "github.com/coreos/etcd/pkg/logutil",
"Comment": "v3.0.14", "Comment": "v3.0.17",
"Rev": "8a37349097a592db79ba3087f3cae9cd4b0af21c" "Rev": "cc198e22d3b8fd7ec98304c95e68ee375be54589"
}, },
{ {
"ImportPath": "github.com/coreos/etcd/pkg/netutil", "ImportPath": "github.com/coreos/etcd/pkg/netutil",
"Comment": "v3.0.14", "Comment": "v3.0.17",
"Rev": "8a37349097a592db79ba3087f3cae9cd4b0af21c" "Rev": "cc198e22d3b8fd7ec98304c95e68ee375be54589"
}, },
{ {
"ImportPath": "github.com/coreos/etcd/pkg/pathutil", "ImportPath": "github.com/coreos/etcd/pkg/pathutil",
"Comment": "v3.0.14", "Comment": "v3.0.17",
"Rev": "8a37349097a592db79ba3087f3cae9cd4b0af21c" "Rev": "cc198e22d3b8fd7ec98304c95e68ee375be54589"
}, },
{ {
"ImportPath": "github.com/coreos/etcd/pkg/pbutil", "ImportPath": "github.com/coreos/etcd/pkg/pbutil",
"Comment": "v3.0.14", "Comment": "v3.0.17",
"Rev": "8a37349097a592db79ba3087f3cae9cd4b0af21c" "Rev": "cc198e22d3b8fd7ec98304c95e68ee375be54589"
}, },
{ {
"ImportPath": "github.com/coreos/etcd/pkg/runtime", "ImportPath": "github.com/coreos/etcd/pkg/runtime",
"Comment": "v3.0.14", "Comment": "v3.0.17",
"Rev": "8a37349097a592db79ba3087f3cae9cd4b0af21c" "Rev": "cc198e22d3b8fd7ec98304c95e68ee375be54589"
}, },
{ {
"ImportPath": "github.com/coreos/etcd/pkg/schedule", "ImportPath": "github.com/coreos/etcd/pkg/schedule",
"Comment": "v3.0.14", "Comment": "v3.0.17",
"Rev": "8a37349097a592db79ba3087f3cae9cd4b0af21c" "Rev": "cc198e22d3b8fd7ec98304c95e68ee375be54589"
}, },
{ {
"ImportPath": "github.com/coreos/etcd/pkg/testutil", "ImportPath": "github.com/coreos/etcd/pkg/testutil",
"Comment": "v3.0.14", "Comment": "v3.0.17",
"Rev": "8a37349097a592db79ba3087f3cae9cd4b0af21c" "Rev": "cc198e22d3b8fd7ec98304c95e68ee375be54589"
}, },
{ {
"ImportPath": "github.com/coreos/etcd/pkg/tlsutil", "ImportPath": "github.com/coreos/etcd/pkg/tlsutil",
"Comment": "v3.0.14", "Comment": "v3.0.17",
"Rev": "8a37349097a592db79ba3087f3cae9cd4b0af21c" "Rev": "cc198e22d3b8fd7ec98304c95e68ee375be54589"
}, },
{ {
"ImportPath": "github.com/coreos/etcd/pkg/transport", "ImportPath": "github.com/coreos/etcd/pkg/transport",
"Comment": "v3.0.14", "Comment": "v3.0.17",
"Rev": "8a37349097a592db79ba3087f3cae9cd4b0af21c" "Rev": "cc198e22d3b8fd7ec98304c95e68ee375be54589"
}, },
{ {
"ImportPath": "github.com/coreos/etcd/pkg/types", "ImportPath": "github.com/coreos/etcd/pkg/types",
"Comment": "v3.0.14", "Comment": "v3.0.17",
"Rev": "8a37349097a592db79ba3087f3cae9cd4b0af21c" "Rev": "cc198e22d3b8fd7ec98304c95e68ee375be54589"
}, },
{ {
"ImportPath": "github.com/coreos/etcd/pkg/wait", "ImportPath": "github.com/coreos/etcd/pkg/wait",
"Comment": "v3.0.14", "Comment": "v3.0.17",
"Rev": "8a37349097a592db79ba3087f3cae9cd4b0af21c" "Rev": "cc198e22d3b8fd7ec98304c95e68ee375be54589"
}, },
{ {
"ImportPath": "github.com/coreos/etcd/raft", "ImportPath": "github.com/coreos/etcd/raft",
"Comment": "v3.0.14", "Comment": "v3.0.17",
"Rev": "8a37349097a592db79ba3087f3cae9cd4b0af21c" "Rev": "cc198e22d3b8fd7ec98304c95e68ee375be54589"
}, },
{ {
"ImportPath": "github.com/coreos/etcd/raft/raftpb", "ImportPath": "github.com/coreos/etcd/raft/raftpb",
"Comment": "v3.0.14", "Comment": "v3.0.17",
"Rev": "8a37349097a592db79ba3087f3cae9cd4b0af21c" "Rev": "cc198e22d3b8fd7ec98304c95e68ee375be54589"
}, },
{ {
"ImportPath": "github.com/coreos/etcd/rafthttp", "ImportPath": "github.com/coreos/etcd/rafthttp",
"Comment": "v3.0.14", "Comment": "v3.0.17",
"Rev": "8a37349097a592db79ba3087f3cae9cd4b0af21c" "Rev": "cc198e22d3b8fd7ec98304c95e68ee375be54589"
}, },
{ {
"ImportPath": "github.com/coreos/etcd/snap", "ImportPath": "github.com/coreos/etcd/snap",
"Comment": "v3.0.14", "Comment": "v3.0.17",
"Rev": "8a37349097a592db79ba3087f3cae9cd4b0af21c" "Rev": "cc198e22d3b8fd7ec98304c95e68ee375be54589"
}, },
{ {
"ImportPath": "github.com/coreos/etcd/snap/snappb", "ImportPath": "github.com/coreos/etcd/snap/snappb",
"Comment": "v3.0.14", "Comment": "v3.0.17",
"Rev": "8a37349097a592db79ba3087f3cae9cd4b0af21c" "Rev": "cc198e22d3b8fd7ec98304c95e68ee375be54589"
}, },
{ {
"ImportPath": "github.com/coreos/etcd/store", "ImportPath": "github.com/coreos/etcd/store",
"Comment": "v3.0.14", "Comment": "v3.0.17",
"Rev": "8a37349097a592db79ba3087f3cae9cd4b0af21c" "Rev": "cc198e22d3b8fd7ec98304c95e68ee375be54589"
}, },
{ {
"ImportPath": "github.com/coreos/etcd/version", "ImportPath": "github.com/coreos/etcd/version",
"Comment": "v3.0.14", "Comment": "v3.0.17",
"Rev": "8a37349097a592db79ba3087f3cae9cd4b0af21c" "Rev": "cc198e22d3b8fd7ec98304c95e68ee375be54589"
}, },
{ {
"ImportPath": "github.com/coreos/etcd/wal", "ImportPath": "github.com/coreos/etcd/wal",
"Comment": "v3.0.14", "Comment": "v3.0.17",
"Rev": "8a37349097a592db79ba3087f3cae9cd4b0af21c" "Rev": "cc198e22d3b8fd7ec98304c95e68ee375be54589"
}, },
{ {
"ImportPath": "github.com/coreos/etcd/wal/walpb", "ImportPath": "github.com/coreos/etcd/wal/walpb",
"Comment": "v3.0.14", "Comment": "v3.0.17",
"Rev": "8a37349097a592db79ba3087f3cae9cd4b0af21c" "Rev": "cc198e22d3b8fd7ec98304c95e68ee375be54589"
}, },
{ {
"ImportPath": "github.com/coreos/go-oidc/http", "ImportPath": "github.com/coreos/go-oidc/http",

View File

@ -26,58 +26,58 @@
}, },
{ {
"ImportPath": "github.com/coreos/etcd/auth/authpb", "ImportPath": "github.com/coreos/etcd/auth/authpb",
"Comment": "v3.0.14", "Comment": "v3.0.17",
"Rev": "8a37349097a592db79ba3087f3cae9cd4b0af21c" "Rev": "cc198e22d3b8fd7ec98304c95e68ee375be54589"
}, },
{ {
"ImportPath": "github.com/coreos/etcd/client", "ImportPath": "github.com/coreos/etcd/client",
"Comment": "v3.0.14", "Comment": "v3.0.17",
"Rev": "8a37349097a592db79ba3087f3cae9cd4b0af21c" "Rev": "cc198e22d3b8fd7ec98304c95e68ee375be54589"
}, },
{ {
"ImportPath": "github.com/coreos/etcd/clientv3", "ImportPath": "github.com/coreos/etcd/clientv3",
"Comment": "v3.0.14", "Comment": "v3.0.17",
"Rev": "8a37349097a592db79ba3087f3cae9cd4b0af21c" "Rev": "cc198e22d3b8fd7ec98304c95e68ee375be54589"
}, },
{ {
"ImportPath": "github.com/coreos/etcd/etcdserver/api/v3rpc/rpctypes", "ImportPath": "github.com/coreos/etcd/etcdserver/api/v3rpc/rpctypes",
"Comment": "v3.0.14", "Comment": "v3.0.17",
"Rev": "8a37349097a592db79ba3087f3cae9cd4b0af21c" "Rev": "cc198e22d3b8fd7ec98304c95e68ee375be54589"
}, },
{ {
"ImportPath": "github.com/coreos/etcd/etcdserver/etcdserverpb", "ImportPath": "github.com/coreos/etcd/etcdserver/etcdserverpb",
"Comment": "v3.0.14", "Comment": "v3.0.17",
"Rev": "8a37349097a592db79ba3087f3cae9cd4b0af21c" "Rev": "cc198e22d3b8fd7ec98304c95e68ee375be54589"
}, },
{ {
"ImportPath": "github.com/coreos/etcd/mvcc/mvccpb", "ImportPath": "github.com/coreos/etcd/mvcc/mvccpb",
"Comment": "v3.0.14", "Comment": "v3.0.17",
"Rev": "8a37349097a592db79ba3087f3cae9cd4b0af21c" "Rev": "cc198e22d3b8fd7ec98304c95e68ee375be54589"
}, },
{ {
"ImportPath": "github.com/coreos/etcd/pkg/fileutil", "ImportPath": "github.com/coreos/etcd/pkg/fileutil",
"Comment": "v3.0.14", "Comment": "v3.0.17",
"Rev": "8a37349097a592db79ba3087f3cae9cd4b0af21c" "Rev": "cc198e22d3b8fd7ec98304c95e68ee375be54589"
}, },
{ {
"ImportPath": "github.com/coreos/etcd/pkg/pathutil", "ImportPath": "github.com/coreos/etcd/pkg/pathutil",
"Comment": "v3.0.14", "Comment": "v3.0.17",
"Rev": "8a37349097a592db79ba3087f3cae9cd4b0af21c" "Rev": "cc198e22d3b8fd7ec98304c95e68ee375be54589"
}, },
{ {
"ImportPath": "github.com/coreos/etcd/pkg/tlsutil", "ImportPath": "github.com/coreos/etcd/pkg/tlsutil",
"Comment": "v3.0.14", "Comment": "v3.0.17",
"Rev": "8a37349097a592db79ba3087f3cae9cd4b0af21c" "Rev": "cc198e22d3b8fd7ec98304c95e68ee375be54589"
}, },
{ {
"ImportPath": "github.com/coreos/etcd/pkg/transport", "ImportPath": "github.com/coreos/etcd/pkg/transport",
"Comment": "v3.0.14", "Comment": "v3.0.17",
"Rev": "8a37349097a592db79ba3087f3cae9cd4b0af21c" "Rev": "cc198e22d3b8fd7ec98304c95e68ee375be54589"
}, },
{ {
"ImportPath": "github.com/coreos/etcd/pkg/types", "ImportPath": "github.com/coreos/etcd/pkg/types",
"Comment": "v3.0.14", "Comment": "v3.0.17",
"Rev": "8a37349097a592db79ba3087f3cae9cd4b0af21c" "Rev": "cc198e22d3b8fd7ec98304c95e68ee375be54589"
}, },
{ {
"ImportPath": "github.com/coreos/go-systemd/daemon", "ImportPath": "github.com/coreos/go-systemd/daemon",

View File

@ -26,58 +26,58 @@
}, },
{ {
"ImportPath": "github.com/coreos/etcd/auth/authpb", "ImportPath": "github.com/coreos/etcd/auth/authpb",
"Comment": "v3.0.14", "Comment": "v3.0.17",
"Rev": "8a37349097a592db79ba3087f3cae9cd4b0af21c" "Rev": "cc198e22d3b8fd7ec98304c95e68ee375be54589"
}, },
{ {
"ImportPath": "github.com/coreos/etcd/client", "ImportPath": "github.com/coreos/etcd/client",
"Comment": "v3.0.14", "Comment": "v3.0.17",
"Rev": "8a37349097a592db79ba3087f3cae9cd4b0af21c" "Rev": "cc198e22d3b8fd7ec98304c95e68ee375be54589"
}, },
{ {
"ImportPath": "github.com/coreos/etcd/clientv3", "ImportPath": "github.com/coreos/etcd/clientv3",
"Comment": "v3.0.14", "Comment": "v3.0.17",
"Rev": "8a37349097a592db79ba3087f3cae9cd4b0af21c" "Rev": "cc198e22d3b8fd7ec98304c95e68ee375be54589"
}, },
{ {
"ImportPath": "github.com/coreos/etcd/etcdserver/api/v3rpc/rpctypes", "ImportPath": "github.com/coreos/etcd/etcdserver/api/v3rpc/rpctypes",
"Comment": "v3.0.14", "Comment": "v3.0.17",
"Rev": "8a37349097a592db79ba3087f3cae9cd4b0af21c" "Rev": "cc198e22d3b8fd7ec98304c95e68ee375be54589"
}, },
{ {
"ImportPath": "github.com/coreos/etcd/etcdserver/etcdserverpb", "ImportPath": "github.com/coreos/etcd/etcdserver/etcdserverpb",
"Comment": "v3.0.14", "Comment": "v3.0.17",
"Rev": "8a37349097a592db79ba3087f3cae9cd4b0af21c" "Rev": "cc198e22d3b8fd7ec98304c95e68ee375be54589"
}, },
{ {
"ImportPath": "github.com/coreos/etcd/mvcc/mvccpb", "ImportPath": "github.com/coreos/etcd/mvcc/mvccpb",
"Comment": "v3.0.14", "Comment": "v3.0.17",
"Rev": "8a37349097a592db79ba3087f3cae9cd4b0af21c" "Rev": "cc198e22d3b8fd7ec98304c95e68ee375be54589"
}, },
{ {
"ImportPath": "github.com/coreos/etcd/pkg/fileutil", "ImportPath": "github.com/coreos/etcd/pkg/fileutil",
"Comment": "v3.0.14", "Comment": "v3.0.17",
"Rev": "8a37349097a592db79ba3087f3cae9cd4b0af21c" "Rev": "cc198e22d3b8fd7ec98304c95e68ee375be54589"
}, },
{ {
"ImportPath": "github.com/coreos/etcd/pkg/pathutil", "ImportPath": "github.com/coreos/etcd/pkg/pathutil",
"Comment": "v3.0.14", "Comment": "v3.0.17",
"Rev": "8a37349097a592db79ba3087f3cae9cd4b0af21c" "Rev": "cc198e22d3b8fd7ec98304c95e68ee375be54589"
}, },
{ {
"ImportPath": "github.com/coreos/etcd/pkg/tlsutil", "ImportPath": "github.com/coreos/etcd/pkg/tlsutil",
"Comment": "v3.0.14", "Comment": "v3.0.17",
"Rev": "8a37349097a592db79ba3087f3cae9cd4b0af21c" "Rev": "cc198e22d3b8fd7ec98304c95e68ee375be54589"
}, },
{ {
"ImportPath": "github.com/coreos/etcd/pkg/transport", "ImportPath": "github.com/coreos/etcd/pkg/transport",
"Comment": "v3.0.14", "Comment": "v3.0.17",
"Rev": "8a37349097a592db79ba3087f3cae9cd4b0af21c" "Rev": "cc198e22d3b8fd7ec98304c95e68ee375be54589"
}, },
{ {
"ImportPath": "github.com/coreos/etcd/pkg/types", "ImportPath": "github.com/coreos/etcd/pkg/types",
"Comment": "v3.0.14", "Comment": "v3.0.17",
"Rev": "8a37349097a592db79ba3087f3cae9cd4b0af21c" "Rev": "cc198e22d3b8fd7ec98304c95e68ee375be54589"
}, },
{ {
"ImportPath": "github.com/coreos/go-systemd/daemon", "ImportPath": "github.com/coreos/go-systemd/daemon",

View File

@ -50,7 +50,7 @@ INSTANCE_PREFIX="${INSTANCE_PREFIX:-}"
SERVICE_CLUSTER_IP_RANGE="${SERVICE_CLUSTER_IP_RANGE:-}" SERVICE_CLUSTER_IP_RANGE="${SERVICE_CLUSTER_IP_RANGE:-}"
# Etcd related variables. # Etcd related variables.
ETCD_IMAGE="${ETCD_IMAGE:-3.0.14-alpha.1}" ETCD_IMAGE="${ETCD_IMAGE:-3.0.17-alpha.1}"
ETCD_VERSION="${ETCD_VERSION:-}" ETCD_VERSION="${ETCD_VERSION:-}"
# Controller-manager related variables. # Controller-manager related variables.

1
vendor/BUILD vendored
View File

@ -1609,6 +1609,7 @@ go_library(
deps = [ deps = [
"//vendor:github.com/coreos/etcd/etcdserver/etcdserverpb", "//vendor:github.com/coreos/etcd/etcdserver/etcdserverpb",
"//vendor:github.com/coreos/etcd/lease", "//vendor:github.com/coreos/etcd/lease",
"//vendor:golang.org/x/net/context",
], ],
) )

View File

@ -143,9 +143,6 @@ func (l *lessor) Grant(ctx context.Context, ttl int64) (*LeaseGrantResponse, err
if isHaltErr(cctx, err) { if isHaltErr(cctx, err) {
return nil, toErr(ctx, err) return nil, toErr(ctx, err)
} }
if nerr := l.newStream(); nerr != nil {
return nil, nerr
}
} }
} }
@ -164,9 +161,6 @@ func (l *lessor) Revoke(ctx context.Context, id LeaseID) (*LeaseRevokeResponse,
if isHaltErr(ctx, err) { if isHaltErr(ctx, err) {
return nil, toErr(ctx, err) return nil, toErr(ctx, err)
} }
if nerr := l.newStream(); nerr != nil {
return nil, nerr
}
} }
} }
@ -213,10 +207,6 @@ func (l *lessor) KeepAliveOnce(ctx context.Context, id LeaseID) (*LeaseKeepAlive
if isHaltErr(ctx, err) { if isHaltErr(ctx, err) {
return nil, toErr(ctx, err) return nil, toErr(ctx, err)
} }
if nerr := l.newStream(); nerr != nil {
return nil, nerr
}
} }
} }
@ -312,10 +302,23 @@ func (l *lessor) recvKeepAliveLoop() {
// resetRecv opens a new lease stream and starts sending LeaseKeepAliveRequests // resetRecv opens a new lease stream and starts sending LeaseKeepAliveRequests
func (l *lessor) resetRecv() (pb.Lease_LeaseKeepAliveClient, error) { func (l *lessor) resetRecv() (pb.Lease_LeaseKeepAliveClient, error) {
if err := l.newStream(); err != nil { sctx, cancel := context.WithCancel(l.stopCtx)
stream, err := l.remote.LeaseKeepAlive(sctx, grpc.FailFast(false))
if err = toErr(sctx, err); err != nil {
cancel()
return nil, err return nil, err
} }
stream := l.getKeepAliveStream()
l.mu.Lock()
defer l.mu.Unlock()
if l.stream != nil && l.streamCancel != nil {
l.stream.CloseSend()
l.streamCancel()
}
l.streamCancel = cancel
l.stream = stream
go l.sendKeepAliveLoop(stream) go l.sendKeepAliveLoop(stream)
return stream, nil return stream, nil
} }
@ -411,32 +414,6 @@ func (l *lessor) sendKeepAliveLoop(stream pb.Lease_LeaseKeepAliveClient) {
} }
} }
func (l *lessor) getKeepAliveStream() pb.Lease_LeaseKeepAliveClient {
l.mu.Lock()
defer l.mu.Unlock()
return l.stream
}
func (l *lessor) newStream() error {
sctx, cancel := context.WithCancel(l.stopCtx)
stream, err := l.remote.LeaseKeepAlive(sctx, grpc.FailFast(false))
if err != nil {
cancel()
return toErr(sctx, err)
}
l.mu.Lock()
defer l.mu.Unlock()
if l.stream != nil && l.streamCancel != nil {
l.stream.CloseSend()
l.streamCancel()
}
l.streamCancel = cancel
l.stream = stream
return nil
}
func (ka *keepAlive) Close() { func (ka *keepAlive) Close() {
close(ka.donec) close(ka.donec)
for _, ch := range ka.chs { for _, ch := range ka.chs {

View File

@ -215,14 +215,15 @@ func WithPrefix() OpOption {
} }
} }
// WithRange specifies the range of 'Get' or 'Delete' requests. // WithRange specifies the range of 'Get', 'Delete', 'Watch' requests.
// For example, 'Get' requests with 'WithRange(end)' returns // For example, 'Get' requests with 'WithRange(end)' returns
// the keys in the range [key, end). // the keys in the range [key, end).
// endKey must be lexicographically greater than start key.
func WithRange(endKey string) OpOption { func WithRange(endKey string) OpOption {
return func(op *Op) { op.end = []byte(endKey) } return func(op *Op) { op.end = []byte(endKey) }
} }
// WithFromKey specifies the range of 'Get' or 'Delete' requests // WithFromKey specifies the range of 'Get', 'Delete', 'Watch' requests
// to be equal or greater than the key in the argument. // to be equal or greater than the key in the argument.
func WithFromKey() OpOption { return WithRange("\x00") } func WithFromKey() OpOption { return WithRange("\x00") }

View File

@ -125,8 +125,6 @@ type watchGrpcStream struct {
reqc chan *watchRequest reqc chan *watchRequest
// respc receives data from the watch client // respc receives data from the watch client
respc chan *pb.WatchResponse respc chan *pb.WatchResponse
// stopc is sent to the main goroutine to stop all processing
stopc chan struct{}
// donec closes to broadcast shutdown // donec closes to broadcast shutdown
donec chan struct{} donec chan struct{}
// errc transmits errors from grpc Recv to the watch stream reconn logic // errc transmits errors from grpc Recv to the watch stream reconn logic
@ -204,7 +202,6 @@ func (w *watcher) newWatcherGrpcStream(inctx context.Context) *watchGrpcStream {
respc: make(chan *pb.WatchResponse), respc: make(chan *pb.WatchResponse),
reqc: make(chan *watchRequest), reqc: make(chan *watchRequest),
stopc: make(chan struct{}),
donec: make(chan struct{}), donec: make(chan struct{}),
errc: make(chan error, 1), errc: make(chan error, 1),
closingc: make(chan *watcherStream), closingc: make(chan *watcherStream),
@ -300,7 +297,7 @@ func (w *watcher) Close() (err error) {
} }
func (w *watchGrpcStream) Close() (err error) { func (w *watchGrpcStream) Close() (err error) {
close(w.stopc) w.cancel()
<-w.donec <-w.donec
select { select {
case err = <-w.errc: case err = <-w.errc:
@ -347,7 +344,7 @@ func (w *watchGrpcStream) closeSubstream(ws *watcherStream) {
// close subscriber's channel // close subscriber's channel
if closeErr := w.closeErr; closeErr != nil && ws.initReq.ctx.Err() == nil { if closeErr := w.closeErr; closeErr != nil && ws.initReq.ctx.Err() == nil {
go w.sendCloseSubstream(ws, &WatchResponse{closeErr: w.closeErr}) go w.sendCloseSubstream(ws, &WatchResponse{closeErr: w.closeErr})
} else { } else if ws.outc != nil {
close(ws.outc) close(ws.outc)
} }
if ws.id != -1 { if ws.id != -1 {
@ -472,7 +469,7 @@ func (w *watchGrpcStream) run() {
wc.Send(ws.initReq.toPB()) wc.Send(ws.initReq.toPB())
} }
cancelSet = make(map[int64]struct{}) cancelSet = make(map[int64]struct{})
case <-w.stopc: case <-w.ctx.Done():
return return
case ws := <-w.closingc: case ws := <-w.closingc:
w.closeSubstream(ws) w.closeSubstream(ws)
@ -597,6 +594,8 @@ func (w *watchGrpcStream) serveSubstream(ws *watcherStream, resumec chan struct{
nextRev = wr.Events[len(wr.Events)-1].Kv.ModRevision + 1 nextRev = wr.Events[len(wr.Events)-1].Kv.ModRevision + 1
} }
ws.initReq.rev = nextRev ws.initReq.rev = nextRev
case <-w.ctx.Done():
return
case <-ws.initReq.ctx.Done(): case <-ws.initReq.ctx.Done():
return return
case <-resumec: case <-resumec:
@ -608,34 +607,78 @@ func (w *watchGrpcStream) serveSubstream(ws *watcherStream, resumec chan struct{
} }
func (w *watchGrpcStream) newWatchClient() (pb.Watch_WatchClient, error) { func (w *watchGrpcStream) newWatchClient() (pb.Watch_WatchClient, error) {
// connect to grpc stream // mark all substreams as resuming
close(w.resumec)
w.resumec = make(chan struct{})
w.joinSubstreams()
for _, ws := range w.substreams {
ws.id = -1
w.resuming = append(w.resuming, ws)
}
// strip out nils, if any
var resuming []*watcherStream
for _, ws := range w.resuming {
if ws != nil {
resuming = append(resuming, ws)
}
}
w.resuming = resuming
w.substreams = make(map[int64]*watcherStream)
// connect to grpc stream while accepting watcher cancelation
stopc := make(chan struct{})
donec := w.waitCancelSubstreams(stopc)
wc, err := w.openWatchClient() wc, err := w.openWatchClient()
close(stopc)
<-donec
// serve all non-closing streams, even if there's a client error
// so that the teardown path can shutdown the streams as expected.
for _, ws := range w.resuming {
if ws.closing {
continue
}
ws.donec = make(chan struct{})
go w.serveSubstream(ws, w.resumec)
}
if err != nil { if err != nil {
return nil, v3rpc.Error(err) return nil, v3rpc.Error(err)
} }
// mark all substreams as resuming
if len(w.substreams)+len(w.resuming) > 0 {
close(w.resumec)
w.resumec = make(chan struct{})
w.joinSubstreams()
for _, ws := range w.substreams {
ws.id = -1
w.resuming = append(w.resuming, ws)
}
for _, ws := range w.resuming {
if ws == nil || ws.closing {
continue
}
ws.donec = make(chan struct{})
go w.serveSubstream(ws, w.resumec)
}
}
w.substreams = make(map[int64]*watcherStream)
// receive data from new grpc stream // receive data from new grpc stream
go w.serveWatchClient(wc) go w.serveWatchClient(wc)
return wc, nil return wc, nil
} }
func (w *watchGrpcStream) waitCancelSubstreams(stopc <-chan struct{}) <-chan struct{} {
var wg sync.WaitGroup
wg.Add(len(w.resuming))
donec := make(chan struct{})
for i := range w.resuming {
go func(ws *watcherStream) {
defer wg.Done()
if ws.closing {
return
}
select {
case <-ws.initReq.ctx.Done():
// closed ws will be removed from resuming
ws.closing = true
close(ws.outc)
ws.outc = nil
go func() { w.closingc <- ws }()
case <-stopc:
}
}(w.resuming[i])
}
go func() {
defer close(donec)
wg.Wait()
}()
return donec
}
// joinSubstream waits for all substream goroutines to complete // joinSubstream waits for all substream goroutines to complete
func (w *watchGrpcStream) joinSubstreams() { func (w *watchGrpcStream) joinSubstreams() {
for _, ws := range w.substreams { for _, ws := range w.substreams {
@ -652,9 +695,9 @@ func (w *watchGrpcStream) joinSubstreams() {
func (w *watchGrpcStream) openWatchClient() (ws pb.Watch_WatchClient, err error) { func (w *watchGrpcStream) openWatchClient() (ws pb.Watch_WatchClient, err error) {
for { for {
select { select {
case <-w.stopc: case <-w.ctx.Done():
if err == nil { if err == nil {
return nil, context.Canceled return nil, w.ctx.Err()
} }
return nil, err return nil, err
default: default:

View File

@ -73,14 +73,14 @@ func (ls *LeaseServer) LeaseKeepAlive(stream pb.Lease_LeaseKeepAliveServer) erro
resp := &pb.LeaseKeepAliveResponse{ID: req.ID, Header: &pb.ResponseHeader{}} resp := &pb.LeaseKeepAliveResponse{ID: req.ID, Header: &pb.ResponseHeader{}}
ls.hdr.fill(resp.Header) ls.hdr.fill(resp.Header)
ttl, err := ls.le.LeaseRenew(lease.LeaseID(req.ID)) ttl, err := ls.le.LeaseRenew(stream.Context(), lease.LeaseID(req.ID))
if err == lease.ErrLeaseNotFound { if err == lease.ErrLeaseNotFound {
err = nil err = nil
ttl = 0 ttl = 0
} }
if err != nil { if err != nil {
return err return togRPCError(err)
} }
resp.TTL = ttl resp.TTL = ttl

View File

@ -49,9 +49,13 @@ var (
ErrGRPCRoleNotGranted = grpc.Errorf(codes.FailedPrecondition, "etcdserver: role is not granted to the user") ErrGRPCRoleNotGranted = grpc.Errorf(codes.FailedPrecondition, "etcdserver: role is not granted to the user")
ErrGRPCPermissionNotGranted = grpc.Errorf(codes.FailedPrecondition, "etcdserver: permission is not granted to the role") ErrGRPCPermissionNotGranted = grpc.Errorf(codes.FailedPrecondition, "etcdserver: permission is not granted to the role")
ErrGRPCNoLeader = grpc.Errorf(codes.Unavailable, "etcdserver: no leader") ErrGRPCNoLeader = grpc.Errorf(codes.Unavailable, "etcdserver: no leader")
ErrGRPCNotCapable = grpc.Errorf(codes.Unavailable, "etcdserver: not capable") ErrGRPCNotCapable = grpc.Errorf(codes.Unavailable, "etcdserver: not capable")
ErrGRPCStopped = grpc.Errorf(codes.Unavailable, "etcdserver: server stopped") ErrGRPCStopped = grpc.Errorf(codes.Unavailable, "etcdserver: server stopped")
ErrGRPCTimeout = grpc.Errorf(codes.Unavailable, "etcdserver: request timed out")
ErrGRPCTimeoutDueToLeaderFail = grpc.Errorf(codes.Unavailable, "etcdserver: request timed out, possibly due to previous leader failure")
ErrGRPCTimeoutDueToConnectionLost = grpc.Errorf(codes.Unavailable, "etcdserver: request timed out, possibly due to connection lost")
ErrGRPCUnhealthy = grpc.Errorf(codes.Unavailable, "etcdserver: unhealthy cluster")
errStringToError = map[string]error{ errStringToError = map[string]error{
grpc.ErrorDesc(ErrGRPCEmptyKey): ErrGRPCEmptyKey, grpc.ErrorDesc(ErrGRPCEmptyKey): ErrGRPCEmptyKey,
@ -82,9 +86,13 @@ var (
grpc.ErrorDesc(ErrGRPCRoleNotGranted): ErrGRPCRoleNotGranted, grpc.ErrorDesc(ErrGRPCRoleNotGranted): ErrGRPCRoleNotGranted,
grpc.ErrorDesc(ErrGRPCPermissionNotGranted): ErrGRPCPermissionNotGranted, grpc.ErrorDesc(ErrGRPCPermissionNotGranted): ErrGRPCPermissionNotGranted,
grpc.ErrorDesc(ErrGRPCNoLeader): ErrGRPCNoLeader, grpc.ErrorDesc(ErrGRPCNoLeader): ErrGRPCNoLeader,
grpc.ErrorDesc(ErrGRPCNotCapable): ErrGRPCNotCapable, grpc.ErrorDesc(ErrGRPCNotCapable): ErrGRPCNotCapable,
grpc.ErrorDesc(ErrGRPCStopped): ErrGRPCStopped, grpc.ErrorDesc(ErrGRPCStopped): ErrGRPCStopped,
grpc.ErrorDesc(ErrGRPCTimeout): ErrGRPCTimeout,
grpc.ErrorDesc(ErrGRPCTimeoutDueToLeaderFail): ErrGRPCTimeoutDueToLeaderFail,
grpc.ErrorDesc(ErrGRPCTimeoutDueToConnectionLost): ErrGRPCTimeoutDueToConnectionLost,
grpc.ErrorDesc(ErrGRPCUnhealthy): ErrGRPCUnhealthy,
} }
// client-side error // client-side error
@ -116,9 +124,13 @@ var (
ErrRoleNotGranted = Error(ErrGRPCRoleNotGranted) ErrRoleNotGranted = Error(ErrGRPCRoleNotGranted)
ErrPermissionNotGranted = Error(ErrGRPCPermissionNotGranted) ErrPermissionNotGranted = Error(ErrGRPCPermissionNotGranted)
ErrNoLeader = Error(ErrGRPCNoLeader) ErrNoLeader = Error(ErrGRPCNoLeader)
ErrNotCapable = Error(ErrGRPCNotCapable) ErrNotCapable = Error(ErrGRPCNotCapable)
ErrStopped = Error(ErrGRPCStopped) ErrStopped = Error(ErrGRPCStopped)
ErrTimeout = Error(ErrGRPCTimeout)
ErrTimeoutDueToLeaderFail = Error(ErrGRPCTimeoutDueToLeaderFail)
ErrTimeoutDueToConnectionLost = Error(ErrGRPCTimeoutDueToConnectionLost)
ErrUnhealthy = Error(ErrGRPCUnhealthy)
) )
// EtcdError defines gRPC server errors. // EtcdError defines gRPC server errors.

View File

@ -38,6 +38,17 @@ func togRPCError(err error) error {
case etcdserver.ErrNoSpace: case etcdserver.ErrNoSpace:
return rpctypes.ErrGRPCNoSpace return rpctypes.ErrGRPCNoSpace
case etcdserver.ErrNoLeader:
return rpctypes.ErrGRPCNoLeader
case etcdserver.ErrStopped:
return rpctypes.ErrGRPCStopped
case etcdserver.ErrTimeout:
return rpctypes.ErrGRPCTimeout
case etcdserver.ErrTimeoutDueToLeaderFail:
return rpctypes.ErrGRPCTimeoutDueToLeaderFail
case etcdserver.ErrTimeoutDueToConnectionLost:
return rpctypes.ErrGRPCTimeoutDueToConnectionLost
case auth.ErrRootUserNotExist: case auth.ErrRootUserNotExist:
return rpctypes.ErrGRPCRootUserNotExist return rpctypes.ErrGRPCRootUserNotExist
case auth.ErrRootRoleNotExist: case auth.ErrRootRoleNotExist:

View File

@ -18,6 +18,7 @@ import (
"encoding/json" "encoding/json"
"expvar" "expvar"
"fmt" "fmt"
"math"
"math/rand" "math/rand"
"net/http" "net/http"
"os" "os"
@ -398,11 +399,9 @@ func NewServer(cfg *ServerConfig) (srv *EtcdServer, err error) {
srv.applyV2 = &applierV2store{store: srv.store, cluster: srv.cluster} srv.applyV2 = &applierV2store{store: srv.store, cluster: srv.cluster}
srv.be = be srv.be = be
srv.lessor = lease.NewLessor(srv.be) minTTL := time.Duration((3*cfg.ElectionTicks)/2) * time.Duration(cfg.TickMs) * time.Millisecond
srv.lessor = lease.NewLessor(srv.be, int64(math.Ceil(minTTL.Seconds())))
// always recover lessor before kv. When we recover the mvcc.KV it will reattach keys to its leases.
// If we recover mvcc.KV first, it will attach the keys to the wrong lessor before it recovers.
srv.lessor = lease.NewLessor(srv.be)
srv.kv = mvcc.New(srv.be, srv.lessor, &srv.consistIndex) srv.kv = mvcc.New(srv.be, srv.lessor, &srv.consistIndex)
if beExist { if beExist {
kvindex := srv.kv.ConsistentIndex() kvindex := srv.kv.ConsistentIndex()

View File

@ -20,6 +20,7 @@ import (
"time" "time"
pb "github.com/coreos/etcd/etcdserver/etcdserverpb" pb "github.com/coreos/etcd/etcdserver/etcdserverpb"
"github.com/coreos/etcd/etcdserver/membership"
"github.com/coreos/etcd/lease" "github.com/coreos/etcd/lease"
"github.com/coreos/etcd/lease/leasehttp" "github.com/coreos/etcd/lease/leasehttp"
"github.com/coreos/etcd/mvcc" "github.com/coreos/etcd/mvcc"
@ -54,7 +55,7 @@ type Lessor interface {
// LeaseRenew renews the lease with given ID. The renewed TTL is returned. Or an error // LeaseRenew renews the lease with given ID. The renewed TTL is returned. Or an error
// is returned. // is returned.
LeaseRenew(id lease.LeaseID) (int64, error) LeaseRenew(ctx context.Context, id lease.LeaseID) (int64, error)
} }
type Authenticator interface { type Authenticator interface {
@ -218,7 +219,7 @@ func (s *EtcdServer) LeaseRevoke(ctx context.Context, r *pb.LeaseRevokeRequest)
return result.resp.(*pb.LeaseRevokeResponse), nil return result.resp.(*pb.LeaseRevokeResponse), nil
} }
func (s *EtcdServer) LeaseRenew(id lease.LeaseID) (int64, error) { func (s *EtcdServer) LeaseRenew(ctx context.Context, id lease.LeaseID) (int64, error) {
ttl, err := s.lessor.Renew(id) ttl, err := s.lessor.Renew(id)
if err == nil { if err == nil {
return ttl, nil return ttl, nil
@ -228,29 +229,44 @@ func (s *EtcdServer) LeaseRenew(id lease.LeaseID) (int64, error) {
} }
// renewals don't go through raft; forward to leader manually // renewals don't go through raft; forward to leader manually
cctx, cancel := context.WithTimeout(ctx, s.Cfg.ReqTimeout())
defer cancel()
// renewals don't go through raft; forward to leader manually
for cctx.Err() == nil && err != nil {
leader, lerr := s.waitLeader(cctx)
if lerr != nil {
return -1, lerr
}
for _, url := range leader.PeerURLs {
lurl := url + "/leases"
ttl, err = leasehttp.RenewHTTP(cctx, id, lurl, s.peerRt)
if err == nil || err == lease.ErrLeaseNotFound {
return ttl, err
}
}
}
return -1, ErrTimeout
}
func (s *EtcdServer) waitLeader(ctx context.Context) (*membership.Member, error) {
leader := s.cluster.Member(s.Leader()) leader := s.cluster.Member(s.Leader())
for i := 0; i < 5 && leader == nil; i++ { for leader == nil {
// wait an election // wait an election
dur := time.Duration(s.Cfg.ElectionTicks) * time.Duration(s.Cfg.TickMs) * time.Millisecond dur := time.Duration(s.Cfg.ElectionTicks) * time.Duration(s.Cfg.TickMs) * time.Millisecond
select { select {
case <-time.After(dur): case <-time.After(dur):
leader = s.cluster.Member(s.Leader()) leader = s.cluster.Member(s.Leader())
case <-s.done: case <-s.done:
return -1, ErrStopped return nil, ErrStopped
case <-ctx.Done():
return nil, ErrNoLeader
} }
} }
if leader == nil || len(leader.PeerURLs) == 0 { if leader == nil || len(leader.PeerURLs) == 0 {
return -1, ErrNoLeader return nil, ErrNoLeader
} }
return leader, nil
for _, url := range leader.PeerURLs {
lurl := url + "/leases"
ttl, err = leasehttp.RenewHTTP(id, lurl, s.peerRt, s.Cfg.peerDialTimeout())
if err == nil {
break
}
}
return ttl, err
} }
func (s *EtcdServer) Alarm(ctx context.Context, r *pb.AlarmRequest) (*pb.AlarmResponse, error) { func (s *EtcdServer) Alarm(ctx context.Context, r *pb.AlarmRequest) (*pb.AlarmResponse, error) {

View File

@ -19,10 +19,10 @@ import (
"fmt" "fmt"
"io/ioutil" "io/ioutil"
"net/http" "net/http"
"time"
pb "github.com/coreos/etcd/etcdserver/etcdserverpb" pb "github.com/coreos/etcd/etcdserver/etcdserverpb"
"github.com/coreos/etcd/lease" "github.com/coreos/etcd/lease"
"golang.org/x/net/context"
) )
// NewHandler returns an http Handler for lease renewals // NewHandler returns an http Handler for lease renewals
@ -75,15 +75,22 @@ func (h *leaseHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
// RenewHTTP renews a lease at a given primary server. // RenewHTTP renews a lease at a given primary server.
// TODO: Batch request in future? // TODO: Batch request in future?
func RenewHTTP(id lease.LeaseID, url string, rt http.RoundTripper, timeout time.Duration) (int64, error) { func RenewHTTP(ctx context.Context, id lease.LeaseID, url string, rt http.RoundTripper) (int64, error) {
// will post lreq protobuf to leader // will post lreq protobuf to leader
lreq, err := (&pb.LeaseKeepAliveRequest{ID: int64(id)}).Marshal() lreq, err := (&pb.LeaseKeepAliveRequest{ID: int64(id)}).Marshal()
if err != nil { if err != nil {
return -1, err return -1, err
} }
cc := &http.Client{Transport: rt, Timeout: timeout} cc := &http.Client{Transport: rt}
resp, err := cc.Post(url, "application/protobuf", bytes.NewReader(lreq)) req, err := http.NewRequest("POST", url, bytes.NewReader(lreq))
if err != nil {
return -1, err
}
req.Header.Set("Content-Type", "application/protobuf")
req.Cancel = ctx.Done()
resp, err := cc.Do(req)
if err != nil { if err != nil {
// TODO detect if leader failed and retry? // TODO detect if leader failed and retry?
return -1, err return -1, err

View File

@ -31,8 +31,6 @@ const (
) )
var ( var (
minLeaseTTL = int64(5)
leaseBucketName = []byte("lease") leaseBucketName = []byte("lease")
// do not use maxInt64 since it can overflow time which will add // do not use maxInt64 since it can overflow time which will add
// the offset of unix time (1970yr to seconds). // the offset of unix time (1970yr to seconds).
@ -143,6 +141,10 @@ type lessor struct {
// The leased items can be recovered by iterating all the keys in kv. // The leased items can be recovered by iterating all the keys in kv.
b backend.Backend b backend.Backend
// minLeaseTTL is the minimum lease TTL that can be granted for a lease. Any
// requests for shorter TTLs are extended to the minimum TTL.
minLeaseTTL int64
expiredC chan []*Lease expiredC chan []*Lease
// stopC is a channel whose closure indicates that the lessor should be stopped. // stopC is a channel whose closure indicates that the lessor should be stopped.
stopC chan struct{} stopC chan struct{}
@ -150,14 +152,15 @@ type lessor struct {
doneC chan struct{} doneC chan struct{}
} }
func NewLessor(b backend.Backend) Lessor { func NewLessor(b backend.Backend, minLeaseTTL int64) Lessor {
return newLessor(b) return newLessor(b, minLeaseTTL)
} }
func newLessor(b backend.Backend) *lessor { func newLessor(b backend.Backend, minLeaseTTL int64) *lessor {
l := &lessor{ l := &lessor{
leaseMap: make(map[LeaseID]*Lease), leaseMap: make(map[LeaseID]*Lease),
b: b, b: b,
minLeaseTTL: minLeaseTTL,
// expiredC is a small buffered chan to avoid unnecessary blocking. // expiredC is a small buffered chan to avoid unnecessary blocking.
expiredC: make(chan []*Lease, 16), expiredC: make(chan []*Lease, 16),
stopC: make(chan struct{}), stopC: make(chan struct{}),
@ -193,6 +196,10 @@ func (le *lessor) Grant(id LeaseID, ttl int64) (*Lease, error) {
return nil, ErrLeaseExists return nil, ErrLeaseExists
} }
if l.TTL < le.minLeaseTTL {
l.TTL = le.minLeaseTTL
}
if le.primary { if le.primary {
l.refresh(0) l.refresh(0)
} else { } else {
@ -425,6 +432,9 @@ func (le *lessor) initAndRecover() {
panic("failed to unmarshal lease proto item") panic("failed to unmarshal lease proto item")
} }
ID := LeaseID(lpb.ID) ID := LeaseID(lpb.ID)
if lpb.TTL < le.minLeaseTTL {
lpb.TTL = le.minLeaseTTL
}
le.leaseMap[ID] = &Lease{ le.leaseMap[ID] = &Lease{
ID: ID, ID: ID,
TTL: lpb.TTL, TTL: lpb.TTL,
@ -464,19 +474,11 @@ func (l Lease) persistTo(b backend.Backend) {
// refresh refreshes the expiry of the lease. // refresh refreshes the expiry of the lease.
func (l *Lease) refresh(extend time.Duration) { func (l *Lease) refresh(extend time.Duration) {
if l.TTL < minLeaseTTL {
l.TTL = minLeaseTTL
}
l.expiry = time.Now().Add(extend + time.Second*time.Duration(l.TTL)) l.expiry = time.Now().Add(extend + time.Second*time.Duration(l.TTL))
} }
// forever sets the expiry of lease to be forever. // forever sets the expiry of lease to be forever.
func (l *Lease) forever() { func (l *Lease) forever() { l.expiry = forever }
if l.TTL < minLeaseTTL {
l.TTL = minLeaseTTL
}
l.expiry = forever
}
type LeaseItem struct { type LeaseItem struct {
Key string Key string

View File

@ -15,6 +15,7 @@
package mvcc package mvcc
import ( import (
"bytes"
"errors" "errors"
"sync" "sync"
@ -96,6 +97,12 @@ type watchStream struct {
// Watch creates a new watcher in the stream and returns its WatchID. // Watch creates a new watcher in the stream and returns its WatchID.
// TODO: return error if ws is closed? // TODO: return error if ws is closed?
func (ws *watchStream) Watch(key, end []byte, startRev int64) WatchID { func (ws *watchStream) Watch(key, end []byte, startRev int64) WatchID {
// prevent wrong range where key >= end lexicographically
// watch request with 'WithFromKey' has empty-byte range end
if len(end) != 0 && bytes.Compare(key, end) != -1 {
return -1
}
ws.mu.Lock() ws.mu.Lock()
defer ws.mu.Unlock() defer ws.mu.Unlock()
if ws.closed { if ws.closed {

View File

@ -29,7 +29,7 @@ import (
var ( var (
// MinClusterVersion is the min cluster version this etcd binary is compatible with. // MinClusterVersion is the min cluster version this etcd binary is compatible with.
MinClusterVersion = "2.3.0" MinClusterVersion = "2.3.0"
Version = "3.0.14" Version = "3.0.17"
// Git SHA Value will be set during build // Git SHA Value will be set during build
GitSHA = "Not provided (use ./build instead of go build)" GitSHA = "Not provided (use ./build instead of go build)"