From 849816dd0fbd70d0e46567fffc7416b667bff9b5 Mon Sep 17 00:00:00 2001 From: Yong Tang Date: Sun, 29 Jan 2017 08:11:26 -0800 Subject: [PATCH] Update SwarmKit to 78ae345f449ac69aa741c762df7e5f0020f70275 This fix updates SwarmKit to 78ae345f449ac69aa741c762df7e5f0020f70275 (from 037b4913929019d44bc927870bf2d92ce9ca261f) The following issues in docker are related - Can not update service in host publish mode (#30199) (fixed) - Add `ReadonlyRootfs` in ContainerSpec for `--read-only` (#29972) (needed) - Explicitly disallow network pluginv1 creation in swarm mode (See discussion in docker/swarmkit/pull/1899, docker/swarmkit/pull/1894, and docker/docker/pull/30332#issuecomment-274277948) This fix fixes #30199 Signed-off-by: Yong Tang --- vendor.conf | 2 +- .../docker/swarmkit/api/specs.pb.go | 256 ++++++++++-------- .../docker/swarmkit/api/specs.proto | 6 + .../github.com/docker/swarmkit/ca/server.go | 39 ++- .../swarmkit/manager/allocator/network.go | 45 ++- .../networkallocator/networkallocator.go | 6 + .../networkallocator/portallocator.go | 27 ++ .../swarmkit/manager/controlapi/common.go | 18 +- .../swarmkit/manager/controlapi/network.go | 15 +- .../swarmkit/manager/controlapi/server.go | 5 +- .../docker/swarmkit/manager/dirty.go | 57 ++++ .../swarmkit/manager/dispatcher/dispatcher.go | 1 - .../docker/swarmkit/manager/manager.go | 2 +- .../docker/swarmkit/manager/state/store/by.go | 10 - .../swarmkit/manager/state/store/memory.go | 7 - .../github.com/docker/swarmkit/node/node.go | 14 + 16 files changed, 349 insertions(+), 161 deletions(-) create mode 100644 vendor/github.com/docker/swarmkit/manager/dirty.go diff --git a/vendor.conf b/vendor.conf index 68820bdc3b..e2b646eea1 100644 --- a/vendor.conf +++ b/vendor.conf @@ -102,7 +102,7 @@ github.com/docker/containerd d7975b89804b207b68f8b446cf1e2af72589bfcf github.com/tonistiigi/fifo 1405643975692217d6720f8b54aeee1bf2cd5cf4 # cluster -github.com/docker/swarmkit 037b4913929019d44bc927870bf2d92ce9ca261f +github.com/docker/swarmkit 78ae345f449ac69aa741c762df7e5f0020f70275 github.com/golang/mock bd3c8e81be01eef76d4b503f5e687d2d1354d2d9 github.com/gogo/protobuf 8d70fb3182befc465c4a1eac8ad4d38ff49778e2 github.com/cloudflare/cfssl 7fb22c8cba7ecaf98e4082d22d65800cf45e042a diff --git a/vendor/github.com/docker/swarmkit/api/specs.pb.go b/vendor/github.com/docker/swarmkit/api/specs.pb.go index e75f77b540..e58acead04 100644 --- a/vendor/github.com/docker/swarmkit/api/specs.pb.go +++ b/vendor/github.com/docker/swarmkit/api/specs.pb.go @@ -483,8 +483,13 @@ type ContainerSpec struct { // including stdin if it is still open. TTY bool `protobuf:"varint,13,opt,name=tty,proto3" json:"tty,omitempty"` // OpenStdin declares that the standard input (stdin) should be open. - OpenStdin bool `protobuf:"varint,18,opt,name=open_stdin,json=openStdin,proto3" json:"open_stdin,omitempty"` - Mounts []Mount `protobuf:"bytes,8,rep,name=mounts" json:"mounts"` + OpenStdin bool `protobuf:"varint,18,opt,name=open_stdin,json=openStdin,proto3" json:"open_stdin,omitempty"` + // ReadOnly declares that the container root filesystem is read-only. + // This only impacts the root filesystem, not additional mounts (including + // tmpfs). For additional mounts that are not part of the initial rootfs, + // they will be decided by the modes passed in the mount definition. + ReadOnly bool `protobuf:"varint,19,opt,name=read_only,json=readOnly,proto3" json:"read_only,omitempty"` + Mounts []Mount `protobuf:"bytes,8,rep,name=mounts" json:"mounts"` // StopGracePeriod the grace period for stopping the container before // forcefully killing the container. // Note: Can't use stdduration here because this needs to be nullable. @@ -1552,6 +1557,18 @@ func (m *ContainerSpec) MarshalTo(dAtA []byte) (int, error) { } i++ } + if m.ReadOnly { + dAtA[i] = 0x98 + i++ + dAtA[i] = 0x1 + i++ + if m.ReadOnly { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i++ + } return i, nil } @@ -2127,6 +2144,9 @@ func (m *ContainerSpec) Size() (n int) { if m.OpenStdin { n += 3 } + if m.ReadOnly { + n += 3 + } return n } @@ -2397,6 +2417,7 @@ func (this *ContainerSpec) String() string { `Healthcheck:` + strings.Replace(fmt.Sprintf("%v", this.Healthcheck), "HealthConfig", "HealthConfig", 1) + `,`, `Hosts:` + fmt.Sprintf("%v", this.Hosts) + `,`, `OpenStdin:` + fmt.Sprintf("%v", this.OpenStdin) + `,`, + `ReadOnly:` + fmt.Sprintf("%v", this.ReadOnly) + `,`, `}`, }, "") return s @@ -4027,6 +4048,26 @@ func (m *ContainerSpec) Unmarshal(dAtA []byte) error { } } m.OpenStdin = bool(v != 0) + case 19: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field ReadOnly", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowSpecs + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + m.ReadOnly = bool(v != 0) default: iNdEx = preIndex skippy, err := skipSpecs(dAtA[iNdEx:]) @@ -5079,109 +5120,110 @@ var ( func init() { proto.RegisterFile("specs.proto", fileDescriptorSpecs) } var fileDescriptorSpecs = []byte{ - // 1654 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0xac, 0x57, 0xcd, 0x72, 0x23, 0xb7, - 0x11, 0x26, 0x25, 0x8a, 0x3f, 0x3d, 0xd4, 0x2e, 0x85, 0xb2, 0x9d, 0x59, 0x3a, 0xa6, 0xb8, 0xf4, - 0xc6, 0x91, 0xe3, 0x0a, 0x55, 0x51, 0x52, 0xce, 0x3a, 0x1b, 0x57, 0x42, 0x8a, 0x8c, 0x56, 0x51, - 0x24, 0xb3, 0x20, 0x79, 0x53, 0x7b, 0x62, 0x41, 0x33, 0x10, 0x39, 0xa5, 0xe1, 0x60, 0x02, 0x60, - 0xe8, 0xe2, 0x2d, 0x47, 0xd7, 0x1e, 0xf2, 0x06, 0x3a, 0xe5, 0x19, 0xf2, 0x0e, 0x7b, 0xcc, 0x29, - 0x95, 0x93, 0x2a, 0xcb, 0x57, 0xc8, 0x03, 0x24, 0x05, 0x0c, 0x66, 0x38, 0xb4, 0x47, 0x5e, 0x57, - 0x59, 0x37, 0x74, 0xf3, 0xfb, 0x7a, 0x80, 0xc6, 0x87, 0xee, 0x26, 0x58, 0x22, 0xa4, 0x8e, 0xe8, - 0x86, 0x9c, 0x49, 0x86, 0x90, 0xcb, 0x9c, 0x6b, 0xca, 0xbb, 0xe2, 0x2b, 0xc2, 0x67, 0xd7, 0x9e, - 0xec, 0xce, 0x7f, 0xd1, 0xb4, 0xe4, 0x22, 0xa4, 0x06, 0xd0, 0x7c, 0x67, 0xc2, 0x26, 0x4c, 0x2f, - 0xf7, 0xd5, 0xca, 0x78, 0x5b, 0x13, 0xc6, 0x26, 0x3e, 0xdd, 0xd7, 0xd6, 0x65, 0x74, 0xb5, 0xef, - 0x46, 0x9c, 0x48, 0x8f, 0x05, 0xf1, 0xef, 0x9d, 0x9b, 0x12, 0x54, 0xcf, 0x98, 0x4b, 0xcf, 0x43, - 0xea, 0xa0, 0x23, 0xb0, 0x48, 0x10, 0x30, 0xa9, 0x01, 0xc2, 0x2e, 0xb6, 0x8b, 0x7b, 0xd6, 0xc1, - 0x6e, 0xf7, 0xdb, 0x5f, 0xee, 0xf6, 0x56, 0xb0, 0x7e, 0xe9, 0xf5, 0xed, 0x6e, 0x01, 0x67, 0x99, - 0xe8, 0x77, 0x50, 0x77, 0xa9, 0xf0, 0x38, 0x75, 0xc7, 0x9c, 0xf9, 0xd4, 0xde, 0x68, 0x17, 0xf7, - 0x1e, 0x1c, 0xfc, 0x38, 0x2f, 0x92, 0xfa, 0x38, 0x66, 0x3e, 0xc5, 0x96, 0x61, 0x28, 0x03, 0x1d, - 0x01, 0xcc, 0xe8, 0xec, 0x92, 0x72, 0x31, 0xf5, 0x42, 0x7b, 0x53, 0xd3, 0x7f, 0x7a, 0x17, 0x5d, - 0xed, 0xbd, 0x7b, 0x9a, 0xc2, 0x71, 0x86, 0x8a, 0x4e, 0xa1, 0x4e, 0xe6, 0xc4, 0xf3, 0xc9, 0xa5, - 0xe7, 0x7b, 0x72, 0x61, 0x97, 0x74, 0xa8, 0x8f, 0xbf, 0x33, 0x54, 0x2f, 0x43, 0xc0, 0x6b, 0xf4, - 0x8e, 0x0b, 0xb0, 0xfa, 0x10, 0xfa, 0x08, 0x2a, 0xa3, 0xe1, 0xd9, 0xe0, 0xf8, 0xec, 0xa8, 0x51, - 0x68, 0x3e, 0x7a, 0x75, 0xd3, 0x7e, 0x57, 0xc5, 0x58, 0x01, 0x46, 0x34, 0x70, 0xbd, 0x60, 0x82, - 0xf6, 0xa0, 0xda, 0x3b, 0x3c, 0x1c, 0x8e, 0x2e, 0x86, 0x83, 0x46, 0xb1, 0xd9, 0x7c, 0x75, 0xd3, - 0x7e, 0x6f, 0x1d, 0xd8, 0x73, 0x1c, 0x1a, 0x4a, 0xea, 0x36, 0x4b, 0x5f, 0xff, 0xbd, 0x55, 0xe8, - 0x7c, 0x5d, 0x84, 0x7a, 0x76, 0x13, 0xe8, 0x23, 0x28, 0xf7, 0x0e, 0x2f, 0x8e, 0x5f, 0x0c, 0x1b, - 0x85, 0x15, 0x3d, 0x8b, 0xe8, 0x39, 0xd2, 0x9b, 0x53, 0xf4, 0x04, 0xb6, 0x46, 0xbd, 0x2f, 0xcf, - 0x87, 0x8d, 0xe2, 0x6a, 0x3b, 0x59, 0xd8, 0x88, 0x44, 0x42, 0xa3, 0x06, 0xb8, 0x77, 0x7c, 0xd6, - 0xd8, 0xc8, 0x47, 0x0d, 0x38, 0xf1, 0x02, 0xb3, 0x95, 0x37, 0x9b, 0x60, 0x9d, 0x53, 0x3e, 0xf7, - 0x9c, 0x7b, 0x96, 0xc8, 0xa7, 0x50, 0x92, 0x44, 0x5c, 0x6b, 0x69, 0x58, 0xf9, 0xd2, 0xb8, 0x20, - 0xe2, 0x5a, 0x7d, 0xd4, 0xd0, 0x35, 0x5e, 0x29, 0x83, 0xd3, 0xd0, 0xf7, 0x1c, 0x22, 0xa9, 0xab, - 0x95, 0x61, 0x1d, 0xfc, 0x24, 0x8f, 0x8d, 0x53, 0x94, 0xd9, 0xff, 0xf3, 0x02, 0xce, 0x50, 0xd1, - 0x33, 0x28, 0x4f, 0x7c, 0x76, 0x49, 0x7c, 0xad, 0x09, 0xeb, 0xe0, 0x71, 0x5e, 0x90, 0x23, 0x8d, - 0x58, 0x05, 0x30, 0x14, 0xf4, 0x14, 0xca, 0x51, 0xe8, 0x12, 0x49, 0xed, 0xb2, 0x26, 0xb7, 0xf3, - 0xc8, 0x5f, 0x6a, 0xc4, 0x21, 0x0b, 0xae, 0xbc, 0x09, 0x36, 0x78, 0x74, 0x02, 0xd5, 0x80, 0xca, - 0xaf, 0x18, 0xbf, 0x16, 0x76, 0xa5, 0xbd, 0xb9, 0x67, 0x1d, 0x7c, 0x92, 0x2b, 0xc6, 0x18, 0xd3, - 0x93, 0x92, 0x38, 0xd3, 0x19, 0x0d, 0x64, 0x1c, 0xa6, 0xbf, 0x61, 0x17, 0x71, 0x1a, 0x00, 0xfd, - 0x16, 0xaa, 0x34, 0x70, 0x43, 0xe6, 0x05, 0xd2, 0xae, 0xde, 0xbd, 0x91, 0xa1, 0xc1, 0xa8, 0x64, - 0xe2, 0x94, 0xd1, 0x2f, 0x43, 0x69, 0xc6, 0x5c, 0xda, 0xd9, 0x87, 0x9d, 0x6f, 0x25, 0x0b, 0x35, - 0xa1, 0x6a, 0x92, 0x15, 0xdf, 0x72, 0x09, 0xa7, 0x76, 0xe7, 0x21, 0x6c, 0xaf, 0x25, 0xa6, 0xf3, - 0xb7, 0x12, 0x54, 0x93, 0xdb, 0x42, 0x3d, 0xa8, 0x39, 0x2c, 0x90, 0xc4, 0x0b, 0x28, 0x37, 0x02, - 0xc9, 0xcd, 0xed, 0x61, 0x02, 0x52, 0xac, 0xe7, 0x05, 0xbc, 0x62, 0xa1, 0x3f, 0x40, 0x8d, 0x53, - 0xc1, 0x22, 0xee, 0x50, 0x61, 0x14, 0xb2, 0x97, 0x7f, 0xc7, 0x31, 0x08, 0xd3, 0xbf, 0x44, 0x1e, - 0xa7, 0x2a, 0x4f, 0x02, 0xaf, 0xa8, 0xe8, 0x19, 0x54, 0x38, 0x15, 0x92, 0x70, 0xf9, 0x5d, 0x97, - 0x8c, 0x63, 0xc8, 0x88, 0xf9, 0x9e, 0xb3, 0xc0, 0x09, 0x03, 0x3d, 0x83, 0x5a, 0xe8, 0x13, 0x47, - 0x47, 0xb5, 0xb7, 0x34, 0xfd, 0x83, 0x3c, 0xfa, 0x28, 0x01, 0xe1, 0x15, 0x1e, 0x7d, 0x06, 0xe0, - 0xb3, 0xc9, 0xd8, 0xe5, 0xde, 0x9c, 0x72, 0x23, 0x92, 0x66, 0x1e, 0x7b, 0xa0, 0x11, 0xb8, 0xe6, - 0xb3, 0x49, 0xbc, 0x44, 0x47, 0x3f, 0x48, 0x21, 0x19, 0x75, 0x9c, 0x00, 0x90, 0xf4, 0x57, 0xa3, - 0x8f, 0x8f, 0xbf, 0x57, 0x28, 0x73, 0x23, 0x19, 0x3a, 0x7a, 0x0c, 0xf5, 0x2b, 0xc6, 0x1d, 0x3a, - 0x36, 0xba, 0xaf, 0x69, 0x4d, 0x58, 0xda, 0x17, 0x0b, 0xbd, 0x5f, 0x83, 0x0a, 0x8f, 0x02, 0xe9, - 0xcd, 0x68, 0xe7, 0x04, 0xde, 0xcd, 0x0d, 0x8a, 0x0e, 0xa0, 0x9e, 0x5e, 0xf3, 0xd8, 0x73, 0xb5, - 0x3e, 0x6a, 0xfd, 0x87, 0xcb, 0xdb, 0x5d, 0x2b, 0xd5, 0xc3, 0xf1, 0x00, 0x5b, 0x29, 0xe8, 0xd8, - 0xed, 0xfc, 0xab, 0x02, 0xdb, 0x6b, 0x62, 0x41, 0xef, 0xc0, 0x96, 0x37, 0x23, 0x13, 0x1a, 0xd3, - 0x71, 0x6c, 0xa0, 0x21, 0x94, 0x7d, 0x72, 0x49, 0x7d, 0x25, 0x19, 0x95, 0xb6, 0x9f, 0xbf, 0x55, - 0x75, 0xdd, 0x3f, 0x69, 0xfc, 0x30, 0x90, 0x7c, 0x81, 0x0d, 0x19, 0xd9, 0x50, 0x71, 0xd8, 0x6c, - 0x46, 0x02, 0x55, 0x5e, 0x36, 0xf7, 0x6a, 0x38, 0x31, 0x11, 0x82, 0x12, 0xe1, 0x13, 0x61, 0x97, - 0xb4, 0x5b, 0xaf, 0x51, 0x03, 0x36, 0x69, 0x30, 0xb7, 0xb7, 0xb4, 0x4b, 0x2d, 0x95, 0xc7, 0xf5, - 0xe2, 0x3b, 0xaf, 0x61, 0xb5, 0x54, 0xbc, 0x48, 0x50, 0x6e, 0x57, 0xb4, 0x4b, 0xaf, 0xd1, 0xaf, - 0xa1, 0x3c, 0x63, 0x51, 0x20, 0x85, 0x5d, 0xd5, 0x9b, 0x7d, 0x94, 0xb7, 0xd9, 0x53, 0x85, 0x30, - 0xe5, 0xcf, 0xc0, 0xd1, 0x10, 0x76, 0x84, 0x64, 0xe1, 0x78, 0xc2, 0x89, 0x43, 0xc7, 0x21, 0xe5, - 0x1e, 0x73, 0xf5, 0x6d, 0xa8, 0x18, 0x71, 0xb7, 0xef, 0x26, 0xdd, 0xbe, 0x3b, 0x30, 0xdd, 0x1e, - 0x3f, 0x54, 0x9c, 0x23, 0x45, 0x19, 0x69, 0x06, 0x1a, 0x41, 0x3d, 0x8c, 0x7c, 0x7f, 0xcc, 0xc2, - 0xb8, 0x92, 0x83, 0x8e, 0xf0, 0x3d, 0x52, 0x36, 0x8a, 0x7c, 0xff, 0x8b, 0x98, 0x84, 0xad, 0x70, - 0x65, 0xa0, 0xf7, 0xa0, 0x3c, 0xe1, 0x2c, 0x0a, 0x85, 0x6d, 0xe9, 0x64, 0x18, 0x0b, 0x7d, 0x0e, - 0x15, 0x41, 0x1d, 0x4e, 0xa5, 0xb0, 0xeb, 0xfa, 0xa8, 0x1f, 0xe6, 0x7d, 0xe4, 0x5c, 0x43, 0x30, - 0xbd, 0xa2, 0x9c, 0x06, 0x0e, 0xc5, 0x09, 0x07, 0x3d, 0x82, 0x4d, 0x29, 0x17, 0xf6, 0x76, 0xbb, - 0xb8, 0x57, 0xed, 0x57, 0x96, 0xb7, 0xbb, 0x9b, 0x17, 0x17, 0x2f, 0xb1, 0xf2, 0xa9, 0x1a, 0x35, - 0x65, 0x42, 0x06, 0x64, 0x46, 0xed, 0x07, 0x3a, 0xb7, 0xa9, 0x8d, 0x5e, 0x02, 0xb8, 0x81, 0x18, - 0x3b, 0xfa, 0x51, 0xd8, 0x0f, 0xf5, 0xe9, 0x3e, 0x79, 0xfb, 0xe9, 0x06, 0x67, 0xe7, 0xa6, 0xd2, - 0x6e, 0x2f, 0x6f, 0x77, 0x6b, 0xa9, 0x89, 0x6b, 0x6e, 0x20, 0xe2, 0x25, 0xea, 0x83, 0x35, 0xa5, - 0xc4, 0x97, 0x53, 0x67, 0x4a, 0x9d, 0x6b, 0xbb, 0x71, 0x77, 0xe1, 0x7d, 0xae, 0x61, 0x26, 0x42, - 0x96, 0xa4, 0x14, 0xac, 0xb6, 0x2a, 0xec, 0x1d, 0x9d, 0xab, 0xd8, 0x40, 0x1f, 0x00, 0xb0, 0x90, - 0x06, 0x63, 0x21, 0x5d, 0x2f, 0xb0, 0x91, 0x3a, 0x32, 0xae, 0x29, 0xcf, 0xb9, 0x72, 0x34, 0x3f, - 0x03, 0x2b, 0x23, 0x58, 0x25, 0xb4, 0x6b, 0xba, 0x30, 0x6f, 0x40, 0x2d, 0x55, 0xd4, 0x39, 0xf1, - 0xa3, 0x78, 0xe0, 0xaa, 0xe1, 0xd8, 0xf8, 0xcd, 0xc6, 0xd3, 0x62, 0xf3, 0x00, 0xac, 0xcc, 0xc5, - 0xa1, 0x0f, 0x61, 0x9b, 0xd3, 0x89, 0x27, 0x24, 0x5f, 0x8c, 0x49, 0x24, 0xa7, 0xf6, 0xef, 0x35, - 0xa1, 0x9e, 0x38, 0x7b, 0x91, 0x9c, 0x36, 0xc7, 0xb0, 0x3a, 0x3f, 0x6a, 0x83, 0xa5, 0xf2, 0x2a, - 0x28, 0x9f, 0x53, 0xae, 0x5a, 0x82, 0xda, 0x76, 0xd6, 0xa5, 0xee, 0x5f, 0x50, 0xc2, 0x9d, 0xa9, - 0x7e, 0x7e, 0x35, 0x6c, 0x2c, 0xf5, 0x9e, 0x12, 0x91, 0x99, 0xf7, 0x64, 0xcc, 0xce, 0x7f, 0x8b, - 0x50, 0xcf, 0xf6, 0x26, 0x74, 0x18, 0x77, 0x24, 0x7d, 0xa4, 0x07, 0x07, 0xfb, 0x6f, 0xeb, 0x65, - 0xba, 0xfe, 0xfb, 0x91, 0x0a, 0x76, 0xaa, 0xc6, 0x48, 0x4d, 0x46, 0xbf, 0x82, 0xad, 0x90, 0x71, - 0x99, 0x54, 0x81, 0x56, 0x6e, 0xcd, 0x66, 0x3c, 0xa9, 0x97, 0x31, 0xb8, 0x33, 0x85, 0x07, 0xeb, - 0xd1, 0xd0, 0x13, 0xd8, 0x7c, 0x71, 0x3c, 0x6a, 0x14, 0x9a, 0xef, 0xbf, 0xba, 0x69, 0xff, 0x68, - 0xfd, 0xc7, 0x17, 0x1e, 0x97, 0x11, 0xf1, 0x8f, 0x47, 0xe8, 0x67, 0xb0, 0x35, 0x38, 0x3b, 0xc7, - 0xb8, 0x51, 0x6c, 0xee, 0xbe, 0xba, 0x69, 0xbf, 0xbf, 0x8e, 0x53, 0x3f, 0xb1, 0x28, 0x70, 0x31, - 0xbb, 0x4c, 0x47, 0xaa, 0x7f, 0x6c, 0x80, 0x65, 0x8a, 0xe3, 0x7d, 0x4f, 0xdd, 0xdb, 0x71, 0xbf, - 0x49, 0x54, 0xbf, 0xf1, 0xd6, 0xb6, 0x53, 0x8f, 0x09, 0xe6, 0x8e, 0x1f, 0x43, 0xdd, 0x0b, 0xe7, - 0x9f, 0x8e, 0x69, 0x40, 0x2e, 0x7d, 0x33, 0x5d, 0x55, 0xb1, 0xa5, 0x7c, 0xc3, 0xd8, 0xa5, 0x9e, - 0x9c, 0x17, 0x48, 0xca, 0x03, 0x33, 0x37, 0x55, 0x71, 0x6a, 0xa3, 0xcf, 0xa1, 0xe4, 0x85, 0x64, - 0x66, 0x7a, 0x65, 0xee, 0x09, 0x8e, 0x47, 0xbd, 0x53, 0xa3, 0xc1, 0x7e, 0x75, 0x79, 0xbb, 0x5b, - 0x52, 0x0e, 0xac, 0x69, 0xa8, 0x95, 0xb4, 0x2b, 0xf5, 0x25, 0x5d, 0x3e, 0xab, 0x38, 0xe3, 0xe9, - 0xfc, 0xaf, 0x04, 0xd6, 0xa1, 0x1f, 0x09, 0x69, 0x9a, 0xc0, 0xbd, 0xe5, 0xed, 0x25, 0xec, 0x10, - 0x3d, 0x80, 0x93, 0x40, 0x55, 0x54, 0x3d, 0x06, 0x98, 0xdc, 0x3d, 0xc9, 0x0d, 0x97, 0x82, 0xe3, - 0x91, 0xa1, 0x5f, 0x56, 0x31, 0xed, 0x22, 0x6e, 0x90, 0x6f, 0xfc, 0x82, 0xce, 0x61, 0x9b, 0x71, - 0x67, 0x4a, 0x85, 0x8c, 0xeb, 0xb0, 0x19, 0x58, 0x73, 0xff, 0xca, 0x7c, 0x91, 0x05, 0x9a, 0x22, - 0x14, 0xef, 0x76, 0x3d, 0x06, 0x7a, 0x0a, 0x25, 0x4e, 0xae, 0x92, 0x91, 0x26, 0x57, 0xdf, 0x98, - 0x5c, 0xc9, 0xb5, 0x10, 0x9a, 0x81, 0xfe, 0x08, 0xe0, 0x7a, 0x22, 0x24, 0xd2, 0x99, 0x52, 0x6e, - 0xee, 0x29, 0xf7, 0x88, 0x83, 0x14, 0xb5, 0x16, 0x25, 0xc3, 0x46, 0x27, 0x50, 0x73, 0x48, 0xa2, - 0xb4, 0xf2, 0xdd, 0x53, 0xfc, 0x61, 0xcf, 0x84, 0x68, 0xa8, 0x10, 0xcb, 0xdb, 0xdd, 0x6a, 0xe2, - 0xc1, 0x55, 0x87, 0x18, 0xe5, 0x9d, 0xc0, 0xb6, 0x9a, 0xee, 0xc7, 0x2e, 0xbd, 0x22, 0x91, 0x2f, - 0x85, 0x6e, 0x95, 0x77, 0x14, 0x55, 0x35, 0x68, 0x0e, 0x0c, 0xce, 0xec, 0xab, 0x2e, 0x33, 0x3e, - 0xf4, 0x67, 0xd8, 0xa1, 0x81, 0xc3, 0x17, 0x5a, 0x67, 0xc9, 0x0e, 0xab, 0x77, 0x1f, 0x76, 0x98, - 0x82, 0xd7, 0x0e, 0xdb, 0xa0, 0xdf, 0xf0, 0x77, 0x3c, 0x80, 0xb8, 0x4d, 0xdd, 0xaf, 0xfe, 0x10, - 0x94, 0x5c, 0x22, 0x89, 0x96, 0x5c, 0x1d, 0xeb, 0x75, 0xdf, 0x7e, 0xfd, 0xa6, 0x55, 0xf8, 0xf7, - 0x9b, 0x56, 0xe1, 0xaf, 0xcb, 0x56, 0xf1, 0xf5, 0xb2, 0x55, 0xfc, 0xe7, 0xb2, 0x55, 0xfc, 0xcf, - 0xb2, 0x55, 0xbc, 0x2c, 0xeb, 0xe6, 0xfe, 0xcb, 0xff, 0x07, 0x00, 0x00, 0xff, 0xff, 0x91, 0x92, - 0xb2, 0x3a, 0x1e, 0x10, 0x00, 0x00, + // 1672 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0xac, 0x57, 0x41, 0x73, 0x1b, 0xb7, + 0x15, 0x26, 0x25, 0x8a, 0x5c, 0xbe, 0xa5, 0x6c, 0x0a, 0x4d, 0xd2, 0x35, 0xdd, 0x50, 0x34, 0xe3, + 0xa6, 0x4a, 0x33, 0xa5, 0xa6, 0x6a, 0x27, 0x75, 0xea, 0x66, 0x5a, 0x52, 0x64, 0x65, 0x55, 0x95, + 0xcc, 0x81, 0x14, 0x77, 0x7c, 0xe2, 0x40, 0xbb, 0x10, 0xb9, 0xa3, 0xe5, 0x62, 0x0b, 0x60, 0x99, + 0xe1, 0xad, 0xc7, 0x8c, 0x0f, 0xfd, 0x07, 0x3a, 0xf5, 0x37, 0xf4, 0x3f, 0xf8, 0xd8, 0x63, 0x4f, + 0x9a, 0x9a, 0x7f, 0x21, 0x3f, 0xa0, 0x1d, 0x60, 0xb1, 0xe4, 0x32, 0x59, 0xc5, 0x99, 0xa9, 0x6f, + 0x78, 0x8f, 0xdf, 0xf7, 0x16, 0x78, 0xf8, 0xf0, 0xde, 0x23, 0xd8, 0x22, 0xa2, 0xae, 0xe8, 0x44, + 0x9c, 0x49, 0x86, 0x90, 0xc7, 0xdc, 0x6b, 0xca, 0x3b, 0xe2, 0x2b, 0xc2, 0xa7, 0xd7, 0xbe, 0xec, + 0xcc, 0x7e, 0xd9, 0xb0, 0xe5, 0x3c, 0xa2, 0x06, 0xd0, 0x78, 0x6f, 0xcc, 0xc6, 0x4c, 0x2f, 0xf7, + 0xd5, 0xca, 0x78, 0x9b, 0x63, 0xc6, 0xc6, 0x01, 0xdd, 0xd7, 0xd6, 0x65, 0x7c, 0xb5, 0xef, 0xc5, + 0x9c, 0x48, 0x9f, 0x85, 0xc9, 0xef, 0xed, 0x9b, 0x12, 0x58, 0x67, 0xcc, 0xa3, 0xe7, 0x11, 0x75, + 0xd1, 0x11, 0xd8, 0x24, 0x0c, 0x99, 0xd4, 0x00, 0xe1, 0x14, 0x5b, 0xc5, 0x3d, 0xfb, 0x60, 0xb7, + 0xf3, 0xdd, 0x2f, 0x77, 0xba, 0x2b, 0x58, 0xaf, 0xf4, 0xfa, 0x76, 0xb7, 0x80, 0xb3, 0x4c, 0xf4, + 0x7b, 0xa8, 0x79, 0x54, 0xf8, 0x9c, 0x7a, 0x23, 0xce, 0x02, 0xea, 0x6c, 0xb4, 0x8a, 0x7b, 0xf7, + 0x0e, 0x7e, 0x92, 0x17, 0x49, 0x7d, 0x1c, 0xb3, 0x80, 0x62, 0xdb, 0x30, 0x94, 0x81, 0x8e, 0x00, + 0xa6, 0x74, 0x7a, 0x49, 0xb9, 0x98, 0xf8, 0x91, 0xb3, 0xa9, 0xe9, 0x3f, 0xbb, 0x8b, 0xae, 0xf6, + 0xde, 0x39, 0x5d, 0xc2, 0x71, 0x86, 0x8a, 0x4e, 0xa1, 0x46, 0x66, 0xc4, 0x0f, 0xc8, 0xa5, 0x1f, + 0xf8, 0x72, 0xee, 0x94, 0x74, 0xa8, 0x4f, 0xbe, 0x37, 0x54, 0x37, 0x43, 0xc0, 0x6b, 0xf4, 0xb6, + 0x07, 0xb0, 0xfa, 0x10, 0xfa, 0x18, 0x2a, 0xc3, 0xc1, 0x59, 0xff, 0xf8, 0xec, 0xa8, 0x5e, 0x68, + 0x3c, 0x78, 0x75, 0xd3, 0x7a, 0x5f, 0xc5, 0x58, 0x01, 0x86, 0x34, 0xf4, 0xfc, 0x70, 0x8c, 0xf6, + 0xc0, 0xea, 0x1e, 0x1e, 0x0e, 0x86, 0x17, 0x83, 0x7e, 0xbd, 0xd8, 0x68, 0xbc, 0xba, 0x69, 0x7d, + 0xb0, 0x0e, 0xec, 0xba, 0x2e, 0x8d, 0x24, 0xf5, 0x1a, 0xa5, 0xaf, 0xff, 0xd1, 0x2c, 0xb4, 0xbf, + 0x2e, 0x42, 0x2d, 0xbb, 0x09, 0xf4, 0x31, 0x94, 0xbb, 0x87, 0x17, 0xc7, 0x2f, 0x06, 0xf5, 0xc2, + 0x8a, 0x9e, 0x45, 0x74, 0x5d, 0xe9, 0xcf, 0x28, 0x7a, 0x0c, 0x5b, 0xc3, 0xee, 0x97, 0xe7, 0x83, + 0x7a, 0x71, 0xb5, 0x9d, 0x2c, 0x6c, 0x48, 0x62, 0xa1, 0x51, 0x7d, 0xdc, 0x3d, 0x3e, 0xab, 0x6f, + 0xe4, 0xa3, 0xfa, 0x9c, 0xf8, 0xa1, 0xd9, 0xca, 0x9b, 0x4d, 0xb0, 0xcf, 0x29, 0x9f, 0xf9, 0xee, + 0x3b, 0x96, 0xc8, 0x67, 0x50, 0x92, 0x44, 0x5c, 0x6b, 0x69, 0xd8, 0xf9, 0xd2, 0xb8, 0x20, 0xe2, + 0x5a, 0x7d, 0xd4, 0xd0, 0x35, 0x5e, 0x29, 0x83, 0xd3, 0x28, 0xf0, 0x5d, 0x22, 0xa9, 0xa7, 0x95, + 0x61, 0x1f, 0xfc, 0x34, 0x8f, 0x8d, 0x97, 0x28, 0xb3, 0xff, 0x67, 0x05, 0x9c, 0xa1, 0xa2, 0xa7, + 0x50, 0x1e, 0x07, 0xec, 0x92, 0x04, 0x5a, 0x13, 0xf6, 0xc1, 0xa3, 0xbc, 0x20, 0x47, 0x1a, 0xb1, + 0x0a, 0x60, 0x28, 0xe8, 0x09, 0x94, 0xe3, 0xc8, 0x23, 0x92, 0x3a, 0x65, 0x4d, 0x6e, 0xe5, 0x91, + 0xbf, 0xd4, 0x88, 0x43, 0x16, 0x5e, 0xf9, 0x63, 0x6c, 0xf0, 0xe8, 0x04, 0xac, 0x90, 0xca, 0xaf, + 0x18, 0xbf, 0x16, 0x4e, 0xa5, 0xb5, 0xb9, 0x67, 0x1f, 0x7c, 0x9a, 0x2b, 0xc6, 0x04, 0xd3, 0x95, + 0x92, 0xb8, 0x93, 0x29, 0x0d, 0x65, 0x12, 0xa6, 0xb7, 0xe1, 0x14, 0xf1, 0x32, 0x00, 0xfa, 0x1d, + 0x58, 0x34, 0xf4, 0x22, 0xe6, 0x87, 0xd2, 0xb1, 0xee, 0xde, 0xc8, 0xc0, 0x60, 0x54, 0x32, 0xf1, + 0x92, 0xd1, 0x2b, 0x43, 0x69, 0xca, 0x3c, 0xda, 0xde, 0x87, 0x9d, 0xef, 0x24, 0x0b, 0x35, 0xc0, + 0x32, 0xc9, 0x4a, 0x6e, 0xb9, 0x84, 0x97, 0x76, 0xfb, 0x3e, 0x6c, 0xaf, 0x25, 0xa6, 0xfd, 0xf7, + 0x12, 0x58, 0xe9, 0x6d, 0xa1, 0x2e, 0x54, 0x5d, 0x16, 0x4a, 0xe2, 0x87, 0x94, 0x1b, 0x81, 0xe4, + 0xe6, 0xf6, 0x30, 0x05, 0x29, 0xd6, 0xb3, 0x02, 0x5e, 0xb1, 0xd0, 0x1f, 0xa1, 0xca, 0xa9, 0x60, + 0x31, 0x77, 0xa9, 0x30, 0x0a, 0xd9, 0xcb, 0xbf, 0xe3, 0x04, 0x84, 0xe9, 0x5f, 0x63, 0x9f, 0x53, + 0x95, 0x27, 0x81, 0x57, 0x54, 0xf4, 0x14, 0x2a, 0x9c, 0x0a, 0x49, 0xb8, 0xfc, 0xbe, 0x4b, 0xc6, + 0x09, 0x64, 0xc8, 0x02, 0xdf, 0x9d, 0xe3, 0x94, 0x81, 0x9e, 0x42, 0x35, 0x0a, 0x88, 0xab, 0xa3, + 0x3a, 0x5b, 0x9a, 0xfe, 0x61, 0x1e, 0x7d, 0x98, 0x82, 0xf0, 0x0a, 0x8f, 0x3e, 0x07, 0x08, 0xd8, + 0x78, 0xe4, 0x71, 0x7f, 0x46, 0xb9, 0x11, 0x49, 0x23, 0x8f, 0xdd, 0xd7, 0x08, 0x5c, 0x0d, 0xd8, + 0x38, 0x59, 0xa2, 0xa3, 0xff, 0x4b, 0x21, 0x19, 0x75, 0x9c, 0x00, 0x90, 0xe5, 0xaf, 0x46, 0x1f, + 0x9f, 0xfc, 0xa0, 0x50, 0xe6, 0x46, 0x32, 0x74, 0xf4, 0x08, 0x6a, 0x57, 0x8c, 0xbb, 0x74, 0x64, + 0x74, 0x5f, 0xd5, 0x9a, 0xb0, 0xb5, 0x2f, 0x11, 0x7a, 0xaf, 0x0a, 0x15, 0x1e, 0x87, 0xd2, 0x9f, + 0xd2, 0xf6, 0x09, 0xbc, 0x9f, 0x1b, 0x14, 0x1d, 0x40, 0x6d, 0x79, 0xcd, 0x23, 0xdf, 0xd3, 0xfa, + 0xa8, 0xf6, 0xee, 0x2f, 0x6e, 0x77, 0xed, 0xa5, 0x1e, 0x8e, 0xfb, 0xd8, 0x5e, 0x82, 0x8e, 0xbd, + 0xf6, 0x37, 0x15, 0xd8, 0x5e, 0x13, 0x0b, 0x7a, 0x0f, 0xb6, 0xfc, 0x29, 0x19, 0xd3, 0x84, 0x8e, + 0x13, 0x03, 0x0d, 0xa0, 0x1c, 0x90, 0x4b, 0x1a, 0x28, 0xc9, 0xa8, 0xb4, 0xfd, 0xe2, 0xad, 0xaa, + 0xeb, 0xfc, 0x59, 0xe3, 0x07, 0xa1, 0xe4, 0x73, 0x6c, 0xc8, 0xc8, 0x81, 0x8a, 0xcb, 0xa6, 0x53, + 0x12, 0xaa, 0xf2, 0xb2, 0xb9, 0x57, 0xc5, 0xa9, 0x89, 0x10, 0x94, 0x08, 0x1f, 0x0b, 0xa7, 0xa4, + 0xdd, 0x7a, 0x8d, 0xea, 0xb0, 0x49, 0xc3, 0x99, 0xb3, 0xa5, 0x5d, 0x6a, 0xa9, 0x3c, 0x9e, 0x9f, + 0xdc, 0x79, 0x15, 0xab, 0xa5, 0xe2, 0xc5, 0x82, 0x72, 0xa7, 0xa2, 0x5d, 0x7a, 0x8d, 0x7e, 0x03, + 0xe5, 0x29, 0x8b, 0x43, 0x29, 0x1c, 0x4b, 0x6f, 0xf6, 0x41, 0xde, 0x66, 0x4f, 0x15, 0xc2, 0x94, + 0x3f, 0x03, 0x47, 0x03, 0xd8, 0x11, 0x92, 0x45, 0xa3, 0x31, 0x27, 0x2e, 0x1d, 0x45, 0x94, 0xfb, + 0xcc, 0xd3, 0xb7, 0xa1, 0x62, 0x24, 0xdd, 0xbe, 0x93, 0x76, 0xfb, 0x4e, 0xdf, 0x74, 0x7b, 0x7c, + 0x5f, 0x71, 0x8e, 0x14, 0x65, 0xa8, 0x19, 0x68, 0x08, 0xb5, 0x28, 0x0e, 0x82, 0x11, 0x8b, 0x92, + 0x4a, 0x0e, 0x3a, 0xc2, 0x0f, 0x48, 0xd9, 0x30, 0x0e, 0x82, 0xe7, 0x09, 0x09, 0xdb, 0xd1, 0xca, + 0x40, 0x1f, 0x40, 0x79, 0xcc, 0x59, 0x1c, 0x09, 0xc7, 0xd6, 0xc9, 0x30, 0x16, 0xfa, 0x02, 0x2a, + 0x82, 0xba, 0x9c, 0x4a, 0xe1, 0xd4, 0xf4, 0x51, 0x3f, 0xca, 0xfb, 0xc8, 0xb9, 0x86, 0x60, 0x7a, + 0x45, 0x39, 0x0d, 0x5d, 0x8a, 0x53, 0x0e, 0x7a, 0x00, 0x9b, 0x52, 0xce, 0x9d, 0xed, 0x56, 0x71, + 0xcf, 0xea, 0x55, 0x16, 0xb7, 0xbb, 0x9b, 0x17, 0x17, 0x2f, 0xb1, 0xf2, 0xa9, 0x1a, 0x35, 0x61, + 0x42, 0x86, 0x64, 0x4a, 0x9d, 0x7b, 0x3a, 0xb7, 0x4b, 0x1b, 0xbd, 0x04, 0xf0, 0x42, 0x31, 0x72, + 0xf5, 0xa3, 0x70, 0xee, 0xeb, 0xd3, 0x7d, 0xfa, 0xf6, 0xd3, 0xf5, 0xcf, 0xce, 0x4d, 0xa5, 0xdd, + 0x5e, 0xdc, 0xee, 0x56, 0x97, 0x26, 0xae, 0x7a, 0xa1, 0x48, 0x96, 0xa8, 0x07, 0xf6, 0x84, 0x92, + 0x40, 0x4e, 0xdc, 0x09, 0x75, 0xaf, 0x9d, 0xfa, 0xdd, 0x85, 0xf7, 0x99, 0x86, 0x99, 0x08, 0x59, + 0x92, 0x52, 0xb0, 0xda, 0xaa, 0x70, 0x76, 0x74, 0xae, 0x12, 0x03, 0x7d, 0x08, 0xc0, 0x22, 0x1a, + 0x8e, 0x84, 0xf4, 0xfc, 0xd0, 0x41, 0xea, 0xc8, 0xb8, 0xaa, 0x3c, 0xe7, 0xca, 0x81, 0x1e, 0xaa, + 0xb2, 0x48, 0xbc, 0x11, 0x0b, 0x83, 0xb9, 0xf3, 0x23, 0xfd, 0xab, 0xa5, 0x1c, 0xcf, 0xc3, 0x60, + 0xde, 0xf8, 0x1c, 0xec, 0x8c, 0x9a, 0x95, 0x0a, 0xaf, 0xe9, 0xdc, 0x3c, 0x10, 0xb5, 0x54, 0x9f, + 0x9c, 0x91, 0x20, 0x4e, 0xa6, 0xb1, 0x2a, 0x4e, 0x8c, 0xdf, 0x6e, 0x3c, 0x29, 0x36, 0x0e, 0xc0, + 0xce, 0xdc, 0x2a, 0xfa, 0x08, 0xb6, 0x39, 0x1d, 0xfb, 0x42, 0xf2, 0xf9, 0x88, 0xc4, 0x72, 0xe2, + 0xfc, 0x41, 0x13, 0x6a, 0xa9, 0xb3, 0x1b, 0xcb, 0x49, 0x63, 0x04, 0xab, 0xe4, 0xa0, 0x16, 0xd8, + 0x2a, 0xe9, 0x82, 0xf2, 0x19, 0xe5, 0xaa, 0x5f, 0xa8, 0x33, 0x65, 0x5d, 0x4a, 0x1c, 0x82, 0x12, + 0xee, 0x4e, 0xf4, 0xdb, 0xac, 0x62, 0x63, 0xa9, 0xc7, 0x96, 0x2a, 0xd0, 0x3c, 0x36, 0x63, 0xb6, + 0xbf, 0x29, 0x42, 0x2d, 0xdb, 0xb8, 0xd0, 0x61, 0xd2, 0xae, 0xf4, 0x91, 0xee, 0x1d, 0xec, 0xbf, + 0xad, 0xd1, 0xe9, 0xe6, 0x10, 0xc4, 0x2a, 0xd8, 0xa9, 0x9a, 0x31, 0x35, 0x19, 0xfd, 0x1a, 0xb6, + 0x22, 0xc6, 0x65, 0x5a, 0x22, 0x9a, 0xb9, 0x05, 0x9d, 0xf1, 0xb4, 0x98, 0x26, 0xe0, 0xf6, 0x04, + 0xee, 0xad, 0x47, 0x43, 0x8f, 0x61, 0xf3, 0xc5, 0xf1, 0xb0, 0x5e, 0x68, 0x3c, 0x7c, 0x75, 0xd3, + 0xfa, 0xf1, 0xfa, 0x8f, 0x2f, 0x7c, 0x2e, 0x63, 0x12, 0x1c, 0x0f, 0xd1, 0xcf, 0x61, 0xab, 0x7f, + 0x76, 0x8e, 0x71, 0xbd, 0xd8, 0xd8, 0x7d, 0x75, 0xd3, 0x7a, 0xb8, 0x8e, 0x53, 0x3f, 0xb1, 0x38, + 0xf4, 0x30, 0xbb, 0x5c, 0xce, 0x5b, 0xff, 0xdc, 0x00, 0xdb, 0x54, 0xce, 0x77, 0x3d, 0x92, 0x6f, + 0x27, 0xcd, 0x28, 0x7d, 0x12, 0x1b, 0x6f, 0xed, 0x49, 0xb5, 0x84, 0x60, 0xee, 0xf8, 0x11, 0xd4, + 0xfc, 0x68, 0xf6, 0xd9, 0x88, 0x86, 0xe4, 0x32, 0x30, 0xa3, 0x97, 0x85, 0x6d, 0xe5, 0x1b, 0x24, + 0x2e, 0xf5, 0x1e, 0xfd, 0x50, 0x52, 0x1e, 0x9a, 0xa1, 0xca, 0xc2, 0x4b, 0x1b, 0x7d, 0x01, 0x25, + 0x3f, 0x22, 0x53, 0xd3, 0x48, 0x73, 0x4f, 0x70, 0x3c, 0xec, 0x9e, 0x1a, 0x0d, 0xf6, 0xac, 0xc5, + 0xed, 0x6e, 0x49, 0x39, 0xb0, 0xa6, 0xa1, 0x66, 0xda, 0xcb, 0xd4, 0x97, 0x74, 0x6d, 0xb5, 0x70, + 0xc6, 0xd3, 0xfe, 0x6f, 0x09, 0xec, 0xc3, 0x20, 0x16, 0xd2, 0x74, 0x88, 0x77, 0x96, 0xb7, 0x97, + 0xb0, 0x43, 0xf4, 0x74, 0x4e, 0x42, 0x55, 0x6e, 0xf5, 0x8c, 0x60, 0x72, 0xf7, 0x38, 0x37, 0xdc, + 0x12, 0x9c, 0xcc, 0x13, 0xbd, 0xb2, 0x8a, 0xe9, 0x14, 0x71, 0x9d, 0x7c, 0xeb, 0x17, 0x74, 0x0e, + 0xdb, 0x8c, 0xbb, 0x13, 0x2a, 0x64, 0x52, 0xa4, 0xcd, 0x34, 0x9b, 0xfb, 0x3f, 0xe7, 0x79, 0x16, + 0x68, 0x2a, 0x54, 0xb2, 0xdb, 0xf5, 0x18, 0xe8, 0x09, 0x94, 0x38, 0xb9, 0x4a, 0xe7, 0x9d, 0x5c, + 0x7d, 0x63, 0x72, 0x25, 0xd7, 0x42, 0x68, 0x06, 0xfa, 0x13, 0x80, 0xe7, 0x8b, 0x88, 0x48, 0x77, + 0x42, 0xb9, 0xb9, 0xa7, 0xdc, 0x23, 0xf6, 0x97, 0xa8, 0xb5, 0x28, 0x19, 0x36, 0x3a, 0x81, 0xaa, + 0x4b, 0x52, 0xa5, 0x95, 0xef, 0x1e, 0xf1, 0x0f, 0xbb, 0x26, 0x44, 0x5d, 0x85, 0x58, 0xdc, 0xee, + 0x5a, 0xa9, 0x07, 0x5b, 0x2e, 0x31, 0xca, 0x3b, 0x81, 0x6d, 0x35, 0xfa, 0x8f, 0x3c, 0x7a, 0x45, + 0xe2, 0x40, 0x0a, 0xdd, 0x47, 0xef, 0xa8, 0xb8, 0x6a, 0x0a, 0xed, 0x1b, 0x9c, 0xd9, 0x57, 0x4d, + 0x66, 0x7c, 0xe8, 0x2f, 0xb0, 0x43, 0x43, 0x97, 0xcf, 0xb5, 0xce, 0xd2, 0x1d, 0x5a, 0x77, 0x1f, + 0x76, 0xb0, 0x04, 0xaf, 0x1d, 0xb6, 0x4e, 0xbf, 0xe5, 0x6f, 0xfb, 0x00, 0x49, 0x0f, 0x7b, 0xb7, + 0xfa, 0x43, 0x50, 0xf2, 0x88, 0x24, 0x5a, 0x72, 0x35, 0xac, 0xd7, 0x3d, 0xe7, 0xf5, 0x9b, 0x66, + 0xe1, 0xdf, 0x6f, 0x9a, 0x85, 0xbf, 0x2d, 0x9a, 0xc5, 0xd7, 0x8b, 0x66, 0xf1, 0x5f, 0x8b, 0x66, + 0xf1, 0x3f, 0x8b, 0x66, 0xf1, 0xb2, 0xac, 0x3b, 0xff, 0xaf, 0xfe, 0x17, 0x00, 0x00, 0xff, 0xff, + 0xa2, 0xd8, 0xcf, 0x61, 0x3b, 0x10, 0x00, 0x00, } diff --git a/vendor/github.com/docker/swarmkit/api/specs.proto b/vendor/github.com/docker/swarmkit/api/specs.proto index 2442f4ea76..c51c8a2f06 100644 --- a/vendor/github.com/docker/swarmkit/api/specs.proto +++ b/vendor/github.com/docker/swarmkit/api/specs.proto @@ -194,6 +194,12 @@ message ContainerSpec { // OpenStdin declares that the standard input (stdin) should be open. bool open_stdin = 18; + // ReadOnly declares that the container root filesystem is read-only. + // This only impacts the root filesystem, not additional mounts (including + // tmpfs). For additional mounts that are not part of the initial rootfs, + // they will be decided by the modes passed in the mount definition. + bool read_only = 19; + repeated Mount mounts = 8 [(gogoproto.nullable) = false]; // StopGracePeriod the grace period for stopping the container before diff --git a/vendor/github.com/docker/swarmkit/ca/server.go b/vendor/github.com/docker/swarmkit/ca/server.go index 863a4de7e6..091380a860 100644 --- a/vendor/github.com/docker/swarmkit/ca/server.go +++ b/vendor/github.com/docker/swarmkit/ca/server.go @@ -40,7 +40,7 @@ type Server struct { // renewal. They are indexed by node ID. pending map[string]*api.Node - // Started is a channel which gets closed once the server is running + // started is a channel which gets closed once the server is running // and able to service RPCs. started chan struct{} } @@ -102,10 +102,10 @@ func (s *Server) NodeCertificateStatus(ctx context.Context, request *api.NodeCer return nil, grpc.Errorf(codes.InvalidArgument, codes.InvalidArgument.String()) } - if err := s.addTask(); err != nil { + serverCtx, err := s.isRunningLocked() + if err != nil { return nil, err } - defer s.doneTask() var node *api.Node @@ -171,7 +171,7 @@ func (s *Server) NodeCertificateStatus(ctx context.Context, request *api.NodeCer } case <-ctx.Done(): return nil, ctx.Err() - case <-s.ctx.Done(): + case <-serverCtx.Done(): return nil, s.ctx.Err() } } @@ -189,10 +189,9 @@ func (s *Server) IssueNodeCertificate(ctx context.Context, request *api.IssueNod return nil, grpc.Errorf(codes.InvalidArgument, codes.InvalidArgument.String()) } - if err := s.addTask(); err != nil { + if _, err := s.isRunningLocked(); err != nil { return nil, err } - defer s.doneTask() var ( blacklistedCerts map[string]*api.BlacklistedCertificate @@ -407,8 +406,9 @@ func (s *Server) Run(ctx context.Context) error { // returns true without joinTokens being set correctly. s.mu.Lock() s.ctx, s.cancel = context.WithCancel(ctx) - s.mu.Unlock() + ctx = s.ctx close(s.started) + s.mu.Unlock() if err != nil { log.G(ctx).WithFields(logrus.Fields{ @@ -459,8 +459,6 @@ func (s *Server) Run(ctx context.Context) error { } } case <-ctx.Done(): - return ctx.Err() - case <-s.ctx.Done(): return nil } } @@ -469,36 +467,37 @@ func (s *Server) Run(ctx context.Context) error { // Stop stops the CA and closes all grpc streams. func (s *Server) Stop() error { s.mu.Lock() + if !s.isRunning() { s.mu.Unlock() return errors.New("CA signer is already stopped") } s.cancel() - s.mu.Unlock() - // wait for all handlers to finish their CA deals, - s.wg.Wait() s.started = make(chan struct{}) + s.mu.Unlock() + + // Wait for Run to complete + s.wg.Wait() + return nil } // Ready waits on the ready channel and returns when the server is ready to serve. func (s *Server) Ready() <-chan struct{} { + s.mu.Lock() + defer s.mu.Unlock() return s.started } -func (s *Server) addTask() error { +func (s *Server) isRunningLocked() (context.Context, error) { s.mu.Lock() if !s.isRunning() { s.mu.Unlock() - return grpc.Errorf(codes.Aborted, "CA signer is stopped") + return nil, grpc.Errorf(codes.Aborted, "CA signer is stopped") } - s.wg.Add(1) + ctx := s.ctx s.mu.Unlock() - return nil -} - -func (s *Server) doneTask() { - s.wg.Done() + return ctx, nil } func (s *Server) isRunning() bool { diff --git a/vendor/github.com/docker/swarmkit/manager/allocator/network.go b/vendor/github.com/docker/swarmkit/manager/allocator/network.go index 6e12c5a0a4..b30de9ad8f 100644 --- a/vendor/github.com/docker/swarmkit/manager/allocator/network.go +++ b/vendor/github.com/docker/swarmkit/manager/allocator/network.go @@ -371,12 +371,15 @@ func (a *Allocator) doNetworkAlloc(ctx context.Context, ev events.Event) { s := v.Service.Copy() if nc.nwkAllocator.IsServiceAllocated(s) { - break - } - - if err := a.allocateService(ctx, s); err != nil { - log.G(ctx).WithError(err).Errorf("Failed allocation during update of service %s", s.ID) - break + if nc.nwkAllocator.PortsAllocatedInHostPublishMode(s) { + break + } + updatePortsInHostPublishMode(s) + } else { + if err := a.allocateService(ctx, s); err != nil { + log.G(ctx).WithError(err).Errorf("Failed allocation during update of service %s", s.ID) + break + } } if _, err := a.store.Batch(func(batch *store.Batch) error { @@ -641,6 +644,36 @@ func (a *Allocator) commitAllocatedNode(ctx context.Context, batch *store.Batch, return nil } +// This function prepares the service object for being updated when the change regards +// the published ports in host mode: It resets the runtime state ports (s.Endpoint.Ports) +// to the current ingress mode runtime state ports plus the newly configured publish mode ports, +// so that the service allocation invoked on this new service object will trigger the deallocation +// of any old publish mode port and allocation of any new one. +func updatePortsInHostPublishMode(s *api.Service) { + if s.Endpoint != nil { + var portConfigs []*api.PortConfig + for _, portConfig := range s.Endpoint.Ports { + if portConfig.PublishMode == api.PublishModeIngress { + portConfigs = append(portConfigs, portConfig) + } + } + s.Endpoint.Ports = portConfigs + } + + if s.Spec.Endpoint != nil { + if s.Endpoint == nil { + s.Endpoint = &api.Endpoint{} + } + for _, portConfig := range s.Spec.Endpoint.Ports { + if portConfig.PublishMode == api.PublishModeIngress { + continue + } + s.Endpoint.Ports = append(s.Endpoint.Ports, portConfig.Copy()) + } + s.Endpoint.Spec = s.Spec.Endpoint.Copy() + } +} + func (a *Allocator) allocateService(ctx context.Context, s *api.Service) error { nc := a.netCtx diff --git a/vendor/github.com/docker/swarmkit/manager/allocator/networkallocator/networkallocator.go b/vendor/github.com/docker/swarmkit/manager/allocator/networkallocator/networkallocator.go index 20d90a2b28..cee402921e 100644 --- a/vendor/github.com/docker/swarmkit/manager/allocator/networkallocator/networkallocator.go +++ b/vendor/github.com/docker/swarmkit/manager/allocator/networkallocator/networkallocator.go @@ -283,6 +283,12 @@ func (na *NetworkAllocator) IsTaskAllocated(t *api.Task) bool { return true } +// PortsAllocatedInHostPublishMode returns if the passed service has its published ports in +// host (non ingress) mode allocated +func (na *NetworkAllocator) PortsAllocatedInHostPublishMode(s *api.Service) bool { + return na.portAllocator.portsAllocatedInHostPublishMode(s) +} + // IsServiceAllocated returns if the passed service has its network resources allocated or not. func (na *NetworkAllocator) IsServiceAllocated(s *api.Service) bool { // If endpoint mode is VIP and allocator does not have the diff --git a/vendor/github.com/docker/swarmkit/manager/allocator/networkallocator/portallocator.go b/vendor/github.com/docker/swarmkit/manager/allocator/networkallocator/portallocator.go index fc0fc79502..eef193dfd1 100644 --- a/vendor/github.com/docker/swarmkit/manager/allocator/networkallocator/portallocator.go +++ b/vendor/github.com/docker/swarmkit/manager/allocator/networkallocator/portallocator.go @@ -269,6 +269,33 @@ func (pa *portAllocator) serviceDeallocatePorts(s *api.Service) { s.Endpoint.Ports = nil } +func (pa *portAllocator) portsAllocatedInHostPublishMode(s *api.Service) bool { + if s.Endpoint == nil && s.Spec.Endpoint == nil { + return true + } + + portStates := allocatedPorts{} + if s.Endpoint != nil { + for _, portState := range s.Endpoint.Ports { + if portState.PublishMode == api.PublishModeHost { + portStates.addState(portState) + } + } + } + + if s.Spec.Endpoint != nil { + for _, portConfig := range s.Spec.Endpoint.Ports { + if portConfig.PublishMode == api.PublishModeHost { + if portStates.delState(portConfig) == nil { + return false + } + } + } + } + + return true +} + func (pa *portAllocator) isPortsAllocated(s *api.Service) bool { // If service has no user-defined endpoint and allocated endpoint, // we assume it is allocated and return true. diff --git a/vendor/github.com/docker/swarmkit/manager/controlapi/common.go b/vendor/github.com/docker/swarmkit/manager/controlapi/common.go index f180cbd6a6..a0f5e3360e 100644 --- a/vendor/github.com/docker/swarmkit/manager/controlapi/common.go +++ b/vendor/github.com/docker/swarmkit/manager/controlapi/common.go @@ -4,7 +4,10 @@ import ( "regexp" "strings" + "github.com/docker/docker/pkg/plugingetter" + "github.com/docker/libnetwork/ipamapi" "github.com/docker/swarmkit/api" + "github.com/docker/swarmkit/manager/allocator/networkallocator" "github.com/docker/swarmkit/manager/state/store" "google.golang.org/grpc" "google.golang.org/grpc/codes" @@ -76,7 +79,7 @@ func validateAnnotations(m api.Annotations) error { return nil } -func validateDriver(driver *api.Driver) error { +func validateDriver(driver *api.Driver, pg plugingetter.PluginGetter, pluginType string) error { if driver == nil { // It is ok to not specify the driver. We will choose // a default driver. @@ -87,5 +90,18 @@ func validateDriver(driver *api.Driver) error { return grpc.Errorf(codes.InvalidArgument, "driver name: if driver is specified name is required") } + if strings.ToLower(driver.Name) == networkallocator.DefaultDriver || strings.ToLower(driver.Name) == ipamapi.DefaultIPAM { + return nil + } + + p, err := pg.Get(driver.Name, pluginType, plugingetter.Lookup) + if err != nil { + return grpc.Errorf(codes.InvalidArgument, "error during lookup of plugin %s", driver.Name) + } + + if p.IsV1() { + return grpc.Errorf(codes.InvalidArgument, "legacy plugin %s of type %s is not supported in swarm mode", driver.Name, pluginType) + } + return nil } diff --git a/vendor/github.com/docker/swarmkit/manager/controlapi/network.go b/vendor/github.com/docker/swarmkit/manager/controlapi/network.go index 8d662e772e..00634f184b 100644 --- a/vendor/github.com/docker/swarmkit/manager/controlapi/network.go +++ b/vendor/github.com/docker/swarmkit/manager/controlapi/network.go @@ -4,6 +4,9 @@ import ( "fmt" "net" + "github.com/docker/docker/pkg/plugingetter" + "github.com/docker/libnetwork/driverapi" + "github.com/docker/libnetwork/ipamapi" "github.com/docker/swarmkit/api" "github.com/docker/swarmkit/identity" "github.com/docker/swarmkit/manager/state/store" @@ -47,14 +50,14 @@ func validateIPAMConfiguration(ipamConf *api.IPAMConfig) error { return nil } -func validateIPAM(ipam *api.IPAMOptions) error { +func validateIPAM(ipam *api.IPAMOptions, pg plugingetter.PluginGetter) error { if ipam == nil { // It is ok to not specify any IPAM configurations. We // will choose good defaults. return nil } - if err := validateDriver(ipam.Driver); err != nil { + if err := validateDriver(ipam.Driver, pg, ipamapi.PluginEndpointType); err != nil { return err } @@ -67,7 +70,7 @@ func validateIPAM(ipam *api.IPAMOptions) error { return nil } -func validateNetworkSpec(spec *api.NetworkSpec) error { +func validateNetworkSpec(spec *api.NetworkSpec, pg plugingetter.PluginGetter) error { if spec == nil { return grpc.Errorf(codes.InvalidArgument, errInvalidArgument.Error()) } @@ -76,11 +79,11 @@ func validateNetworkSpec(spec *api.NetworkSpec) error { return err } - if err := validateDriver(spec.DriverConfig); err != nil { + if err := validateDriver(spec.DriverConfig, pg, driverapi.NetworkPluginEndpointType); err != nil { return err } - if err := validateIPAM(spec.IPAM); err != nil { + if err := validateIPAM(spec.IPAM, pg); err != nil { return err } @@ -93,7 +96,7 @@ func validateNetworkSpec(spec *api.NetworkSpec) error { func (s *Server) CreateNetwork(ctx context.Context, request *api.CreateNetworkRequest) (*api.CreateNetworkResponse, error) { // if you change this function, you have to change createInternalNetwork in // the tests to match it (except the part where we check the label). - if err := validateNetworkSpec(request.Spec); err != nil { + if err := validateNetworkSpec(request.Spec, s.pg); err != nil { return nil, err } diff --git a/vendor/github.com/docker/swarmkit/manager/controlapi/server.go b/vendor/github.com/docker/swarmkit/manager/controlapi/server.go index d0f28e7b6e..fdbb7f5842 100644 --- a/vendor/github.com/docker/swarmkit/manager/controlapi/server.go +++ b/vendor/github.com/docker/swarmkit/manager/controlapi/server.go @@ -3,6 +3,7 @@ package controlapi import ( "errors" + "github.com/docker/docker/pkg/plugingetter" "github.com/docker/swarmkit/ca" "github.com/docker/swarmkit/manager/state/raft" "github.com/docker/swarmkit/manager/state/store" @@ -18,13 +19,15 @@ type Server struct { store *store.MemoryStore raft *raft.Node rootCA *ca.RootCA + pg plugingetter.PluginGetter } // NewServer creates a Cluster API server. -func NewServer(store *store.MemoryStore, raft *raft.Node, rootCA *ca.RootCA) *Server { +func NewServer(store *store.MemoryStore, raft *raft.Node, rootCA *ca.RootCA, pg plugingetter.PluginGetter) *Server { return &Server{ store: store, raft: raft, rootCA: rootCA, + pg: pg, } } diff --git a/vendor/github.com/docker/swarmkit/manager/dirty.go b/vendor/github.com/docker/swarmkit/manager/dirty.go new file mode 100644 index 0000000000..606dc626e9 --- /dev/null +++ b/vendor/github.com/docker/swarmkit/manager/dirty.go @@ -0,0 +1,57 @@ +package manager + +import ( + "reflect" + + "github.com/docker/swarmkit/api" + "github.com/docker/swarmkit/manager/state/store" +) + +// IsStateDirty returns true if any objects have been added to raft which make +// the state "dirty". Currently, the existence of any object other than the +// default cluster or the local node implies a dirty state. +func (m *Manager) IsStateDirty() (bool, error) { + var ( + storeSnapshot *api.StoreSnapshot + err error + ) + m.raftNode.MemoryStore().View(func(readTx store.ReadTx) { + storeSnapshot, err = m.raftNode.MemoryStore().Save(readTx) + }) + + if err != nil { + return false, err + } + + // Check Nodes and Clusters fields. + nodeID := m.config.SecurityConfig.ClientTLSCreds.NodeID() + if len(storeSnapshot.Nodes) > 1 || (len(storeSnapshot.Nodes) == 1 && storeSnapshot.Nodes[0].ID != nodeID) { + return true, nil + } + + clusterID := m.config.SecurityConfig.ClientTLSCreds.Organization() + if len(storeSnapshot.Clusters) > 1 || (len(storeSnapshot.Clusters) == 1 && storeSnapshot.Clusters[0].ID != clusterID) { + return true, nil + } + + // Use reflection to check that other fields don't have values. This + // lets us implement a whitelist-type approach, where we don't need to + // remember to add individual types here. + + val := reflect.ValueOf(*storeSnapshot) + numFields := val.NumField() + + for i := 0; i != numFields; i++ { + field := val.Field(i) + structField := val.Type().Field(i) + if structField.Type.Kind() != reflect.Slice { + panic("unexpected field type in StoreSnapshot") + } + if structField.Name != "Nodes" && structField.Name != "Clusters" && field.Len() != 0 { + // One of the other data types has an entry + return true, nil + } + } + + return false, nil +} diff --git a/vendor/github.com/docker/swarmkit/manager/dispatcher/dispatcher.go b/vendor/github.com/docker/swarmkit/manager/dispatcher/dispatcher.go index 315e0e34d2..2bb738b08a 100644 --- a/vendor/github.com/docker/swarmkit/manager/dispatcher/dispatcher.go +++ b/vendor/github.com/docker/swarmkit/manager/dispatcher/dispatcher.go @@ -134,7 +134,6 @@ type Dispatcher struct { } // New returns Dispatcher with cluster interface(usually raft.Node). -// NOTE: each handler which does something with raft must add to Dispatcher.wg func New(cluster Cluster, c *Config) *Dispatcher { d := &Dispatcher{ nodes: newNodeStore(c.HeartbeatPeriod, c.HeartbeatEpsilon, c.GracePeriodMultiplier, c.RateLimitPeriod), diff --git a/vendor/github.com/docker/swarmkit/manager/manager.go b/vendor/github.com/docker/swarmkit/manager/manager.go index 8f47ba6aba..1f84670855 100644 --- a/vendor/github.com/docker/swarmkit/manager/manager.go +++ b/vendor/github.com/docker/swarmkit/manager/manager.go @@ -384,7 +384,7 @@ func (m *Manager) Run(parent context.Context) error { return err } - baseControlAPI := controlapi.NewServer(m.raftNode.MemoryStore(), m.raftNode, m.config.SecurityConfig.RootCA()) + baseControlAPI := controlapi.NewServer(m.raftNode.MemoryStore(), m.raftNode, m.config.SecurityConfig.RootCA(), m.config.PluginGetter) baseResourceAPI := resourceapi.New(m.raftNode.MemoryStore()) healthServer := health.NewHealthServer() localHealthServer := health.NewHealthServer() diff --git a/vendor/github.com/docker/swarmkit/manager/state/store/by.go b/vendor/github.com/docker/swarmkit/manager/state/store/by.go index bbcdc528f2..ea27c4b6c0 100644 --- a/vendor/github.com/docker/swarmkit/manager/state/store/by.go +++ b/vendor/github.com/docker/swarmkit/manager/state/store/by.go @@ -49,16 +49,6 @@ func ByName(name string) By { return byName(name) } -type byCN string - -func (b byCN) isBy() { -} - -// ByCN creates an object to pass to Find to select by CN. -func ByCN(name string) By { - return byCN(name) -} - type byService string func (b byService) isBy() { diff --git a/vendor/github.com/docker/swarmkit/manager/state/store/memory.go b/vendor/github.com/docker/swarmkit/manager/state/store/memory.go index b8476b3bd1..d260c96c08 100644 --- a/vendor/github.com/docker/swarmkit/manager/state/store/memory.go +++ b/vendor/github.com/docker/swarmkit/manager/state/store/memory.go @@ -25,7 +25,6 @@ const ( indexServiceID = "serviceid" indexNodeID = "nodeid" indexSlot = "slot" - indexCN = "cn" indexDesiredState = "desiredstate" indexTaskState = "taskstate" indexRole = "role" @@ -573,12 +572,6 @@ func (tx readTx) findIterators(table string, by By, checkType func(By) error) ([ return nil, err } return []memdb.ResultIterator{it}, nil - case byCN: - it, err := tx.memDBTx.Get(table, indexCN, string(v)) - if err != nil { - return nil, err - } - return []memdb.ResultIterator{it}, nil case byIDPrefix: it, err := tx.memDBTx.Get(table, indexID+prefix, string(v)) if err != nil { diff --git a/vendor/github.com/docker/swarmkit/node/node.go b/vendor/github.com/docker/swarmkit/node/node.go index 2fc0e3e9dd..d36d90a5a3 100644 --- a/vendor/github.com/docker/swarmkit/node/node.go +++ b/vendor/github.com/docker/swarmkit/node/node.go @@ -529,6 +529,20 @@ func (n *Node) Agent() *agent.Agent { return n.agent } +// IsStateDirty returns true if any objects have been added to raft which make +// the state "dirty". Currently, the existence of any object other than the +// default cluster or the local node implies a dirty state. +func (n *Node) IsStateDirty() (bool, error) { + n.RLock() + defer n.RUnlock() + + if n.manager == nil { + return false, errors.New("node is not a manager") + } + + return n.manager.IsStateDirty() +} + // Remotes returns a list of known peers known to node. func (n *Node) Remotes() []api.Peer { weights := n.remotes.Weights()