From be931d62704886f7010bad956d3ad4725018c948 Mon Sep 17 00:00:00 2001 From: James DeFelice Date: Wed, 29 Nov 2017 21:48:24 +0000 Subject: [PATCH 1/2] lib/go: initial support for protobuf "well known types" --- lib/go/.gitignore | 1 + lib/go/Makefile | 6 ++++-- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/lib/go/.gitignore b/lib/go/.gitignore index 13f0dc28..c3afcfda 100644 --- a/lib/go/.gitignore +++ b/lib/go/.gitignore @@ -2,3 +2,4 @@ /protoc-gen-go /csi.a /csi/.build/ +/.protoc diff --git a/lib/go/Makefile b/lib/go/Makefile index d7a70e6d..303e3799 100644 --- a/lib/go/Makefile +++ b/lib/go/Makefile @@ -46,7 +46,6 @@ $(PROTOC): unzip "$(PROTOC_TMP_DIR)/$(PROTOC_ZIP)" -d "$(PROTOC_TMP_DIR)" && \ chmod 0755 "$(PROTOC_TMP_BIN)" && \ cp -f "$(PROTOC_TMP_BIN)" "$@" - -rm -fr "$(PROTOC_TMP_DIR)" stat "$@" > /dev/null 2>&1 @@ -82,9 +81,12 @@ CSI_PROTO := ../../csi.proto CSI_GO_TMP := csi/.build/csi.pb.go # This recipe generates the go language bindings to a temp area. +$(CSI_GO_TMP): GO_OUT := plugins=grpc +$(CSI_GO_TMP): GO_OUT := $(GO_OUT),Mgoogle/protobuf/wrappers.proto=github.com/golang/protobuf/ptypes/wrappers +$(CSI_GO_TMP): INCLUDE = -I$(PROTOC_TMP_DIR)/include $(CSI_GO_TMP): $(CSI_PROTO) | $(PROTOC) $(PROTOC_GEN_GO) @mkdir -p "$(@D)" - $(PROTOC) -I "$( Date: Wed, 29 Nov 2017 21:50:22 +0000 Subject: [PATCH 2/2] spec: bool flag for idempotent create/publish responses CreateVolume, ControllerPublishVolume, and NodePublishVolume are idempotent RPCs and it MAY be useful for a CO, operator, or CSI/gRPC intermediary to know when a request was both successful and did not ultimately change the state of the system. --- csi.proto | 22 +++- lib/go/csi/csi.pb.go | 294 ++++++++++++++++++++++++------------------- spec.md | 26 +++- 3 files changed, 213 insertions(+), 129 deletions(-) diff --git a/csi.proto b/csi.proto index 87d98eec..b9ecd050 100644 --- a/csi.proto +++ b/csi.proto @@ -1,6 +1,8 @@ //////// syntax = "proto3"; package csi; + +import "google/protobuf/wrappers.proto"; //////// //////// service Identity { @@ -159,6 +161,12 @@ message CreateVolumeResponse { // relevant to the CO along with information required by the Plugin // to uniquely identify the volume. This field is REQUIRED. VolumeInfo volume_info = 1; + + // A value of `true` indicates that a volume corresponding to the + // specified volume `name` already exists. This is not an error state + // and no recovery actions are expected of a CO. + // This field is OPTIONAL. + .google.protobuf.BoolValue already_exists = 2; } // Specify a capability of a volume. @@ -328,6 +336,12 @@ message ControllerPublishVolumeResponse { // the subsequent `NodePublishVolume` call for the given volume. // This information is opaque to the CO. This field is OPTIONAL. map publish_volume_info = 1; + + // A value of `true` indicates that a volume corresponding to the + // specified publishing criteria already exists. This is not an error + // state and no recovery actions are expected of a CO. + // This field is OPTIONAL. + .google.protobuf.BoolValue already_published = 2; } //////// //////// @@ -545,7 +559,13 @@ message NodePublishVolumeRequest { map volume_attributes = 8; } -message NodePublishVolumeResponse {} +message NodePublishVolumeResponse { + // A value of `true` indicates that a volume corresponding to the + // specified publishing criteria already exists. This is not an error + // state and no recovery actions are expected of a CO. + // This field is OPTIONAL. + .google.protobuf.BoolValue already_published = 1; +} //////// //////// message NodeUnpublishVolumeRequest { diff --git a/lib/go/csi/csi.pb.go b/lib/go/csi/csi.pb.go index 7f53a1cb..a82375d9 100644 --- a/lib/go/csi/csi.pb.go +++ b/lib/go/csi/csi.pb.go @@ -52,6 +52,7 @@ package csi import proto "github.com/golang/protobuf/proto" import fmt "fmt" import math "math" +import google_protobuf "github.com/golang/protobuf/ptypes/wrappers" import ( context "golang.org/x/net/context" @@ -391,6 +392,11 @@ type CreateVolumeResponse struct { // relevant to the CO along with information required by the Plugin // to uniquely identify the volume. This field is REQUIRED. VolumeInfo *VolumeInfo `protobuf:"bytes,1,opt,name=volume_info,json=volumeInfo" json:"volume_info,omitempty"` + // A value of `true` indicates that a volume corresponding to the + // specified volume `name` already exists. This is not an error state + // and no recovery actions are expected of a CO. + // This field is OPTIONAL. + AlreadyExists *google_protobuf.BoolValue `protobuf:"bytes,2,opt,name=already_exists,json=alreadyExists" json:"already_exists,omitempty"` } func (m *CreateVolumeResponse) Reset() { *m = CreateVolumeResponse{} } @@ -405,6 +411,13 @@ func (m *CreateVolumeResponse) GetVolumeInfo() *VolumeInfo { return nil } +func (m *CreateVolumeResponse) GetAlreadyExists() *google_protobuf.BoolValue { + if m != nil { + return m.AlreadyExists + } + return nil +} + // Specify a capability of a volume. type VolumeCapability struct { // Specifies what API the volume will be accessed using. One of the @@ -826,6 +839,11 @@ type ControllerPublishVolumeResponse struct { // the subsequent `NodePublishVolume` call for the given volume. // This information is opaque to the CO. This field is OPTIONAL. PublishVolumeInfo map[string]string `protobuf:"bytes,1,rep,name=publish_volume_info,json=publishVolumeInfo" json:"publish_volume_info,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` + // A value of `true` indicates that a volume corresponding to the + // specified publishing criteria already exists. This is not an error + // state and no recovery actions are expected of a CO. + // This field is OPTIONAL. + AlreadyPublished *google_protobuf.BoolValue `protobuf:"bytes,2,opt,name=already_published,json=alreadyPublished" json:"already_published,omitempty"` } func (m *ControllerPublishVolumeResponse) Reset() { *m = ControllerPublishVolumeResponse{} } @@ -842,6 +860,13 @@ func (m *ControllerPublishVolumeResponse) GetPublishVolumeInfo() map[string]stri return nil } +func (m *ControllerPublishVolumeResponse) GetAlreadyPublished() *google_protobuf.BoolValue { + if m != nil { + return m.AlreadyPublished + } + return nil +} + // ////// // ////// type ControllerUnpublishVolumeRequest struct { @@ -1436,6 +1461,11 @@ func (m *NodePublishVolumeRequest) GetVolumeAttributes() map[string]string { } type NodePublishVolumeResponse struct { + // A value of `true` indicates that a volume corresponding to the + // specified publishing criteria already exists. This is not an error + // state and no recovery actions are expected of a CO. + // This field is OPTIONAL. + AlreadyPublished *google_protobuf.BoolValue `protobuf:"bytes,1,opt,name=already_published,json=alreadyPublished" json:"already_published,omitempty"` } func (m *NodePublishVolumeResponse) Reset() { *m = NodePublishVolumeResponse{} } @@ -1443,6 +1473,13 @@ func (m *NodePublishVolumeResponse) String() string { return proto.Co func (*NodePublishVolumeResponse) ProtoMessage() {} func (*NodePublishVolumeResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{28} } +func (m *NodePublishVolumeResponse) GetAlreadyPublished() *google_protobuf.BoolValue { + if m != nil { + return m.AlreadyPublished + } + return nil +} + // ////// // ////// type NodeUnpublishVolumeRequest struct { @@ -2400,130 +2437,135 @@ var _Node_serviceDesc = grpc.ServiceDesc{ func init() { proto.RegisterFile("csi.proto", fileDescriptor0) } var fileDescriptor0 = []byte{ - // 1993 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x59, 0x4b, 0x73, 0xe3, 0x58, - 0x15, 0xb6, 0x6c, 0xe7, 0xe1, 0xe3, 0x38, 0xed, 0x5c, 0xe7, 0xa1, 0x28, 0xfd, 0x70, 0xab, 0xa7, - 0x7b, 0x42, 0x15, 0xe3, 0xa2, 0x3c, 0x54, 0xd1, 0xe9, 0x9e, 0x19, 0x48, 0x6c, 0x4f, 0x62, 0x26, - 0x71, 0xa7, 0x14, 0xa7, 0x9b, 0x01, 0xa6, 0x84, 0x62, 0xdf, 0xa4, 0x45, 0xcb, 0x92, 0x47, 0x92, - 0x5d, 0xed, 0x3d, 0x4b, 0x16, 0xec, 0xd8, 0xc1, 0x72, 0xa0, 0x58, 0x02, 0xbf, 0x80, 0xbf, 0x00, - 0xac, 0xd9, 0xf2, 0x0f, 0xa8, 0x62, 0x43, 0xdd, 0x87, 0x64, 0x49, 0x96, 0x1c, 0x3b, 0x93, 0x1e, - 0x66, 0x27, 0x9d, 0xc7, 0x77, 0xcf, 0xe3, 0xde, 0x73, 0xce, 0x95, 0x20, 0xd7, 0x71, 0xf4, 0x4a, - 0xdf, 0xb6, 0x5c, 0x0b, 0x65, 0x3a, 0x8e, 0x2e, 0xdf, 0x83, 0x9d, 0x43, 0xec, 0x9e, 0x0d, 0xfa, - 0x7d, 0xcb, 0x76, 0x71, 0xf7, 0x25, 0xb6, 0x1d, 0xdd, 0x32, 0x1d, 0x05, 0x7f, 0x39, 0xc0, 0x8e, - 0x2b, 0xff, 0x0c, 0xee, 0xc6, 0xb3, 0x9d, 0xbe, 0x65, 0x3a, 0x18, 0x3d, 0x07, 0xe4, 0x78, 0x4c, - 0x75, 0xc8, 0xb9, 0xa2, 0x50, 0xce, 0xec, 0xe6, 0xab, 0x2b, 0x15, 0xb2, 0x16, 0x57, 0x51, 0xd6, - 0x9c, 0x28, 0x88, 0xfc, 0x19, 0x2c, 0xf1, 0x67, 0xb4, 0x0e, 0x0b, 0x3d, 0xed, 0x97, 0x96, 0x2d, - 0x0a, 0x65, 0x61, 0xb7, 0xa0, 0xb0, 0x17, 0x4a, 0xd5, 0x4d, 0xcb, 0x16, 0xd3, 0x9c, 0x4a, 0x5e, - 0x08, 0xb5, 0xaf, 0xb9, 0x9d, 0xd7, 0x62, 0x86, 0x51, 0xe9, 0x8b, 0xfc, 0x09, 0xac, 0x1f, 0x62, - 0xf7, 0xd4, 0x18, 0x5c, 0xe9, 0x66, 0xd3, 0xbc, 0xb4, 0xb8, 0x07, 0xe8, 0x09, 0x2c, 0x71, 0xbb, - 0x28, 0x76, 0xd4, 0x2c, 0x8f, 0x29, 0xff, 0x43, 0x80, 0x8d, 0x08, 0x00, 0xf7, 0x11, 0x41, 0xd6, - 0xd4, 0x7a, 0x98, 0xaa, 0xe7, 0x14, 0xfa, 0x8c, 0x1e, 0xc3, 0xea, 0x10, 0x9b, 0x5d, 0xcb, 0xf6, - 0x9c, 0xa6, 0x26, 0xe6, 0x94, 0x02, 0xa3, 0x7a, 0x6e, 0xd5, 0x61, 0xb9, 0xa7, 0x99, 0xfa, 0x25, - 0x76, 0x5c, 0x31, 0x43, 0x83, 0xb2, 0x4b, 0x57, 0x8f, 0x5d, 0xa8, 0x72, 0xc2, 0x45, 0x1b, 0xa6, - 0x6b, 0x8f, 0x14, 0x5f, 0x53, 0x7a, 0x0e, 0x85, 0x10, 0x0b, 0x15, 0x21, 0xf3, 0x06, 0x8f, 0xb8, - 0x41, 0xe4, 0x91, 0xc4, 0x64, 0xa8, 0x19, 0x03, 0xcc, 0xcd, 0x60, 0x2f, 0xcf, 0xd2, 0x4f, 0x05, - 0xf9, 0xbf, 0x19, 0x28, 0xd5, 0x6c, 0xac, 0xb9, 0xf8, 0xa5, 0x65, 0x0c, 0x7a, 0x78, 0xce, 0xb8, - 0xf8, 0xde, 0xa7, 0x03, 0xde, 0xef, 0xc1, 0x6a, 0x47, 0xeb, 0x6b, 0x1d, 0xdd, 0x1d, 0xa9, 0xb6, - 0x66, 0x5e, 0x61, 0x9a, 0x8a, 0x7c, 0x15, 0x51, 0x88, 0x1a, 0x67, 0x29, 0x84, 0xa3, 0x14, 0x3a, - 0xc1, 0x57, 0xf4, 0x29, 0x94, 0x86, 0xd4, 0x0e, 0x95, 0xd0, 0x2f, 0x74, 0x43, 0x77, 0x75, 0xec, - 0x88, 0x59, 0x1a, 0x9c, 0x0d, 0x66, 0x02, 0xe5, 0xd7, 0x3c, 0xf6, 0x48, 0x41, 0xc3, 0x30, 0x45, - 0xc7, 0x0e, 0x3a, 0x02, 0xe8, 0x6b, 0xb6, 0xd6, 0xc3, 0x2e, 0xb6, 0x1d, 0x71, 0x21, 0x10, 0xdb, - 0x18, 0x67, 0x2b, 0xa7, 0xbe, 0x28, 0x8b, 0x6d, 0x40, 0x17, 0xfd, 0x04, 0x8a, 0x03, 0x07, 0xdb, - 0x6a, 0xc7, 0xc6, 0x5d, 0x6c, 0xba, 0xba, 0x66, 0x38, 0xe2, 0x22, 0xc5, 0xfb, 0x20, 0x11, 0xef, - 0xdc, 0xc1, 0x76, 0x6d, 0x2c, 0xcf, 0x40, 0xef, 0x0c, 0xc2, 0x54, 0xe9, 0x63, 0xb8, 0x13, 0x59, - 0x78, 0x9e, 0xcc, 0x49, 0x07, 0xb0, 0x1e, 0xb7, 0xce, 0x5c, 0xd9, 0x3f, 0x82, 0xf5, 0xb0, 0xfd, - 0x7c, 0x4f, 0x7f, 0x0f, 0xf2, 0x3c, 0x0d, 0xba, 0x79, 0x69, 0xf1, 0x1d, 0x70, 0x27, 0x10, 0x7e, - 0xba, 0x31, 0x61, 0xe8, 0x3f, 0xcb, 0xbf, 0xcb, 0x42, 0x31, 0x9a, 0x19, 0xb4, 0x07, 0x0b, 0x17, - 0x86, 0xd5, 0x79, 0xc3, 0x01, 0x1e, 0xc6, 0xe6, 0xaf, 0x72, 0x40, 0x44, 0x18, 0xf5, 0x28, 0xa5, - 0x30, 0x0d, 0xa2, 0xda, 0xb3, 0x06, 0xa6, 0x4b, 0x6d, 0x4e, 0x54, 0x3d, 0x21, 0x22, 0x63, 0x55, - 0xaa, 0x81, 0xf6, 0x21, 0xaf, 0x75, 0x3a, 0xd8, 0x71, 0xd4, 0x9e, 0xd5, 0xf5, 0xf6, 0x5e, 0x39, - 0x1e, 0x60, 0x9f, 0x0a, 0x9e, 0x58, 0x5d, 0xac, 0x80, 0xe6, 0x3f, 0x4b, 0x05, 0xc8, 0x07, 0xac, - 0x92, 0x0e, 0x21, 0x1f, 0x58, 0x09, 0x6d, 0xc1, 0xd2, 0xa5, 0xa3, 0xba, 0xa3, 0xbe, 0x77, 0xe8, - 0x17, 0x2f, 0x9d, 0xf6, 0xa8, 0x8f, 0xd1, 0x03, 0xc8, 0x53, 0x13, 0xd4, 0x4b, 0x43, 0xbb, 0x72, - 0xc4, 0x74, 0x39, 0xb3, 0x9b, 0x53, 0x80, 0x92, 0x3e, 0x25, 0x14, 0xe9, 0xdf, 0x02, 0xc0, 0x78, - 0x49, 0xb4, 0x07, 0x59, 0x6a, 0x22, 0x41, 0x59, 0xad, 0x3e, 0xbe, 0xce, 0xc4, 0x0a, 0xb5, 0x93, - 0xaa, 0xc8, 0xbf, 0x17, 0x20, 0x4b, 0x31, 0xf2, 0xb0, 0x74, 0xde, 0xfa, 0xac, 0xf5, 0xe2, 0x55, - 0xab, 0x98, 0x42, 0x9b, 0x80, 0xce, 0x9a, 0xad, 0xc3, 0xe3, 0x86, 0xda, 0x7a, 0x51, 0x6f, 0xa8, - 0xaf, 0x94, 0x66, 0xbb, 0xa1, 0x14, 0x05, 0xb4, 0x03, 0x5b, 0x41, 0xba, 0xd2, 0xd8, 0xaf, 0x37, - 0x14, 0xf5, 0x45, 0xeb, 0xf8, 0xf3, 0x62, 0x1a, 0x49, 0xb0, 0x79, 0x72, 0x7e, 0xdc, 0x6e, 0x4e, - 0xf2, 0x32, 0xe8, 0x2e, 0x88, 0x01, 0x1e, 0xc7, 0xe0, 0xb0, 0x59, 0x02, 0x1b, 0xe0, 0xb2, 0x47, - 0xce, 0x5c, 0x38, 0x28, 0xf8, 0x69, 0x20, 0x91, 0x92, 0x5f, 0x41, 0x21, 0x74, 0xf2, 0x49, 0x8d, - 0xb4, 0xf1, 0x97, 0x03, 0xdd, 0xc6, 0x5d, 0xf5, 0x62, 0xe4, 0x62, 0x87, 0x86, 0x21, 0xab, 0x14, - 0x3c, 0xea, 0x01, 0x21, 0x92, 0x98, 0x1a, 0x7a, 0x4f, 0x77, 0xb9, 0x4c, 0x9a, 0xca, 0x00, 0x25, - 0x51, 0x01, 0xf9, 0x6f, 0x02, 0xc0, 0x78, 0x53, 0x12, 0x58, 0xbf, 0xf8, 0x84, 0x60, 0x3d, 0x2a, - 0x83, 0x5d, 0x85, 0xb4, 0xde, 0xe5, 0x07, 0x22, 0xad, 0x77, 0xd1, 0x0f, 0x01, 0x34, 0xd7, 0xb5, - 0xf5, 0x8b, 0x01, 0x51, 0x61, 0xc5, 0xf8, 0x41, 0x64, 0xc3, 0x57, 0xf6, 0x7d, 0x09, 0x5e, 0x27, - 0xc6, 0x2a, 0xe4, 0x34, 0x47, 0xd8, 0x73, 0x9d, 0xc4, 0xff, 0x08, 0x50, 0xaa, 0x63, 0x03, 0xdf, - 0xb4, 0x0e, 0xef, 0x40, 0xce, 0x3b, 0xb1, 0x9e, 0x5b, 0xcb, 0xfc, 0x78, 0x76, 0x63, 0x6b, 0x58, - 0x26, 0x50, 0xc3, 0x62, 0x16, 0x9e, 0xb1, 0x86, 0xdd, 0x46, 0x11, 0xda, 0x84, 0xf5, 0xb0, 0x01, - 0xac, 0x08, 0xc9, 0x7f, 0xc9, 0xc2, 0xfd, 0x9a, 0x65, 0xba, 0xb6, 0x65, 0x18, 0xd8, 0x3e, 0x1d, - 0x5c, 0x18, 0xba, 0xf3, 0xfa, 0x1d, 0x44, 0x67, 0x0b, 0x96, 0x4c, 0xab, 0x4b, 0x59, 0x19, 0x76, - 0x9c, 0xc9, 0x6b, 0xb3, 0x8b, 0x0e, 0x60, 0x2d, 0xda, 0x8c, 0x46, 0x62, 0x96, 0xae, 0x93, 0xd0, - 0x8a, 0x8a, 0xc3, 0x68, 0x09, 0x94, 0x60, 0xd9, 0xc6, 0x5a, 0xd7, 0x32, 0x8d, 0x91, 0xb8, 0x50, - 0x16, 0x76, 0x97, 0x15, 0xff, 0x1d, 0x75, 0x12, 0x5b, 0xcb, 0x53, 0xd6, 0x5a, 0xa6, 0x3a, 0x3f, - 0x5b, 0x86, 0xd0, 0xa5, 0xef, 0x44, 0x60, 0x7f, 0x2f, 0xd1, 0x55, 0xf6, 0x66, 0x59, 0x85, 0xbd, - 0x45, 0x77, 0x3e, 0x77, 0x74, 0x4c, 0xbe, 0x8d, 0x9d, 0x20, 0xd5, 0x60, 0x23, 0x76, 0xb9, 0xb9, - 0xb6, 0xd3, 0xdf, 0x05, 0x78, 0x90, 0xe8, 0x13, 0xef, 0x6f, 0x6f, 0xa0, 0xd4, 0x67, 0x0c, 0x35, - 0xdc, 0xe7, 0x48, 0x58, 0x9e, 0x4f, 0x0f, 0x0b, 0x9f, 0xc6, 0x42, 0x54, 0x52, 0x1d, 0x58, 0x60, - 0xd6, 0xfa, 0x51, 0xba, 0x54, 0x87, 0xcd, 0x78, 0xe1, 0xb9, 0xdc, 0xfa, 0x53, 0x1a, 0xca, 0x63, - 0x9b, 0xce, 0xcd, 0xfe, 0x37, 0x7f, 0x1e, 0x70, 0xcc, 0x7e, 0x65, 0x93, 0xd9, 0xb3, 0x48, 0xc8, - 0xe2, 0xcd, 0xfb, 0x06, 0x6b, 0xca, 0x23, 0x78, 0x38, 0xc5, 0x1a, 0x5e, 0x60, 0xfe, 0x95, 0x86, - 0x87, 0x2f, 0x35, 0x43, 0xef, 0xfa, 0x03, 0x50, 0x70, 0x86, 0xbc, 0xd5, 0x98, 0x26, 0xcc, 0xb5, - 0x99, 0x79, 0xe7, 0x5a, 0x3d, 0xee, 0x34, 0xb3, 0x1c, 0x7c, 0xc4, 0x50, 0xae, 0xf3, 0x67, 0xe6, - 0x03, 0x7d, 0x2b, 0x87, 0xf1, 0xe7, 0x20, 0x4f, 0xb3, 0x88, 0x1f, 0xc7, 0xbb, 0x90, 0xf3, 0xaf, - 0x7f, 0x14, 0x77, 0x59, 0x19, 0x13, 0x90, 0x08, 0x4b, 0x3d, 0xec, 0x38, 0xda, 0x95, 0x87, 0xef, - 0xbd, 0xca, 0xbf, 0x12, 0x00, 0x1d, 0xeb, 0x0e, 0x9f, 0xcb, 0xe6, 0xce, 0x18, 0x19, 0xd7, 0xb4, - 0xb7, 0x2a, 0x36, 0x5d, 0x5b, 0xe7, 0xa3, 0x45, 0x41, 0x81, 0x9e, 0xf6, 0xb6, 0xc1, 0x28, 0x64, - 0x96, 0x70, 0x5c, 0xcd, 0x76, 0x75, 0xf3, 0x4a, 0x75, 0xad, 0x37, 0xd8, 0xe4, 0x07, 0xa2, 0xe0, - 0x51, 0xdb, 0x84, 0x28, 0xff, 0x51, 0x80, 0x52, 0xc8, 0x0c, 0xee, 0xd6, 0x53, 0x58, 0xf2, 0xb0, - 0x59, 0x65, 0xb9, 0x4f, 0xed, 0x88, 0x11, 0xad, 0xb0, 0x24, 0x78, 0xe2, 0xe8, 0x1e, 0x80, 0x89, - 0xdf, 0xba, 0x7c, 0x51, 0xe6, 0x75, 0x8e, 0x50, 0xe8, 0x82, 0xd2, 0x1e, 0x2c, 0xb0, 0x54, 0xcc, - 0x3f, 0xa7, 0xff, 0x3a, 0x0d, 0xe8, 0x10, 0xbb, 0xfe, 0x28, 0x36, 0x67, 0xc8, 0x12, 0xf6, 0x71, - 0x7a, 0xde, 0x7d, 0x7c, 0x18, 0xba, 0x9f, 0xb1, 0x63, 0xf0, 0xbe, 0x77, 0xf7, 0x8d, 0x18, 0x37, - 0xed, 0x7a, 0xf6, 0x35, 0x2f, 0x51, 0x72, 0x1d, 0x4a, 0xa1, 0x05, 0x79, 0xe6, 0x3e, 0x00, 0xa4, - 0x0d, 0x35, 0xdd, 0xd0, 0x2e, 0x0c, 0xe6, 0x29, 0xe1, 0xf2, 0x41, 0x72, 0xcd, 0xe7, 0x78, 0x6a, - 0xf2, 0x8f, 0x60, 0x33, 0xd0, 0x2e, 0x6c, 0xeb, 0x62, 0xde, 0x82, 0x2c, 0x6f, 0xc3, 0xd6, 0x04, - 0x02, 0xaf, 0x52, 0x3f, 0x0e, 0xd6, 0x7d, 0x6e, 0xec, 0x0d, 0x6b, 0x94, 0xac, 0x07, 0xcb, 0xe2, - 0x04, 0x16, 0x77, 0xbe, 0x0e, 0x2b, 0x31, 0xc9, 0x2d, 0x47, 0x4a, 0xfc, 0x19, 0xb6, 0x87, 0x7a, - 0x27, 0x98, 0xe7, 0x90, 0x96, 0xfc, 0xdb, 0x34, 0xec, 0x4c, 0x91, 0x46, 0x4f, 0x21, 0x63, 0xf7, - 0x3b, 0xdc, 0xdc, 0xf7, 0xae, 0x03, 0xaf, 0x28, 0xa7, 0xb5, 0xa3, 0x94, 0x42, 0x54, 0xa4, 0xbf, - 0x0a, 0x90, 0x51, 0x4e, 0x6b, 0xe8, 0x63, 0xc8, 0xfa, 0x77, 0xb0, 0xd5, 0xea, 0x77, 0x66, 0x81, - 0xa8, 0x90, 0x6b, 0x9a, 0x42, 0xd5, 0x64, 0x0b, 0xb2, 0xf4, 0xd2, 0x16, 0xba, 0x40, 0x89, 0xb0, - 0x5e, 0x53, 0x1a, 0xfb, 0xed, 0x86, 0x5a, 0x6f, 0x1c, 0x37, 0xda, 0x0d, 0xf5, 0xe5, 0x8b, 0xe3, - 0xf3, 0x93, 0x46, 0x51, 0x20, 0x37, 0xa1, 0xd3, 0xf3, 0x83, 0xe3, 0xe6, 0xd9, 0x91, 0x7a, 0xde, - 0xf2, 0x9e, 0x38, 0x37, 0x8d, 0x8a, 0xb0, 0x72, 0xdc, 0x3c, 0x6b, 0x73, 0xc2, 0x59, 0x31, 0x43, - 0x28, 0x87, 0x8d, 0xb6, 0x5a, 0xdb, 0x3f, 0xdd, 0xaf, 0x35, 0xdb, 0x9f, 0x17, 0xb3, 0x07, 0x8b, - 0xcc, 0x5e, 0xf9, 0x9f, 0x0b, 0x20, 0xb6, 0xac, 0x2e, 0x7e, 0x77, 0x13, 0x6d, 0x37, 0x7e, 0xbc, - 0x61, 0xc7, 0xec, 0xfb, 0x14, 0x30, 0xc9, 0x80, 0xd9, 0xe7, 0x1a, 0x52, 0x3e, 0x5d, 0xcd, 0xbe, - 0xc2, 0xae, 0xda, 0xd7, 0xdc, 0xd7, 0x74, 0x30, 0xce, 0x29, 0xc0, 0x48, 0xa7, 0x9a, 0xfb, 0x3a, - 0x7e, 0x7e, 0x5e, 0xb8, 0xf9, 0xfc, 0xbc, 0x18, 0x99, 0x9f, 0xbf, 0x88, 0x99, 0x47, 0xd8, 0x64, - 0x5b, 0x9d, 0xee, 0xe3, 0x6c, 0x93, 0xf3, 0x2f, 0xe2, 0x7a, 0xed, 0x32, 0xc5, 0xff, 0x70, 0x3a, - 0xfe, 0xac, 0x2d, 0xf6, 0x56, 0x26, 0xc3, 0x6f, 0xcf, 0xe4, 0xbd, 0x03, 0xdb, 0x31, 0x21, 0xe1, - 0x65, 0xec, 0xab, 0x34, 0x48, 0x84, 0xfb, 0x2e, 0x27, 0xd7, 0xc8, 0x8e, 0xcc, 0x4c, 0xec, 0x48, - 0x35, 0x71, 0x82, 0x1d, 0x9f, 0x8a, 0xff, 0xfb, 0xec, 0x7a, 0x0f, 0x76, 0x62, 0xed, 0xe0, 0x81, - 0x7c, 0x06, 0xc5, 0x43, 0xec, 0x12, 0x89, 0x66, 0x7d, 0xde, 0xfa, 0xff, 0x5d, 0x58, 0x0b, 0xe8, - 0xf2, 0x7a, 0x1f, 0x98, 0xf7, 0x85, 0xe0, 0xbc, 0x4f, 0x56, 0xa2, 0xf9, 0xbc, 0x49, 0x43, 0x2b, - 0xc1, 0x5a, 0x40, 0x97, 0x9b, 0x5e, 0x67, 0x5b, 0xe0, 0x6b, 0x36, 0xb1, 0x2f, 0x58, 0x7c, 0x92, - 0xda, 0xd7, 0x27, 0x91, 0xf6, 0xc5, 0x46, 0x2f, 0xc9, 0xcf, 0xef, 0x75, 0x8d, 0xeb, 0x0f, 0x02, - 0x6c, 0xc4, 0xca, 0xa1, 0x6a, 0xb0, 0x65, 0xdd, 0x4f, 0x06, 0x0c, 0x36, 0xab, 0x33, 0xd6, 0xab, - 0x7e, 0x10, 0xea, 0x55, 0x8f, 0xa6, 0xeb, 0x06, 0xbb, 0x54, 0x29, 0xa6, 0x4b, 0x79, 0x9d, 0xa4, - 0xfa, 0x67, 0x01, 0x96, 0x9b, 0x74, 0xa3, 0xb9, 0xa4, 0x1a, 0xae, 0xc7, 0xfd, 0x8b, 0x41, 0x65, - 0x6f, 0xac, 0x4a, 0xfa, 0x8b, 0x23, 0x3d, 0x9c, 0x22, 0xc1, 0x33, 0x97, 0x42, 0x47, 0x50, 0x08, - 0xfd, 0x96, 0x40, 0xdb, 0x71, 0xbf, 0x2a, 0x18, 0xa0, 0x94, 0xfc, 0x17, 0x43, 0x4e, 0x55, 0xbf, - 0x5a, 0x04, 0x18, 0xf7, 0x69, 0xd4, 0x80, 0x95, 0xe0, 0x37, 0x68, 0x24, 0x26, 0x7d, 0x56, 0x97, - 0xb6, 0x63, 0x38, 0xbe, 0x7d, 0x0d, 0x58, 0x09, 0x7e, 0x45, 0xe2, 0x30, 0x31, 0x5f, 0xb6, 0x38, - 0x4c, 0xec, 0x27, 0xa7, 0x14, 0xba, 0x0c, 0x0d, 0x62, 0xc1, 0x03, 0x88, 0x1e, 0xcd, 0xf0, 0xb9, - 0x44, 0x7a, 0x6f, 0x96, 0x8f, 0x07, 0x72, 0x0a, 0x19, 0xb0, 0x9d, 0x78, 0x41, 0x45, 0x8f, 0x67, - 0xba, 0x4e, 0x4b, 0x4f, 0xae, 0x13, 0xf3, 0x57, 0xb3, 0x40, 0x4a, 0xbe, 0x86, 0xa1, 0x27, 0xb3, - 0xdd, 0x1c, 0xa5, 0xf7, 0xaf, 0x95, 0xf3, 0x17, 0x3c, 0x80, 0x7c, 0xe0, 0x9a, 0x83, 0xb6, 0x26, - 0x2f, 0x3e, 0x0c, 0x52, 0x4c, 0xba, 0x11, 0x31, 0x8c, 0xc0, 0x6c, 0xce, 0x31, 0x26, 0xaf, 0x07, - 0x1c, 0x23, 0x66, 0x8c, 0x97, 0x53, 0xa8, 0x05, 0x77, 0x22, 0x73, 0x35, 0xda, 0x89, 0x66, 0x28, - 0x50, 0xde, 0xa4, 0xbb, 0xf1, 0xcc, 0xf8, 0xb4, 0x45, 0x2a, 0xd0, 0x44, 0xda, 0xe2, 0xeb, 0xdc, - 0x44, 0xda, 0x12, 0x0a, 0x99, 0x9c, 0xaa, 0xfe, 0x26, 0x03, 0x59, 0x52, 0x25, 0x50, 0x9b, 0x57, - 0xd3, 0xd0, 0x2e, 0xb9, 0x37, 0x75, 0x08, 0x91, 0xee, 0x27, 0xb1, 0x7d, 0x67, 0x7e, 0x0a, 0xa5, - 0x98, 0x46, 0x83, 0x1e, 0x5c, 0xd3, 0x0a, 0xa5, 0x72, 0xb2, 0x80, 0x8f, 0xfd, 0x11, 0xe4, 0xfc, - 0x4e, 0x83, 0x36, 0xbc, 0x0c, 0x85, 0xba, 0x96, 0xb4, 0x19, 0x25, 0x07, 0xb5, 0xfd, 0xee, 0xc1, - 0xb5, 0xa3, 0x9d, 0x88, 0x6b, 0x4f, 0x36, 0x19, 0xdf, 0xaf, 0x68, 0x7a, 0xc6, 0x7e, 0x25, 0x24, - 0xa6, 0x9c, 0x2c, 0xe0, 0x61, 0x5f, 0x2c, 0xd2, 0x9f, 0xe3, 0x1f, 0xfe, 0x2f, 0x00, 0x00, 0xff, - 0xff, 0x17, 0x25, 0x65, 0xbe, 0x29, 0x1f, 0x00, 0x00, + // 2073 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x19, 0xcb, 0x73, 0xdb, 0x68, + 0x3d, 0xb2, 0x9d, 0xd7, 0xcf, 0x75, 0xea, 0x7c, 0x79, 0x39, 0x4a, 0x9b, 0xa4, 0xea, 0xb6, 0x1b, + 0x66, 0x58, 0x2f, 0xe3, 0x65, 0x86, 0xa6, 0xdd, 0x5d, 0x88, 0x1f, 0xeb, 0x98, 0x4d, 0x5c, 0x8f, + 0xe2, 0xa4, 0x2c, 0xb0, 0x23, 0x64, 0xfb, 0x73, 0x2a, 0x2a, 0x4b, 0x5e, 0x49, 0x36, 0xf5, 0x9d, + 0x1b, 0x1c, 0xb8, 0x71, 0x02, 0x8e, 0x0b, 0xc3, 0x11, 0xf8, 0x0b, 0xf8, 0x1b, 0xe0, 0xcc, 0x95, + 0xff, 0x80, 0x19, 0x2e, 0xcc, 0xf7, 0x90, 0x2c, 0xc9, 0x92, 0x63, 0x77, 0xd3, 0x65, 0x6f, 0xd2, + 0xef, 0xfd, 0xf8, 0xbe, 0xdf, 0x43, 0x82, 0xd5, 0xb6, 0xad, 0xe5, 0xfb, 0x96, 0xe9, 0x98, 0x28, + 0xd9, 0xb6, 0x35, 0x71, 0xff, 0xda, 0x34, 0xaf, 0x75, 0xfc, 0x3e, 0x05, 0xb5, 0x06, 0xdd, 0xf7, + 0x7f, 0x61, 0xa9, 0xfd, 0x3e, 0xb6, 0x6c, 0x46, 0x24, 0xdd, 0x87, 0xbd, 0x2a, 0x76, 0x2e, 0x06, + 0xfd, 0xbe, 0x69, 0x39, 0xb8, 0x73, 0x85, 0x2d, 0x5b, 0x33, 0x0d, 0x5b, 0xc6, 0x5f, 0x0c, 0xb0, + 0xed, 0x48, 0x3f, 0x81, 0x7b, 0xd1, 0x68, 0xbb, 0x6f, 0x1a, 0x36, 0x46, 0xcf, 0x00, 0xd9, 0x2e, + 0x52, 0x19, 0x72, 0x6c, 0x4e, 0x38, 0x4c, 0x1e, 0xa5, 0x0b, 0x77, 0xf2, 0xc4, 0x16, 0xce, 0x22, + 0xaf, 0xdb, 0x61, 0x21, 0xd2, 0xa7, 0xb0, 0xcc, 0x9f, 0xd1, 0x26, 0x2c, 0xf6, 0xd4, 0x9f, 0x9b, + 0x56, 0x4e, 0x38, 0x14, 0x8e, 0x32, 0x32, 0x7b, 0xa1, 0x50, 0xcd, 0x30, 0xad, 0x5c, 0x82, 0x43, + 0xc9, 0x0b, 0x81, 0xf6, 0x55, 0xa7, 0xfd, 0x32, 0x97, 0x64, 0x50, 0xfa, 0x22, 0x7d, 0x0c, 0x9b, + 0x55, 0xec, 0x34, 0xf4, 0xc1, 0xb5, 0x66, 0xd4, 0x8c, 0xae, 0xc9, 0x3d, 0x40, 0x8f, 0x61, 0x99, + 0xdb, 0x45, 0x65, 0x87, 0xcd, 0x72, 0x91, 0xd2, 0x3f, 0x04, 0xd8, 0x0a, 0x09, 0xe0, 0x3e, 0x22, + 0x48, 0x19, 0x6a, 0x0f, 0x53, 0xf6, 0x55, 0x99, 0x3e, 0xa3, 0x47, 0xb0, 0x36, 0xc4, 0x46, 0xc7, + 0xb4, 0x5c, 0xa7, 0xa9, 0x89, 0xab, 0x72, 0x86, 0x41, 0x5d, 0xb7, 0xca, 0xb0, 0xd2, 0x53, 0x0d, + 0xad, 0x8b, 0x6d, 0x27, 0x97, 0xa4, 0x41, 0x39, 0xa2, 0xda, 0x23, 0x15, 0xe5, 0xcf, 0x39, 0x69, + 0xc5, 0x70, 0xac, 0x91, 0xec, 0x71, 0x8a, 0xcf, 0x20, 0x13, 0x40, 0xa1, 0x2c, 0x24, 0x5f, 0xe1, + 0x11, 0x37, 0x88, 0x3c, 0x92, 0x98, 0x0c, 0x55, 0x7d, 0x80, 0xb9, 0x19, 0xec, 0xe5, 0x69, 0xe2, + 0x89, 0x20, 0xfd, 0x37, 0x09, 0x1b, 0x25, 0x0b, 0xab, 0x0e, 0xbe, 0x32, 0xf5, 0x41, 0x0f, 0xcf, + 0x19, 0x17, 0xcf, 0xfb, 0x84, 0xcf, 0xfb, 0x63, 0x58, 0x6b, 0xab, 0x7d, 0xb5, 0xad, 0x39, 0x23, + 0xc5, 0x52, 0x8d, 0x6b, 0x4c, 0x53, 0x91, 0x2e, 0x20, 0x2a, 0xa2, 0xc4, 0x51, 0x32, 0xc1, 0xc8, + 0x99, 0xb6, 0xff, 0x15, 0x7d, 0x02, 0x1b, 0x43, 0x6a, 0x87, 0x42, 0xe0, 0x2d, 0x4d, 0xd7, 0x1c, + 0x0d, 0xdb, 0xb9, 0x14, 0x0d, 0xce, 0x16, 0x33, 0x81, 0xe2, 0x4b, 0x2e, 0x7a, 0x24, 0xa3, 0x61, + 0x10, 0xa2, 0x61, 0x1b, 0x9d, 0x02, 0xf4, 0x55, 0x4b, 0xed, 0x61, 0x07, 0x5b, 0x76, 0x6e, 0xd1, + 0x17, 0xdb, 0x08, 0x67, 0xf3, 0x0d, 0x8f, 0x94, 0xc5, 0xd6, 0xc7, 0x8b, 0x7e, 0x04, 0xd9, 0x81, + 0x8d, 0x2d, 0xa5, 0x6d, 0xe1, 0x0e, 0x36, 0x1c, 0x4d, 0xd5, 0xed, 0xdc, 0x12, 0x95, 0xf7, 0x5e, + 0xac, 0xbc, 0x4b, 0x1b, 0x5b, 0xa5, 0x31, 0x3d, 0x13, 0x7a, 0x77, 0x10, 0x84, 0x8a, 0x1f, 0xc1, + 0xdd, 0x90, 0xe2, 0x79, 0x32, 0x27, 0x16, 0x61, 0x33, 0x4a, 0xcf, 0x5c, 0xd9, 0xff, 0x95, 0x00, + 0x9b, 0x41, 0x07, 0xf8, 0xa1, 0xfe, 0x0e, 0xa4, 0x79, 0x1e, 0x34, 0xa3, 0x6b, 0xf2, 0x23, 0x70, + 0xd7, 0x17, 0x7f, 0x7a, 0x32, 0x61, 0xe8, 0x3d, 0xa3, 0x13, 0x58, 0x53, 0x75, 0x0b, 0xab, 0x9d, + 0x91, 0x82, 0x5f, 0x6b, 0xb6, 0x63, 0x53, 0x6d, 0xe9, 0x82, 0x98, 0x67, 0x25, 0x26, 0xef, 0x96, + 0x98, 0x7c, 0xd1, 0x34, 0xf5, 0x2b, 0x62, 0x82, 0x9c, 0xe1, 0x1c, 0x15, 0xca, 0x20, 0xfd, 0x3e, + 0x05, 0xd9, 0x70, 0x76, 0xd1, 0x31, 0x2c, 0xb6, 0x74, 0xb3, 0xfd, 0x8a, 0xdb, 0xf0, 0x20, 0xf2, + 0x0c, 0xe4, 0x8b, 0x84, 0x84, 0x41, 0x4f, 0x17, 0x64, 0xc6, 0x41, 0x58, 0x7b, 0xe6, 0xc0, 0x70, + 0xb8, 0x25, 0x31, 0xac, 0xe7, 0x84, 0x64, 0xcc, 0x4a, 0x39, 0xd0, 0x09, 0xa4, 0xd5, 0x76, 0x1b, + 0xdb, 0xb6, 0xd2, 0x33, 0x3b, 0xee, 0xf9, 0x3d, 0x8c, 0x16, 0x70, 0x42, 0x09, 0xcf, 0xcd, 0x0e, + 0x96, 0x41, 0xf5, 0x9e, 0xc5, 0x0c, 0xa4, 0x7d, 0x56, 0x89, 0x55, 0x48, 0xfb, 0x34, 0xa1, 0x1d, + 0x58, 0xee, 0xda, 0x8a, 0x33, 0xea, 0xbb, 0x85, 0x63, 0xa9, 0x6b, 0x37, 0x47, 0x7d, 0x8c, 0x0e, + 0x20, 0x4d, 0x4d, 0x50, 0xba, 0xba, 0x7a, 0x4d, 0x82, 0x98, 0x3c, 0x5a, 0x95, 0x81, 0x82, 0x3e, + 0x21, 0x10, 0xf1, 0xdf, 0x02, 0xc0, 0x58, 0x25, 0x3a, 0x86, 0x14, 0x35, 0x91, 0x48, 0x59, 0x2b, + 0x3c, 0xba, 0xc9, 0xc4, 0x3c, 0xb5, 0x93, 0xb2, 0x48, 0x7f, 0x10, 0x20, 0x45, 0x65, 0xa4, 0x61, + 0xf9, 0xb2, 0xfe, 0x69, 0xfd, 0xf9, 0x8b, 0x7a, 0x76, 0x01, 0x6d, 0x03, 0xba, 0xa8, 0xd5, 0xab, + 0x67, 0x15, 0xa5, 0xfe, 0xbc, 0x5c, 0x51, 0x5e, 0xc8, 0xb5, 0x66, 0x45, 0xce, 0x0a, 0x68, 0x0f, + 0x76, 0xfc, 0x70, 0xb9, 0x72, 0x52, 0xae, 0xc8, 0xca, 0xf3, 0xfa, 0xd9, 0x67, 0xd9, 0x04, 0x12, + 0x61, 0xfb, 0xfc, 0xf2, 0xac, 0x59, 0x9b, 0xc4, 0x25, 0xd1, 0x3d, 0xc8, 0xf9, 0x70, 0x5c, 0x06, + 0x17, 0x9b, 0x22, 0x62, 0x7d, 0x58, 0xf6, 0xc8, 0x91, 0x8b, 0xc5, 0x8c, 0x97, 0x06, 0x12, 0x29, + 0xe9, 0x05, 0x64, 0x02, 0xd5, 0x83, 0xd4, 0x59, 0x0b, 0x7f, 0x31, 0xd0, 0x2c, 0xdc, 0x51, 0x5a, + 0x23, 0x07, 0xdb, 0x34, 0x0c, 0x29, 0x39, 0xe3, 0x42, 0x8b, 0x04, 0x48, 0x62, 0xaa, 0x6b, 0x3d, + 0xcd, 0xe1, 0x34, 0x09, 0x4a, 0x03, 0x14, 0x44, 0x09, 0xa4, 0xbf, 0x0b, 0x00, 0xe3, 0x73, 0x4d, + 0xc4, 0x7a, 0x05, 0x2c, 0x20, 0xd6, 0x85, 0x32, 0xb1, 0x6b, 0x90, 0xd0, 0x3a, 0xfc, 0x52, 0x25, + 0xb4, 0x0e, 0xfa, 0x3e, 0x80, 0xea, 0x38, 0x96, 0xd6, 0x1a, 0x10, 0x16, 0x56, 0xd0, 0x0f, 0x42, + 0x77, 0x26, 0x7f, 0xe2, 0x51, 0xf0, 0x5a, 0x33, 0x66, 0x21, 0x15, 0x21, 0x84, 0x9e, 0xeb, 0x36, + 0xff, 0x47, 0x80, 0x8d, 0x32, 0xd6, 0xf1, 0x9b, 0xd6, 0xf2, 0x3d, 0x58, 0x75, 0x2f, 0xbd, 0xeb, + 0xd6, 0x0a, 0xbf, 0xe1, 0x9d, 0xc8, 0x3a, 0x98, 0xf4, 0xd5, 0xc1, 0x08, 0xc5, 0x33, 0xd6, 0xc1, + 0xdb, 0x28, 0x64, 0xdb, 0xb0, 0x19, 0x34, 0x80, 0xd5, 0x31, 0xe9, 0xaf, 0x29, 0xd8, 0x2f, 0x99, + 0x86, 0x63, 0x99, 0xba, 0x8e, 0xad, 0xc6, 0xa0, 0xa5, 0x6b, 0xf6, 0xcb, 0xb7, 0x10, 0x9d, 0x1d, + 0x58, 0x36, 0xcc, 0x0e, 0x45, 0x25, 0xd9, 0x75, 0x26, 0xaf, 0xb5, 0x0e, 0x2a, 0xc2, 0x7a, 0xb8, + 0xa1, 0x8d, 0x72, 0x29, 0xaa, 0x27, 0xa6, 0x9d, 0x65, 0x87, 0xe1, 0x12, 0x28, 0xc2, 0x0a, 0x29, + 0x93, 0xa6, 0xa1, 0x8f, 0x72, 0x8b, 0x87, 0xc2, 0xd1, 0x8a, 0xec, 0xbd, 0xa3, 0x76, 0x6c, 0x7b, + 0x7a, 0xc2, 0xda, 0xd3, 0x54, 0xe7, 0x67, 0xcb, 0x10, 0xea, 0x7a, 0x4e, 0xf8, 0xce, 0xf7, 0x32, + 0xd5, 0x72, 0x3c, 0x8b, 0x16, 0xf6, 0x16, 0x3e, 0xf9, 0xdc, 0xd1, 0x31, 0xf8, 0x36, 0x4e, 0x82, + 0x58, 0x82, 0xad, 0x48, 0x75, 0x73, 0x1d, 0xa7, 0xdf, 0x25, 0xe0, 0x20, 0xd6, 0x27, 0xde, 0x22, + 0x5f, 0xc1, 0x46, 0x9f, 0x21, 0x94, 0x60, 0xab, 0x24, 0x61, 0x79, 0x36, 0x3d, 0x2c, 0x7c, 0xa2, + 0x0b, 0x40, 0x49, 0x75, 0x60, 0x81, 0x59, 0xef, 0x87, 0xe1, 0xa8, 0x0a, 0xeb, 0x6e, 0x77, 0xe5, + 0x48, 0xdc, 0x99, 0xa1, 0xc1, 0x66, 0x39, 0x53, 0xc3, 0xe5, 0x11, 0xcb, 0xb0, 0x1d, 0xad, 0x75, + 0xae, 0xf8, 0xfc, 0x39, 0x01, 0x87, 0x63, 0xe7, 0x2e, 0x8d, 0xfe, 0xd7, 0x7f, 0xb1, 0x70, 0xc4, + 0xc1, 0x67, 0x63, 0xe2, 0xd3, 0x50, 0xec, 0xa3, 0xcd, 0xfb, 0x1a, 0x8b, 0xd3, 0x43, 0x78, 0x30, + 0xc5, 0x1a, 0x5e, 0xa9, 0xfe, 0x95, 0x80, 0x07, 0x57, 0xaa, 0xae, 0x75, 0xbc, 0x61, 0xcc, 0x3f, + 0xd0, 0xde, 0x6a, 0x4c, 0x63, 0x86, 0xec, 0xe4, 0xbc, 0x43, 0xb6, 0x16, 0x55, 0x16, 0x58, 0x0e, + 0x3e, 0x64, 0x52, 0x6e, 0xf2, 0x67, 0xe6, 0xca, 0x70, 0x2b, 0xb7, 0xfa, 0xa7, 0x20, 0x4d, 0xb3, + 0x88, 0xdf, 0xeb, 0x7b, 0xb0, 0xea, 0xed, 0xa2, 0x54, 0xee, 0x8a, 0x3c, 0x06, 0xa0, 0x1c, 0x2c, + 0xf7, 0xb0, 0x6d, 0xab, 0xd7, 0xae, 0x7c, 0xf7, 0x55, 0xfa, 0xa5, 0x00, 0xe8, 0x4c, 0xb3, 0xf9, + 0x80, 0x37, 0x77, 0xc6, 0xc8, 0xdc, 0xa7, 0xbe, 0x56, 0xb0, 0xe1, 0x58, 0x1a, 0x9f, 0x51, 0x32, + 0x32, 0xf4, 0xd4, 0xd7, 0x15, 0x06, 0x21, 0x43, 0x89, 0xed, 0xa8, 0x96, 0xa3, 0x19, 0xd7, 0x8a, + 0x63, 0xbe, 0xc2, 0x06, 0xbf, 0x10, 0x19, 0x17, 0xda, 0x24, 0x40, 0xe9, 0x4f, 0x02, 0x6c, 0x04, + 0xcc, 0xe0, 0x6e, 0x3d, 0x81, 0x65, 0x57, 0x36, 0x2b, 0x51, 0xfb, 0xd4, 0x8e, 0x08, 0xd2, 0x3c, + 0x4b, 0x82, 0x4b, 0x8e, 0xee, 0x03, 0x18, 0xf8, 0xb5, 0xc3, 0x95, 0x32, 0xaf, 0x57, 0x09, 0x84, + 0x2a, 0x14, 0x8f, 0x61, 0x91, 0xa5, 0x62, 0xee, 0x9d, 0x41, 0xfa, 0x75, 0x02, 0x50, 0x15, 0x3b, + 0xde, 0x4c, 0x37, 0x67, 0xc8, 0x62, 0xce, 0x71, 0x62, 0xde, 0x73, 0x5c, 0x0d, 0x2c, 0x8b, 0xec, + 0x1a, 0xbc, 0xeb, 0x2e, 0xe2, 0x21, 0xe3, 0xa6, 0xed, 0x8a, 0x5f, 0x71, 0xa3, 0x93, 0xca, 0xb0, + 0x11, 0x50, 0xc8, 0x33, 0xf7, 0x1e, 0x20, 0x75, 0xa8, 0x6a, 0xba, 0xda, 0xd2, 0x99, 0xa7, 0x04, + 0xcb, 0x27, 0xd2, 0x75, 0x0f, 0xe3, 0xb2, 0x49, 0x3f, 0x80, 0x6d, 0x5f, 0xdf, 0xb1, 0xcc, 0xd6, + 0xbc, 0x05, 0x59, 0xda, 0x85, 0x9d, 0x09, 0x09, 0xbc, 0x4a, 0xfd, 0xd0, 0x5f, 0xf7, 0xb9, 0xb1, + 0x6f, 0x58, 0xa3, 0x24, 0xcd, 0x5f, 0x16, 0x27, 0x64, 0x71, 0xe7, 0xcb, 0x70, 0x27, 0x22, 0xb9, + 0x87, 0xa1, 0x12, 0x7f, 0x81, 0xad, 0xa1, 0xd6, 0xf6, 0xe7, 0x39, 0xc0, 0x25, 0xfd, 0x36, 0x01, + 0x7b, 0x53, 0xa8, 0xd1, 0x13, 0x48, 0x5a, 0xfd, 0x36, 0x37, 0xf7, 0x9d, 0x9b, 0x84, 0xe7, 0xe5, + 0x46, 0xe9, 0x74, 0x41, 0x26, 0x2c, 0xe2, 0xdf, 0x04, 0x48, 0xca, 0x8d, 0x12, 0xfa, 0x08, 0x52, + 0xde, 0x32, 0xb7, 0x56, 0xf8, 0xd6, 0x2c, 0x22, 0xf2, 0x64, 0xdf, 0x93, 0x29, 0x9b, 0x64, 0x42, + 0x8a, 0x6e, 0x7f, 0x81, 0x4d, 0x2c, 0x07, 0x9b, 0x25, 0xb9, 0x72, 0xd2, 0xac, 0x28, 0xe5, 0xca, + 0x59, 0xa5, 0x59, 0x51, 0xae, 0x9e, 0x9f, 0x5d, 0x9e, 0x57, 0xb2, 0x02, 0x59, 0xa9, 0x1a, 0x97, + 0xc5, 0xb3, 0xda, 0xc5, 0xa9, 0x72, 0x59, 0x77, 0x9f, 0x38, 0x36, 0x81, 0xb2, 0x70, 0xe7, 0xac, + 0x76, 0xd1, 0xe4, 0x80, 0x8b, 0x6c, 0x92, 0x40, 0xaa, 0x95, 0xa6, 0x52, 0x3a, 0x69, 0x9c, 0x94, + 0x6a, 0xcd, 0xcf, 0xb2, 0xa9, 0xe2, 0x12, 0xb3, 0x57, 0xfa, 0xe7, 0x22, 0xe4, 0xea, 0x66, 0x07, + 0xbf, 0xbd, 0xd1, 0xb8, 0x13, 0x3d, 0x27, 0xb1, 0x6b, 0xf6, 0x5d, 0x2a, 0x30, 0xce, 0x80, 0x39, + 0x06, 0xa4, 0x03, 0x48, 0x3b, 0xaa, 0x75, 0x8d, 0x1d, 0xa5, 0xaf, 0x3a, 0x2f, 0xe9, 0x84, 0xbd, + 0x2a, 0x03, 0x03, 0x35, 0x54, 0xe7, 0x65, 0xf4, 0x20, 0xbe, 0xf8, 0xe6, 0x83, 0xf8, 0x52, 0x68, + 0x10, 0xff, 0x3c, 0x62, 0x1e, 0x61, 0x23, 0x72, 0x61, 0xba, 0x8f, 0xb3, 0x8d, 0xe0, 0x3f, 0x8b, + 0xea, 0xb5, 0x2b, 0x54, 0xfe, 0x07, 0xd3, 0xe5, 0xcf, 0xda, 0x62, 0x6f, 0x65, 0x32, 0xfc, 0xe6, + 0x8c, 0xf0, 0x1d, 0xd8, 0x8d, 0x08, 0x09, 0xaf, 0x2a, 0x91, 0xe3, 0xb4, 0x30, 0xff, 0x38, 0x2d, + 0x7d, 0x99, 0x00, 0x91, 0xa8, 0x79, 0x9b, 0x23, 0x70, 0xe8, 0x68, 0x27, 0x27, 0x8e, 0xb6, 0x12, + 0x3b, 0x0a, 0x8f, 0xaf, 0xd7, 0xff, 0x7d, 0x08, 0xbe, 0x0f, 0x7b, 0x91, 0x76, 0xf0, 0xc6, 0xf2, + 0x14, 0xb2, 0x55, 0xec, 0x10, 0x8a, 0x5a, 0x79, 0xde, 0x46, 0xf2, 0x6d, 0x58, 0xf7, 0xf1, 0xf2, + 0x14, 0xfb, 0x16, 0x07, 0xc1, 0xbf, 0x38, 0x10, 0x4d, 0xf4, 0x60, 0xbc, 0x49, 0x67, 0xdc, 0x80, + 0x75, 0x1f, 0x2f, 0x37, 0xbd, 0xcc, 0x8e, 0xc0, 0x57, 0xec, 0x86, 0x9f, 0xb3, 0xf8, 0xc4, 0xf5, + 0xc1, 0x8f, 0x43, 0x7d, 0x90, 0xcd, 0x70, 0xa2, 0x97, 0xdf, 0x9b, 0x3a, 0xe0, 0x1f, 0x05, 0xd8, + 0x8a, 0xa4, 0x43, 0x05, 0x7f, 0xef, 0xdb, 0x8f, 0x17, 0xe8, 0xef, 0x7a, 0x17, 0xac, 0xe9, 0x7d, + 0x2f, 0xd0, 0xf4, 0x1e, 0x4e, 0xe7, 0xf5, 0xb7, 0xbb, 0x8d, 0x88, 0x76, 0xe7, 0xb6, 0xa4, 0xc2, + 0x5f, 0x04, 0x58, 0xa9, 0xd1, 0x83, 0xe6, 0x90, 0xb2, 0xba, 0x19, 0xf5, 0x87, 0x09, 0x1d, 0xba, + 0xf3, 0x59, 0xdc, 0xbf, 0x29, 0xf1, 0xc1, 0x14, 0x0a, 0x9e, 0xb9, 0x05, 0x74, 0x0a, 0x99, 0xc0, + 0xcf, 0x16, 0xb4, 0x1b, 0xf5, 0x03, 0x86, 0x09, 0x14, 0xe3, 0xff, 0xcd, 0x48, 0x0b, 0x85, 0x2f, + 0x97, 0x00, 0xc6, 0x0d, 0x1f, 0x55, 0xe0, 0x8e, 0xff, 0xc3, 0x3a, 0xca, 0xc5, 0xfd, 0x2c, 0x10, + 0x77, 0x23, 0x30, 0x9e, 0x7d, 0x15, 0xb8, 0xe3, 0xff, 0xae, 0xc5, 0xc5, 0x44, 0x7c, 0x6b, 0xe3, + 0x62, 0x22, 0x3f, 0x82, 0x2d, 0xa0, 0x6e, 0x60, 0xa2, 0xf3, 0x5f, 0x40, 0xf4, 0x70, 0x86, 0x0f, + 0x38, 0xe2, 0x3b, 0xb3, 0x7c, 0xce, 0x90, 0x16, 0x90, 0x0e, 0xbb, 0xb1, 0x9b, 0x2e, 0x7a, 0x34, + 0xd3, 0x5e, 0x2e, 0x3e, 0xbe, 0x89, 0xcc, 0xd3, 0x66, 0x82, 0x18, 0xbf, 0xcf, 0xa1, 0xc7, 0xb3, + 0xad, 0xa0, 0xe2, 0xbb, 0x37, 0xd2, 0x79, 0x0a, 0x8b, 0x90, 0xf6, 0xed, 0x4b, 0x68, 0x67, 0x72, + 0x83, 0x62, 0x22, 0x73, 0x71, 0xab, 0x15, 0x93, 0xe1, 0x1b, 0xf2, 0xb9, 0x8c, 0xc9, 0x3d, 0x83, + 0xcb, 0x88, 0xd8, 0x07, 0xa4, 0x05, 0x54, 0x87, 0xbb, 0xa1, 0x01, 0x1d, 0xed, 0x85, 0x33, 0xe4, + 0x2b, 0x6f, 0xe2, 0xbd, 0x68, 0x64, 0x74, 0xda, 0x42, 0x15, 0x68, 0x22, 0x6d, 0xd1, 0x75, 0x6e, + 0x22, 0x6d, 0x31, 0x85, 0x4c, 0x5a, 0x28, 0xfc, 0x26, 0x09, 0x29, 0x52, 0x25, 0x50, 0x93, 0x57, + 0xd3, 0xc0, 0x29, 0xb9, 0x3f, 0x75, 0x9a, 0x11, 0xf7, 0xe3, 0xd0, 0x9e, 0x33, 0x3f, 0x86, 0x8d, + 0x88, 0x46, 0x83, 0x0e, 0x6e, 0x68, 0x85, 0xe2, 0x61, 0x3c, 0x81, 0x27, 0xfb, 0x43, 0x58, 0xf5, + 0x3a, 0x0d, 0xda, 0x72, 0x33, 0x14, 0xe8, 0x5a, 0xe2, 0x76, 0x18, 0xec, 0xe7, 0xf6, 0xba, 0x07, + 0xe7, 0x0e, 0x77, 0x22, 0xce, 0x3d, 0xd9, 0x64, 0x3c, 0xbf, 0xc2, 0xe9, 0x19, 0xfb, 0x15, 0x93, + 0x98, 0xc3, 0x78, 0x02, 0x57, 0x76, 0x6b, 0x89, 0x0e, 0x3b, 0x1f, 0xfc, 0x2f, 0x00, 0x00, 0xff, + 0xff, 0x15, 0x02, 0x23, 0xbe, 0x1f, 0x20, 0x00, 0x00, } diff --git a/spec.md b/spec.md index 0a2b75c1..1dc56043 100644 --- a/spec.md +++ b/spec.md @@ -226,6 +226,8 @@ Each SP MUST provide: ```protobuf syntax = "proto3"; package csi; + +import "google/protobuf/wrappers.proto"; ``` There are three sets of RPCs: @@ -495,6 +497,12 @@ message CreateVolumeResponse { // relevant to the CO along with information required by the Plugin // to uniquely identify the volume. This field is REQUIRED. VolumeInfo volume_info = 1; + + // A value of `true` indicates that a volume corresponding to the + // specified volume `name` already exists. This is not an error state + // and no recovery actions are expected of a CO. + // This field is OPTIONAL. + .google.protobuf.BoolValue already_exists = 2; } // Specify a capability of a volume. @@ -603,7 +611,7 @@ The CO MUST implement the specified error recovery behavior when it encounters t Condition | gRPC Code | Description | Recovery Behavior | --- | --- | --- | --- | -| Volume already exists | 6 ALREADY_EXISTS | Indicates that a volume corresponding to the specified volume `name` already exists. Plugin MUST also return a valid `CreateVolumeResponse`. | Caller MUST assume the `CreateVolume` call succeeded. | +| Volume created | 0 OK | Indicates that the volume corresponding to `name` with the requested capabilities, capacity, and parameters was created or else already exists. | Caller MUST assume the `CreateVolume` call succeeded. | | Operation pending for volume | 9 FAILED_PRECONDITION | Indicates that there is a already an operation pending for the specified volume. In general the Cluster Orchestrator (CO) is responsible for ensuring that there is no more than one call "in-flight" per volume at a given time. However, in some circumstances, the CO MAY lose state (for example when the CO crashes and restarts), and MAY issue multiple calls simultaneously for the same volume. The Plugin, SHOULD handle this as gracefully as possible, and MAY return this error code to reject secondary calls. | Caller SHOULD ensure that there are no other calls pending for the specified volume, and then retry with exponential back off. | | Unsupported `capacity_range` | 11 OUT_OF_RANGE | Indicates that the capacity range is not allowed by the Plugin. More human-readable information MAY be provided in the gRPC `status.message` field. | Caller MUST fix the capacity range before retrying. | | Call not implemented | 12 UNIMPLEMENTED | CreateVolume call is not implemented by the plugin or disabled in the Plugin's current mode of operation. | Caller MUST NOT retry. Caller MAY call `ControllerGetCapabilities` or `NodeGetCapabilities` to discover Plugin capabilities. | @@ -715,6 +723,12 @@ message ControllerPublishVolumeResponse { // the subsequent `NodePublishVolume` call for the given volume. // This information is opaque to the CO. This field is OPTIONAL. map publish_volume_info = 1; + + // A value of `true` indicates that a volume corresponding to the + // specified publishing criteria already exists. This is not an error + // state and no recovery actions are expected of a CO. + // This field is OPTIONAL. + .google.protobuf.BoolValue already_published = 2; } ``` @@ -726,6 +740,7 @@ The CO MUST implement the specified error recovery behavior when it encounters t Condition | gRPC Code | Description | Recovery Behavior | --- | --- | --- | --- | +| Volume published | 0 OK | Indicates that a volume corresponding to the specified publishing criteria is published, or was already published. | Caller MUST assume the `ControllerPublishVolume` call succeeded. | | Volume does not exists | 5 NOT_FOUND | Indicates that a volume corresponding to the specified `volume_id` does not exist. | Caller MUST verify that the `volume_id` is correct and that the volume is accessible and has not been deleted before retrying with exponential back off. | | Node does not exists | 5 NOT_FOUND | Indicates that a node corresponding to the specified `node_id` does not exist. | Caller MUST verify that the `node_id` is correct and that the node is available and has not been terminated or deleted before retrying with exponential backoff. | | Volume published to another node | 6 ALREADY_EXISTS | Indicates that a volume corresponding to the specified `volume_id` is already attached to another node and does not support multi-node attach. If this error code is returned, the Plugin SHOULD specify the `node_id` of the node the volume is already attached to as part of the gRPC `status.message`. | Caller SHOULD ensure the specified volume is not attached to any other node before retrying with exponential back off. | @@ -1084,7 +1099,13 @@ message NodePublishVolumeRequest { map volume_attributes = 8; } -message NodePublishVolumeResponse {} +message NodePublishVolumeResponse { + // A value of `true` indicates that a volume corresponding to the + // specified publishing criteria already exists. This is not an error + // state and no recovery actions are expected of a CO. + // This field is OPTIONAL. + .google.protobuf.BoolValue already_published = 1; +} ``` ##### NodePublishVolume Errors @@ -1095,6 +1116,7 @@ The CO MUST implement the specified error recovery behavior when it encounters t Condition | gRPC Code | Description | Recovery Behavior | --- | --- | --- | --- | +| Volume published | 0 OK | Indicates that a volume corresponding to the specified publishing criteria is published, or was already published. | Caller MUST assume the `NodePublishVolume` call succeeded. | | Volume does not exists | 5 NOT_FOUND | Indicates that a volume corresponding to the specified `volume_id` does not exist. | Caller MUST verify that the `volume_id` is correct and that the volume is accessible and has not been deleted before retrying with exponential back off. | | Operation pending for volume | 9 FAILED_PRECONDITION | Indicates that there is a already an operation pending for the specified volume. In general the Cluster Orchestrator (CO) is responsible for ensuring that there is no more than one call "in-flight" per volume at a given time. However, in some circumstances, the CO MAY lose state (for example when the CO crashes and restarts), and MAY issue multiple calls simultaneously for the same volume. The Plugin, SHOULD handle this as gracefully as possible, and MAY return this error code to reject secondary calls. | Caller SHOULD ensure that there are no other calls pending for the specified volume, and then retry with exponential back off. | | Exceeds capabilities | 10 ABORTED | Indicates that the CO has exceeded the volume's capabilities because the volume does not have MULTI_NODE capability. | Caller MAY retry at a higher-level by calling `ValidateVolumeCapabilities` to validate the volume capabilities, or wait for the volume to be unpublished on the node. |