1
0
Fork 0
mirror of https://github.com/moby/moby.git synced 2022-11-09 12:21:53 -05:00

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 <yong.tang.github@outlook.com>
This commit is contained in:
Yong Tang 2017-01-29 08:11:26 -08:00
parent 8820d0aec0
commit 849816dd0f
16 changed files with 349 additions and 161 deletions

View file

@ -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

View file

@ -484,6 +484,11 @@ type ContainerSpec struct {
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"`
// 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.
@ -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,
}

View file

@ -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

View file

@ -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 {

View file

@ -371,13 +371,16 @@ func (a *Allocator) doNetworkAlloc(ctx context.Context, ev events.Event) {
s := v.Service.Copy()
if nc.nwkAllocator.IsServiceAllocated(s) {
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 {
return a.commitAllocatedService(ctx, batch, s)
@ -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

View file

@ -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

View file

@ -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.

View file

@ -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
}

View file

@ -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
}

View file

@ -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,
}
}

57
vendor/github.com/docker/swarmkit/manager/dirty.go generated vendored Normal file
View file

@ -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
}

View file

@ -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),

View file

@ -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()

View file

@ -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() {

View file

@ -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 {

View file

@ -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()