diff --git a/.dockerignore.protogen b/.dockerignore.protogen new file mode 100644 index 000000000..23264b5be --- /dev/null +++ b/.dockerignore.protogen @@ -0,0 +1,50 @@ +# Git files +.git +.gitignore + +# Documentation +*.md +docs/ + +# Build artifacts +bin/ +artifacts/ +dist/ + +# IDE files +.vscode/ +.idea/ +*.swp +*.swo + +# OS files +.DS_Store +Thumbs.db + +# Docker files (except the ones we need) +Dockerfile +*.dockerfile +.dockerignore + +# Test files +*_test.go +testdata/ + +# CI/CD +.github/ +.travis.yml +.circleci/ + +# Other unnecessary files for protobuf generation +charts/ +config/ +hack/ +images/ +manifests/ +mesh-worker-service/ +tools/ +LICENSE +install.sh +bump_version.sh +*.sh +!controllers/proto/generate.sh \ No newline at end of file diff --git a/.github/workflows/bundle-release.yml b/.github/workflows/bundle-release.yml index fd0d7f8f1..44ed6c383 100644 --- a/.github/workflows/bundle-release.yml +++ b/.github/workflows/bundle-release.yml @@ -49,10 +49,10 @@ jobs: username: ${{ secrets.DOCKER_USER }} password: ${{ secrets.DOCKER_PASSWORD }} - - name: Set up GO 1.24.2 + - name: Set up GO 1.24.4 uses: actions/setup-go@v1 with: - go-version: 1.24.2 + go-version: 1.24.4 id: go - name: InstallKubebuilder @@ -180,10 +180,10 @@ jobs: username: ${{ secrets.DOCKER_USER }} password: ${{ secrets.DOCKER_PASSWORD }} - - name: Set up GO 1.24.2 + - name: Set up GO 1.24.4 uses: actions/setup-go@v1 with: - go-version: 1.24.2 + go-version: 1.24.4 id: go - name: InstallKubebuilder diff --git a/.github/workflows/olm-verify.yml b/.github/workflows/olm-verify.yml index 373e2bd5a..6dff4f683 100644 --- a/.github/workflows/olm-verify.yml +++ b/.github/workflows/olm-verify.yml @@ -34,10 +34,10 @@ jobs: - name: checkout uses: actions/checkout@v2 - - name: Set up GO 1.24.2 + - name: Set up GO 1.24.4 uses: actions/setup-go@v1 with: - go-version: 1.24.2 + go-version: 1.24.4 id: go - name: InstallKubebuilder diff --git a/.github/workflows/project.yml b/.github/workflows/project.yml index 6d783fd28..5edc6b22c 100644 --- a/.github/workflows/project.yml +++ b/.github/workflows/project.yml @@ -18,7 +18,7 @@ jobs: strategy: fail-fast: false matrix: - go-version: [1.22.12, 1.24.2] + go-version: [1.22.12, 1.24.4] steps: - name: Free Disk Space (Ubuntu) uses: jlumbroso/free-disk-space@v1.3.0 diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 9e86e5a25..61543dc26 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -37,10 +37,10 @@ jobs: username: ${{ secrets.DOCKER_USER }} password: ${{ secrets.DOCKER_PASSWORD }} - - name: Set up GO 1.24.2 + - name: Set up GO 1.24.4 uses: actions/setup-go@v1 with: - go-version: 1.24.2 + go-version: 1.24.4 id: go - name: InstallKubebuilder diff --git a/.github/workflows/test-helm-charts.yml b/.github/workflows/test-helm-charts.yml index 4fbfad068..1d51288a9 100644 --- a/.github/workflows/test-helm-charts.yml +++ b/.github/workflows/test-helm-charts.yml @@ -83,11 +83,11 @@ jobs: run: hack/kind-cluster-build.sh --name chart-testing -c 1 -v 10 --k8sVersion v1.23.17 if: steps.list-changed.outputs.changed == 'true' - - name: Set up GO 1.24.2 + - name: Set up GO 1.24.4 if: steps.list-changed.outputs.changed == 'true' uses: actions/setup-go@v1 with: - go-version: 1.24.2 + go-version: 1.24.4 id: go - name: setup kubebuilder 3.6.0 diff --git a/.github/workflows/trivy.yml b/.github/workflows/trivy.yml index 26cff21d6..6d34de1a6 100644 --- a/.github/workflows/trivy.yml +++ b/.github/workflows/trivy.yml @@ -34,10 +34,10 @@ jobs: repository: ${{github.event.pull_request.head.repo.full_name}} ref: ${{ github.event.pull_request.head.sha }} - - name: Set up GO 1.24.2 + - name: Set up GO 1.24.4 uses: actions/setup-go@v1 with: - go-version: 1.24.2 + go-version: 1.24.4 id: go - name: InstallKubebuilder diff --git a/.github/workflows/trivy_scheduled_master.yml b/.github/workflows/trivy_scheduled_master.yml index 2dca11a61..7b9cd36db 100644 --- a/.github/workflows/trivy_scheduled_master.yml +++ b/.github/workflows/trivy_scheduled_master.yml @@ -45,10 +45,10 @@ jobs: repository: ${{github.event.pull_request.head.repo.full_name}} ref: ${{ github.event.pull_request.head.sha }} - - name: Set up GO 1.24.2 + - name: Set up GO 1.24.4 uses: actions/setup-go@v1 with: - go-version: 1.24.2 + go-version: 1.24.4 id: go - name: InstallKubebuilder diff --git a/Dockerfile b/Dockerfile index 7a0e257cb..066d424b6 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,5 +1,5 @@ # Build the manager binary -FROM golang:1.24.2-bullseye as builder +FROM golang:1.24.4-bullseye as builder WORKDIR /workspace/api COPY api/ . diff --git a/Dockerfile.protogen b/Dockerfile.protogen new file mode 100644 index 000000000..9700d2cb3 --- /dev/null +++ b/Dockerfile.protogen @@ -0,0 +1,42 @@ +# Build environment for protobuf generation +# Requirements: protoc 3.17.3, protoc-gen-go v1.3.5 +# Using Debian base to avoid musl/glibc compatibility issues with protoc x86_64 binaries +FROM golang:1.24.4 + +# Install system dependencies +RUN apt-get update && apt-get install -y \ + bash \ + curl \ + unzip \ + git \ + make \ + && rm -rf /var/lib/apt/lists/* + +# Set environment variables +ENV PROTOC_VERSION=3.17.3 +ENV PROTOC_GEN_GO_VERSION=v1.3.5 + +# Install protoc 3.17.3 +RUN set -eux; \ + PROTOC_ZIP="protoc-${PROTOC_VERSION}-linux-x86_64.zip"; \ + curl -OL "https://github.com/protocolbuffers/protobuf/releases/download/v${PROTOC_VERSION}/${PROTOC_ZIP}"; \ + unzip -o "$PROTOC_ZIP" -d /usr/local; \ + rm -f "$PROTOC_ZIP" + +# Install protoc-gen-go 1.25.0 +RUN go install google.golang.org/protobuf/cmd/protoc-gen-go@latest + +# Verify installations +RUN protoc --version + +# Set working directory +WORKDIR /workspace + +# Copy the entire project +COPY . . + +# Make sure generate.sh is executable +RUN chmod +x controllers/proto/generate.sh + +# Default command: run the generate script +CMD ["/workspace/controllers/proto/generate.sh", "/workspace"] \ No newline at end of file diff --git a/README-protogen.md b/README-protogen.md new file mode 100644 index 000000000..37d726d6f --- /dev/null +++ b/README-protogen.md @@ -0,0 +1,71 @@ +# Protobuf Generation Docker Environment + +This Docker environment contains the tools and environment required to generate function-mesh protobuf Go definitions. + +## Requirements + +- protoc: v3.17.3 +- protoc-gen-go: v1.25.0 +- protoc-gen-go-grpc: v1.0.0 +- Go: 1.24.4+ + +**Note**: This image uses a Debian base (not Alpine) to ensure compatibility with the protoc x86_64 binary, which is compiled for glibc rather than musl libc. + +## Build and Usage + +### 1. Build Docker Image + +```bash +docker build -f Dockerfile.protogen -t function-mesh-protogen . +``` + +### 2. Run Protobuf Generation + +```bash +# Run container and generate protobuf files +docker run --rm -v $(pwd):/workspace function-mesh-protogen + +# Or run interactively for debugging +docker run --rm -it -v $(pwd):/workspace function-mesh-protogen bash +``` + +### 3. Manual Script Execution + +If you need manual control over the generation process: + +```bash +# Enter container +docker run --rm -it -v $(pwd):/workspace function-mesh-protogen bash + +# Execute manually inside container +cd /workspace +./controllers/proto/generate.sh /workspace +``` + +## Generated Files + +The script will update the following files: +- `controllers/proto/Function.pb.go` + +## Environment Verification + +You can verify tool versions inside the container: + +```bash +protoc --version # Should show libprotoc 3.17.3 +go version # Should show go1.24.4+ +``` + +## Troubleshooting + +If you encounter permission issues, ensure the generate.sh script has execute permissions: + +```bash +chmod +x controllers/proto/generate.sh +``` + +If you encounter protoc-gen-go not found issues, ensure $GOPATH/bin is in PATH: + +```bash +export PATH=$PATH:$(go env GOPATH)/bin +``` \ No newline at end of file diff --git a/api/compute/v1alpha1/common.go b/api/compute/v1alpha1/common.go index f679038ad..6c53bc2b8 100644 --- a/api/compute/v1alpha1/common.go +++ b/api/compute/v1alpha1/common.go @@ -315,6 +315,16 @@ type ProducerConfig struct { CryptoConfig *CryptoConfig `json:"cryptoConfig,omitempty"` BatchBuilder string `json:"batchBuilder,omitempty"` CompressionType CompressionType `json:"compressionType,omitempty"` + BatchingConfig *BatchingConfig `json:"batchingConfig,omitempty"` +} + +type BatchingConfig struct { + Enabled bool `json:"enabled,omitempty"` + BatchingMaxPublishDelayMs int32 `json:"batchingMaxPublishDelayMs,omitempty"` + RoundRobinRouterBatchingPartitionSwitchFrequency int32 `json:"roundRobinRouterBatchingPartitionSwitchFrequency,omitempty"` + BatchingMaxMessages int32 `json:"batchingMaxMessages,omitempty"` + BatchingMaxBytes int32 `json:"batchingMaxBytes,omitempty"` + BatchBuilder string `json:"batchBuilder,omitempty"` } type CryptoConfig struct { diff --git a/api/go.mod b/api/go.mod index c7fd39dff..49fc4b224 100644 --- a/api/go.mod +++ b/api/go.mod @@ -1,6 +1,6 @@ module github.com/streamnative/function-mesh/api -go 1.24.2 +go 1.24.4 require ( k8s.io/api v0.30.9 diff --git a/controllers/proto/Function.pb.go b/controllers/proto/Function.pb.go index f89c501b5..30291cbf9 100644 --- a/controllers/proto/Function.pb.go +++ b/controllers/proto/Function.pb.go @@ -1,4 +1,4 @@ -// +//* // Licensed to the Apache Software Foundation (ASF) under one // or more contributor license agreements. See the NOTICE file // distributed with this work for additional information @@ -15,22 +15,21 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -// // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.25.0 -// protoc v3.19.4 +// protoc-gen-go v1.36.6 +// protoc v3.17.3 // source: Function.proto package proto import ( - proto "github.com/golang/protobuf/proto" protoreflect "google.golang.org/protobuf/reflect/protoreflect" protoimpl "google.golang.org/protobuf/runtime/protoimpl" reflect "reflect" sync "sync" + unsafe "unsafe" ) const ( @@ -40,10 +39,6 @@ const ( _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) ) -// This is a compile-time assertion that a sufficiently up-to-date version -// of the legacy proto package is being used. -const _ = proto.ProtoPackageIsVersion4 - type ProcessingGuarantees int32 const ( @@ -446,22 +441,19 @@ func (CryptoSpec_FailureAction) EnumDescriptor() ([]byte, []int) { } type Resources struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Cpu float64 `protobuf:"fixed64,1,opt,name=cpu,proto3" json:"cpu,omitempty"` + Ram int64 `protobuf:"varint,2,opt,name=ram,proto3" json:"ram,omitempty"` + Disk int64 `protobuf:"varint,3,opt,name=disk,proto3" json:"disk,omitempty"` unknownFields protoimpl.UnknownFields - - Cpu float64 `protobuf:"fixed64,1,opt,name=cpu,proto3" json:"cpu,omitempty"` - Ram int64 `protobuf:"varint,2,opt,name=ram,proto3" json:"ram,omitempty"` - Disk int64 `protobuf:"varint,3,opt,name=disk,proto3" json:"disk,omitempty"` + sizeCache protoimpl.SizeCache } func (x *Resources) Reset() { *x = Resources{} - if protoimpl.UnsafeEnabled { - mi := &file_Function_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_Function_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *Resources) String() string { @@ -472,7 +464,7 @@ func (*Resources) ProtoMessage() {} func (x *Resources) ProtoReflect() protoreflect.Message { mi := &file_Function_proto_msgTypes[0] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -509,21 +501,18 @@ func (x *Resources) GetDisk() int64 { } type RetryDetails struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - MaxMessageRetries int32 `protobuf:"varint,1,opt,name=maxMessageRetries,proto3" json:"maxMessageRetries,omitempty"` - DeadLetterTopic string `protobuf:"bytes,2,opt,name=deadLetterTopic,proto3" json:"deadLetterTopic,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + MaxMessageRetries int32 `protobuf:"varint,1,opt,name=maxMessageRetries,proto3" json:"maxMessageRetries,omitempty"` + DeadLetterTopic string `protobuf:"bytes,2,opt,name=deadLetterTopic,proto3" json:"deadLetterTopic,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *RetryDetails) Reset() { *x = RetryDetails{} - if protoimpl.UnsafeEnabled { - mi := &file_Function_proto_msgTypes[1] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_Function_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *RetryDetails) String() string { @@ -534,7 +523,7 @@ func (*RetryDetails) ProtoMessage() {} func (x *RetryDetails) ProtoReflect() protoreflect.Message { mi := &file_Function_proto_msgTypes[1] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -564,10 +553,7 @@ func (x *RetryDetails) GetDeadLetterTopic() string { } type FunctionDetails struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - + state protoimpl.MessageState `protogen:"open.v1"` Tenant string `protobuf:"bytes,1,opt,name=tenant,proto3" json:"tenant,omitempty"` Namespace string `protobuf:"bytes,2,opt,name=namespace,proto3" json:"namespace,omitempty"` Name string `protobuf:"bytes,3,opt,name=name,proto3" json:"name,omitempty"` @@ -579,6 +565,7 @@ type FunctionDetails struct { Runtime FunctionDetails_Runtime `protobuf:"varint,8,opt,name=runtime,proto3,enum=proto.FunctionDetails_Runtime" json:"runtime,omitempty"` // Deprecated since, see https://github.com/apache/pulsar/issues/15560 // + // Deprecated: Marked as deprecated in Function.proto. AutoAck bool `protobuf:"varint,9,opt,name=autoAck,proto3" json:"autoAck,omitempty"` Parallelism int32 `protobuf:"varint,10,opt,name=parallelism,proto3" json:"parallelism,omitempty"` Source *SourceSpec `protobuf:"bytes,11,opt,name=source,proto3" json:"source,omitempty"` @@ -595,15 +582,15 @@ type FunctionDetails struct { RetainOrdering bool `protobuf:"varint,21,opt,name=retainOrdering,proto3" json:"retainOrdering,omitempty"` RetainKeyOrdering bool `protobuf:"varint,22,opt,name=retainKeyOrdering,proto3" json:"retainKeyOrdering,omitempty"` SubscriptionPosition SubscriptionPosition `protobuf:"varint,23,opt,name=subscriptionPosition,proto3,enum=proto.SubscriptionPosition" json:"subscriptionPosition,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *FunctionDetails) Reset() { *x = FunctionDetails{} - if protoimpl.UnsafeEnabled { - mi := &file_Function_proto_msgTypes[2] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_Function_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *FunctionDetails) String() string { @@ -614,7 +601,7 @@ func (*FunctionDetails) ProtoMessage() {} func (x *FunctionDetails) ProtoReflect() protoreflect.Message { mi := &file_Function_proto_msgTypes[2] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -692,7 +679,7 @@ func (x *FunctionDetails) GetRuntime() FunctionDetails_Runtime { return FunctionDetails_JAVA } -// Deprecated: Do not use. +// Deprecated: Marked as deprecated in Function.proto. func (x *FunctionDetails) GetAutoAck() bool { if x != nil { return x.AutoAck @@ -792,27 +779,24 @@ func (x *FunctionDetails) GetSubscriptionPosition() SubscriptionPosition { } type ConsumerSpec struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - + state protoimpl.MessageState `protogen:"open.v1"` SchemaType string `protobuf:"bytes,1,opt,name=schemaType,proto3" json:"schemaType,omitempty"` SerdeClassName string `protobuf:"bytes,2,opt,name=serdeClassName,proto3" json:"serdeClassName,omitempty"` IsRegexPattern bool `protobuf:"varint,3,opt,name=isRegexPattern,proto3" json:"isRegexPattern,omitempty"` ReceiverQueueSize *ConsumerSpec_ReceiverQueueSize `protobuf:"bytes,4,opt,name=receiverQueueSize,proto3" json:"receiverQueueSize,omitempty"` - SchemaProperties map[string]string `protobuf:"bytes,5,rep,name=schemaProperties,proto3" json:"schemaProperties,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` - ConsumerProperties map[string]string `protobuf:"bytes,6,rep,name=consumerProperties,proto3" json:"consumerProperties,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + SchemaProperties map[string]string `protobuf:"bytes,5,rep,name=schemaProperties,proto3" json:"schemaProperties,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` + ConsumerProperties map[string]string `protobuf:"bytes,6,rep,name=consumerProperties,proto3" json:"consumerProperties,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` CryptoSpec *CryptoSpec `protobuf:"bytes,7,opt,name=cryptoSpec,proto3" json:"cryptoSpec,omitempty"` PoolMessages bool `protobuf:"varint,8,opt,name=poolMessages,proto3" json:"poolMessages,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *ConsumerSpec) Reset() { *x = ConsumerSpec{} - if protoimpl.UnsafeEnabled { - mi := &file_Function_proto_msgTypes[3] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_Function_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *ConsumerSpec) String() string { @@ -823,7 +807,7 @@ func (*ConsumerSpec) ProtoMessage() {} func (x *ConsumerSpec) ProtoReflect() protoreflect.Message { mi := &file_Function_proto_msgTypes[3] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -895,25 +879,23 @@ func (x *ConsumerSpec) GetPoolMessages() bool { } type ProducerSpec struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - MaxPendingMessages int32 `protobuf:"varint,1,opt,name=maxPendingMessages,proto3" json:"maxPendingMessages,omitempty"` - MaxPendingMessagesAcrossPartitions int32 `protobuf:"varint,2,opt,name=maxPendingMessagesAcrossPartitions,proto3" json:"maxPendingMessagesAcrossPartitions,omitempty"` - UseThreadLocalProducers bool `protobuf:"varint,3,opt,name=useThreadLocalProducers,proto3" json:"useThreadLocalProducers,omitempty"` - CryptoSpec *CryptoSpec `protobuf:"bytes,4,opt,name=cryptoSpec,proto3" json:"cryptoSpec,omitempty"` - BatchBuilder string `protobuf:"bytes,5,opt,name=batchBuilder,proto3" json:"batchBuilder,omitempty"` - CompressionType CompressionType `protobuf:"varint,6,opt,name=compressionType,proto3,enum=proto.CompressionType" json:"compressionType,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + MaxPendingMessages int32 `protobuf:"varint,1,opt,name=maxPendingMessages,proto3" json:"maxPendingMessages,omitempty"` + MaxPendingMessagesAcrossPartitions int32 `protobuf:"varint,2,opt,name=maxPendingMessagesAcrossPartitions,proto3" json:"maxPendingMessagesAcrossPartitions,omitempty"` + UseThreadLocalProducers bool `protobuf:"varint,3,opt,name=useThreadLocalProducers,proto3" json:"useThreadLocalProducers,omitempty"` + CryptoSpec *CryptoSpec `protobuf:"bytes,4,opt,name=cryptoSpec,proto3" json:"cryptoSpec,omitempty"` + BatchBuilder string `protobuf:"bytes,5,opt,name=batchBuilder,proto3" json:"batchBuilder,omitempty"` + CompressionType CompressionType `protobuf:"varint,6,opt,name=compressionType,proto3,enum=proto.CompressionType" json:"compressionType,omitempty"` + BatchingSpec *BatchingSpec `protobuf:"bytes,7,opt,name=batchingSpec,proto3" json:"batchingSpec,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *ProducerSpec) Reset() { *x = ProducerSpec{} - if protoimpl.UnsafeEnabled { - mi := &file_Function_proto_msgTypes[4] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_Function_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *ProducerSpec) String() string { @@ -924,7 +906,7 @@ func (*ProducerSpec) ProtoMessage() {} func (x *ProducerSpec) ProtoReflect() protoreflect.Message { mi := &file_Function_proto_msgTypes[4] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -981,13 +963,17 @@ func (x *ProducerSpec) GetCompressionType() CompressionType { return CompressionType_LZ4 } -type CryptoSpec struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields +func (x *ProducerSpec) GetBatchingSpec() *BatchingSpec { + if x != nil { + return x.BatchingSpec + } + return nil +} - CryptoKeyReaderClassName string `protobuf:"bytes,1,opt,name=cryptoKeyReaderClassName,proto3" json:"cryptoKeyReaderClassName,omitempty"` - CryptoKeyReaderConfig string `protobuf:"bytes,2,opt,name=cryptoKeyReaderConfig,proto3" json:"cryptoKeyReaderConfig,omitempty"` +type CryptoSpec struct { + state protoimpl.MessageState `protogen:"open.v1"` + CryptoKeyReaderClassName string `protobuf:"bytes,1,opt,name=cryptoKeyReaderClassName,proto3" json:"cryptoKeyReaderClassName,omitempty"` + CryptoKeyReaderConfig string `protobuf:"bytes,2,opt,name=cryptoKeyReaderConfig,proto3" json:"cryptoKeyReaderConfig,omitempty"` // key names used by producer to encrypt data ProducerEncryptionKeyName []string `protobuf:"bytes,3,rep,name=producerEncryptionKeyName,proto3" json:"producerEncryptionKeyName,omitempty"` // define the action if producer fail to encrypt data @@ -996,15 +982,15 @@ type CryptoSpec struct { // define the action if consumer fail to decrypt data // one of FAIL, DISCARD, CONSUME ConsumerCryptoFailureAction CryptoSpec_FailureAction `protobuf:"varint,5,opt,name=consumerCryptoFailureAction,proto3,enum=proto.CryptoSpec_FailureAction" json:"consumerCryptoFailureAction,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *CryptoSpec) Reset() { *x = CryptoSpec{} - if protoimpl.UnsafeEnabled { - mi := &file_Function_proto_msgTypes[5] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_Function_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *CryptoSpec) String() string { @@ -1015,7 +1001,7 @@ func (*CryptoSpec) ProtoMessage() {} func (x *CryptoSpec) ProtoReflect() protoreflect.Message { mi := &file_Function_proto_msgTypes[5] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1065,12 +1051,93 @@ func (x *CryptoSpec) GetConsumerCryptoFailureAction() CryptoSpec_FailureAction { return CryptoSpec_FAIL } -type SourceSpec struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields +type BatchingSpec struct { + state protoimpl.MessageState `protogen:"open.v1"` + Enabled bool `protobuf:"varint,1,opt,name=enabled,proto3" json:"enabled,omitempty"` + BatchingMaxPublishDelayMs int32 `protobuf:"varint,2,opt,name=batchingMaxPublishDelayMs,proto3" json:"batchingMaxPublishDelayMs,omitempty"` + RoundRobinRouterBatchingPartitionSwitchFrequency int32 `protobuf:"varint,3,opt,name=roundRobinRouterBatchingPartitionSwitchFrequency,proto3" json:"roundRobinRouterBatchingPartitionSwitchFrequency,omitempty"` + BatchingMaxMessages int32 `protobuf:"varint,4,opt,name=batchingMaxMessages,proto3" json:"batchingMaxMessages,omitempty"` + BatchingMaxBytes int32 `protobuf:"varint,5,opt,name=batchingMaxBytes,proto3" json:"batchingMaxBytes,omitempty"` + BatchBuilder string `protobuf:"bytes,6,opt,name=batchBuilder,proto3" json:"batchBuilder,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *BatchingSpec) Reset() { + *x = BatchingSpec{} + mi := &file_Function_proto_msgTypes[6] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *BatchingSpec) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*BatchingSpec) ProtoMessage() {} + +func (x *BatchingSpec) ProtoReflect() protoreflect.Message { + mi := &file_Function_proto_msgTypes[6] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} - ClassName string `protobuf:"bytes,1,opt,name=className,proto3" json:"className,omitempty"` +// Deprecated: Use BatchingSpec.ProtoReflect.Descriptor instead. +func (*BatchingSpec) Descriptor() ([]byte, []int) { + return file_Function_proto_rawDescGZIP(), []int{6} +} + +func (x *BatchingSpec) GetEnabled() bool { + if x != nil { + return x.Enabled + } + return false +} + +func (x *BatchingSpec) GetBatchingMaxPublishDelayMs() int32 { + if x != nil { + return x.BatchingMaxPublishDelayMs + } + return 0 +} + +func (x *BatchingSpec) GetRoundRobinRouterBatchingPartitionSwitchFrequency() int32 { + if x != nil { + return x.RoundRobinRouterBatchingPartitionSwitchFrequency + } + return 0 +} + +func (x *BatchingSpec) GetBatchingMaxMessages() int32 { + if x != nil { + return x.BatchingMaxMessages + } + return 0 +} + +func (x *BatchingSpec) GetBatchingMaxBytes() int32 { + if x != nil { + return x.BatchingMaxBytes + } + return 0 +} + +func (x *BatchingSpec) GetBatchBuilder() string { + if x != nil { + return x.BatchBuilder + } + return "" +} + +type SourceSpec struct { + state protoimpl.MessageState `protogen:"open.v1"` + ClassName string `protobuf:"bytes,1,opt,name=className,proto3" json:"className,omitempty"` // map in json format Configs string `protobuf:"bytes,2,opt,name=configs,proto3" json:"configs,omitempty"` TypeClassName string `protobuf:"bytes,5,opt,name=typeClassName,proto3" json:"typeClassName,omitempty"` @@ -1078,12 +1145,12 @@ type SourceSpec struct { SubscriptionType SubscriptionType `protobuf:"varint,3,opt,name=subscriptionType,proto3,enum=proto.SubscriptionType" json:"subscriptionType,omitempty"` // @deprecated -- use topicsToSchema // - // Deprecated: Do not use. - TopicsToSerDeClassName map[string]string `protobuf:"bytes,4,rep,name=topicsToSerDeClassName,proto3" json:"topicsToSerDeClassName,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + // Deprecated: Marked as deprecated in Function.proto. + TopicsToSerDeClassName map[string]string `protobuf:"bytes,4,rep,name=topicsToSerDeClassName,proto3" json:"topicsToSerDeClassName,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` // * - InputSpecs map[string]*ConsumerSpec `protobuf:"bytes,10,rep,name=inputSpecs,proto3" json:"inputSpecs,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + InputSpecs map[string]*ConsumerSpec `protobuf:"bytes,10,rep,name=inputSpecs,proto3" json:"inputSpecs,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` TimeoutMs uint64 `protobuf:"varint,6,opt,name=timeoutMs,proto3" json:"timeoutMs,omitempty"` - // Deprecated: Do not use. + // Deprecated: Marked as deprecated in Function.proto. TopicsPattern string `protobuf:"bytes,7,opt,name=topicsPattern,proto3" json:"topicsPattern,omitempty"` // If specified, this will refer to an archive that is // already present in the server @@ -1093,15 +1160,15 @@ type SourceSpec struct { SubscriptionPosition SubscriptionPosition `protobuf:"varint,12,opt,name=subscriptionPosition,proto3,enum=proto.SubscriptionPosition" json:"subscriptionPosition,omitempty"` NegativeAckRedeliveryDelayMs uint64 `protobuf:"varint,13,opt,name=negativeAckRedeliveryDelayMs,proto3" json:"negativeAckRedeliveryDelayMs,omitempty"` SkipToLatest bool `protobuf:"varint,14,opt,name=skipToLatest,proto3" json:"skipToLatest,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *SourceSpec) Reset() { *x = SourceSpec{} - if protoimpl.UnsafeEnabled { - mi := &file_Function_proto_msgTypes[6] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_Function_proto_msgTypes[7] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *SourceSpec) String() string { @@ -1111,8 +1178,8 @@ func (x *SourceSpec) String() string { func (*SourceSpec) ProtoMessage() {} func (x *SourceSpec) ProtoReflect() protoreflect.Message { - mi := &file_Function_proto_msgTypes[6] - if protoimpl.UnsafeEnabled && x != nil { + mi := &file_Function_proto_msgTypes[7] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1124,7 +1191,7 @@ func (x *SourceSpec) ProtoReflect() protoreflect.Message { // Deprecated: Use SourceSpec.ProtoReflect.Descriptor instead. func (*SourceSpec) Descriptor() ([]byte, []int) { - return file_Function_proto_rawDescGZIP(), []int{6} + return file_Function_proto_rawDescGZIP(), []int{7} } func (x *SourceSpec) GetClassName() string { @@ -1155,7 +1222,7 @@ func (x *SourceSpec) GetSubscriptionType() SubscriptionType { return SubscriptionType_SHARED } -// Deprecated: Do not use. +// Deprecated: Marked as deprecated in Function.proto. func (x *SourceSpec) GetTopicsToSerDeClassName() map[string]string { if x != nil { return x.TopicsToSerDeClassName @@ -1177,7 +1244,7 @@ func (x *SourceSpec) GetTimeoutMs() uint64 { return 0 } -// Deprecated: Do not use. +// Deprecated: Marked as deprecated in Function.proto. func (x *SourceSpec) GetTopicsPattern() string { if x != nil { return x.TopicsPattern @@ -1228,11 +1295,8 @@ func (x *SourceSpec) GetSkipToLatest() bool { } type SinkSpec struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - ClassName string `protobuf:"bytes,1,opt,name=className,proto3" json:"className,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + ClassName string `protobuf:"bytes,1,opt,name=className,proto3" json:"className,omitempty"` // map in json format Configs string `protobuf:"bytes,2,opt,name=configs,proto3" json:"configs,omitempty"` TypeClassName string `protobuf:"bytes,5,opt,name=typeClassName,proto3" json:"typeClassName,omitempty"` @@ -1247,17 +1311,17 @@ type SinkSpec struct { // Builtin schema type or custom schema class name SchemaType string `protobuf:"bytes,7,opt,name=schemaType,proto3" json:"schemaType,omitempty"` ForwardSourceMessageProperty bool `protobuf:"varint,8,opt,name=forwardSourceMessageProperty,proto3" json:"forwardSourceMessageProperty,omitempty"` - SchemaProperties map[string]string `protobuf:"bytes,9,rep,name=schemaProperties,proto3" json:"schemaProperties,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` - ConsumerProperties map[string]string `protobuf:"bytes,10,rep,name=consumerProperties,proto3" json:"consumerProperties,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + SchemaProperties map[string]string `protobuf:"bytes,9,rep,name=schemaProperties,proto3" json:"schemaProperties,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` + ConsumerProperties map[string]string `protobuf:"bytes,10,rep,name=consumerProperties,proto3" json:"consumerProperties,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *SinkSpec) Reset() { *x = SinkSpec{} - if protoimpl.UnsafeEnabled { - mi := &file_Function_proto_msgTypes[7] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_Function_proto_msgTypes[8] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *SinkSpec) String() string { @@ -1267,8 +1331,8 @@ func (x *SinkSpec) String() string { func (*SinkSpec) ProtoMessage() {} func (x *SinkSpec) ProtoReflect() protoreflect.Message { - mi := &file_Function_proto_msgTypes[7] - if protoimpl.UnsafeEnabled && x != nil { + mi := &file_Function_proto_msgTypes[8] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1280,7 +1344,7 @@ func (x *SinkSpec) ProtoReflect() protoreflect.Message { // Deprecated: Use SinkSpec.ProtoReflect.Descriptor instead. func (*SinkSpec) Descriptor() ([]byte, []int) { - return file_Function_proto_rawDescGZIP(), []int{7} + return file_Function_proto_rawDescGZIP(), []int{8} } func (x *SinkSpec) GetClassName() string { @@ -1361,21 +1425,18 @@ func (x *SinkSpec) GetConsumerProperties() map[string]string { } type PackageLocationMetaData struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - PackagePath string `protobuf:"bytes,1,opt,name=packagePath,proto3" json:"packagePath,omitempty"` - OriginalFileName string `protobuf:"bytes,2,opt,name=originalFileName,proto3" json:"originalFileName,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + PackagePath string `protobuf:"bytes,1,opt,name=packagePath,proto3" json:"packagePath,omitempty"` + OriginalFileName string `protobuf:"bytes,2,opt,name=originalFileName,proto3" json:"originalFileName,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *PackageLocationMetaData) Reset() { *x = PackageLocationMetaData{} - if protoimpl.UnsafeEnabled { - mi := &file_Function_proto_msgTypes[8] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_Function_proto_msgTypes[9] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *PackageLocationMetaData) String() string { @@ -1385,8 +1446,8 @@ func (x *PackageLocationMetaData) String() string { func (*PackageLocationMetaData) ProtoMessage() {} func (x *PackageLocationMetaData) ProtoReflect() protoreflect.Message { - mi := &file_Function_proto_msgTypes[8] - if protoimpl.UnsafeEnabled && x != nil { + mi := &file_Function_proto_msgTypes[9] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1398,7 +1459,7 @@ func (x *PackageLocationMetaData) ProtoReflect() protoreflect.Message { // Deprecated: Use PackageLocationMetaData.ProtoReflect.Descriptor instead. func (*PackageLocationMetaData) Descriptor() ([]byte, []int) { - return file_Function_proto_rawDescGZIP(), []int{8} + return file_Function_proto_rawDescGZIP(), []int{9} } func (x *PackageLocationMetaData) GetPackagePath() string { @@ -1416,26 +1477,23 @@ func (x *PackageLocationMetaData) GetOriginalFileName() string { } type FunctionMetaData struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - + state protoimpl.MessageState `protogen:"open.v1"` FunctionDetails *FunctionDetails `protobuf:"bytes,1,opt,name=functionDetails,proto3" json:"functionDetails,omitempty"` PackageLocation *PackageLocationMetaData `protobuf:"bytes,2,opt,name=packageLocation,proto3" json:"packageLocation,omitempty"` Version uint64 `protobuf:"varint,3,opt,name=version,proto3" json:"version,omitempty"` CreateTime uint64 `protobuf:"varint,4,opt,name=createTime,proto3" json:"createTime,omitempty"` - InstanceStates map[int32]FunctionState `protobuf:"bytes,5,rep,name=instanceStates,proto3" json:"instanceStates,omitempty" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3,enum=proto.FunctionState"` + InstanceStates map[int32]FunctionState `protobuf:"bytes,5,rep,name=instanceStates,proto3" json:"instanceStates,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"varint,2,opt,name=value,enum=proto.FunctionState"` FunctionAuthSpec *FunctionAuthenticationSpec `protobuf:"bytes,6,opt,name=functionAuthSpec,proto3" json:"functionAuthSpec,omitempty"` TransformFunctionPackageLocation *PackageLocationMetaData `protobuf:"bytes,7,opt,name=transformFunctionPackageLocation,proto3" json:"transformFunctionPackageLocation,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *FunctionMetaData) Reset() { *x = FunctionMetaData{} - if protoimpl.UnsafeEnabled { - mi := &file_Function_proto_msgTypes[9] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_Function_proto_msgTypes[10] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *FunctionMetaData) String() string { @@ -1445,8 +1503,8 @@ func (x *FunctionMetaData) String() string { func (*FunctionMetaData) ProtoMessage() {} func (x *FunctionMetaData) ProtoReflect() protoreflect.Message { - mi := &file_Function_proto_msgTypes[9] - if protoimpl.UnsafeEnabled && x != nil { + mi := &file_Function_proto_msgTypes[10] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1458,7 +1516,7 @@ func (x *FunctionMetaData) ProtoReflect() protoreflect.Message { // Deprecated: Use FunctionMetaData.ProtoReflect.Descriptor instead. func (*FunctionMetaData) Descriptor() ([]byte, []int) { - return file_Function_proto_rawDescGZIP(), []int{9} + return file_Function_proto_rawDescGZIP(), []int{10} } func (x *FunctionMetaData) GetFunctionDetails() *FunctionDetails { @@ -1511,10 +1569,7 @@ func (x *FunctionMetaData) GetTransformFunctionPackageLocation() *PackageLocatio } type FunctionAuthenticationSpec struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - + state protoimpl.MessageState `protogen:"open.v1"` // * // function authentication related data that the function authentication provider // needs to cache/distribute to all workers support function authentication. @@ -1523,16 +1578,16 @@ type FunctionAuthenticationSpec struct { Data []byte `protobuf:"bytes,1,opt,name=data,proto3" json:"data,omitempty"` // * // classname of the function auth provicer this data is relevant to - Provider string `protobuf:"bytes,2,opt,name=provider,proto3" json:"provider,omitempty"` + Provider string `protobuf:"bytes,2,opt,name=provider,proto3" json:"provider,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *FunctionAuthenticationSpec) Reset() { *x = FunctionAuthenticationSpec{} - if protoimpl.UnsafeEnabled { - mi := &file_Function_proto_msgTypes[10] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_Function_proto_msgTypes[11] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *FunctionAuthenticationSpec) String() string { @@ -1542,8 +1597,8 @@ func (x *FunctionAuthenticationSpec) String() string { func (*FunctionAuthenticationSpec) ProtoMessage() {} func (x *FunctionAuthenticationSpec) ProtoReflect() protoreflect.Message { - mi := &file_Function_proto_msgTypes[10] - if protoimpl.UnsafeEnabled && x != nil { + mi := &file_Function_proto_msgTypes[11] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1555,7 +1610,7 @@ func (x *FunctionAuthenticationSpec) ProtoReflect() protoreflect.Message { // Deprecated: Use FunctionAuthenticationSpec.ProtoReflect.Descriptor instead. func (*FunctionAuthenticationSpec) Descriptor() ([]byte, []int) { - return file_Function_proto_rawDescGZIP(), []int{10} + return file_Function_proto_rawDescGZIP(), []int{11} } func (x *FunctionAuthenticationSpec) GetData() []byte { @@ -1573,21 +1628,18 @@ func (x *FunctionAuthenticationSpec) GetProvider() string { } type Instance struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - FunctionMetaData *FunctionMetaData `protobuf:"bytes,1,opt,name=functionMetaData,proto3" json:"functionMetaData,omitempty"` - InstanceId int32 `protobuf:"varint,2,opt,name=instanceId,proto3" json:"instanceId,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + FunctionMetaData *FunctionMetaData `protobuf:"bytes,1,opt,name=functionMetaData,proto3" json:"functionMetaData,omitempty"` + InstanceId int32 `protobuf:"varint,2,opt,name=instanceId,proto3" json:"instanceId,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *Instance) Reset() { *x = Instance{} - if protoimpl.UnsafeEnabled { - mi := &file_Function_proto_msgTypes[11] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_Function_proto_msgTypes[12] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *Instance) String() string { @@ -1597,8 +1649,8 @@ func (x *Instance) String() string { func (*Instance) ProtoMessage() {} func (x *Instance) ProtoReflect() protoreflect.Message { - mi := &file_Function_proto_msgTypes[11] - if protoimpl.UnsafeEnabled && x != nil { + mi := &file_Function_proto_msgTypes[12] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1610,7 +1662,7 @@ func (x *Instance) ProtoReflect() protoreflect.Message { // Deprecated: Use Instance.ProtoReflect.Descriptor instead. func (*Instance) Descriptor() ([]byte, []int) { - return file_Function_proto_rawDescGZIP(), []int{11} + return file_Function_proto_rawDescGZIP(), []int{12} } func (x *Instance) GetFunctionMetaData() *FunctionMetaData { @@ -1628,21 +1680,18 @@ func (x *Instance) GetInstanceId() int32 { } type Assignment struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Instance *Instance `protobuf:"bytes,1,opt,name=instance,proto3" json:"instance,omitempty"` + WorkerId string `protobuf:"bytes,2,opt,name=workerId,proto3" json:"workerId,omitempty"` unknownFields protoimpl.UnknownFields - - Instance *Instance `protobuf:"bytes,1,opt,name=instance,proto3" json:"instance,omitempty"` - WorkerId string `protobuf:"bytes,2,opt,name=workerId,proto3" json:"workerId,omitempty"` + sizeCache protoimpl.SizeCache } func (x *Assignment) Reset() { *x = Assignment{} - if protoimpl.UnsafeEnabled { - mi := &file_Function_proto_msgTypes[12] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_Function_proto_msgTypes[13] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *Assignment) String() string { @@ -1652,8 +1701,8 @@ func (x *Assignment) String() string { func (*Assignment) ProtoMessage() {} func (x *Assignment) ProtoReflect() protoreflect.Message { - mi := &file_Function_proto_msgTypes[12] - if protoimpl.UnsafeEnabled && x != nil { + mi := &file_Function_proto_msgTypes[13] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1665,7 +1714,7 @@ func (x *Assignment) ProtoReflect() protoreflect.Message { // Deprecated: Use Assignment.ProtoReflect.Descriptor instead. func (*Assignment) Descriptor() ([]byte, []int) { - return file_Function_proto_rawDescGZIP(), []int{12} + return file_Function_proto_rawDescGZIP(), []int{13} } func (x *Assignment) GetInstance() *Instance { @@ -1683,20 +1732,17 @@ func (x *Assignment) GetWorkerId() string { } type ConsumerSpec_ReceiverQueueSize struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Value int32 `protobuf:"varint,1,opt,name=value,proto3" json:"value,omitempty"` unknownFields protoimpl.UnknownFields - - Value int32 `protobuf:"varint,1,opt,name=value,proto3" json:"value,omitempty"` + sizeCache protoimpl.SizeCache } func (x *ConsumerSpec_ReceiverQueueSize) Reset() { *x = ConsumerSpec_ReceiverQueueSize{} - if protoimpl.UnsafeEnabled { - mi := &file_Function_proto_msgTypes[13] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_Function_proto_msgTypes[14] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *ConsumerSpec_ReceiverQueueSize) String() string { @@ -1706,8 +1752,8 @@ func (x *ConsumerSpec_ReceiverQueueSize) String() string { func (*ConsumerSpec_ReceiverQueueSize) ProtoMessage() {} func (x *ConsumerSpec_ReceiverQueueSize) ProtoReflect() protoreflect.Message { - mi := &file_Function_proto_msgTypes[13] - if protoimpl.UnsafeEnabled && x != nil { + mi := &file_Function_proto_msgTypes[14] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1731,378 +1777,226 @@ func (x *ConsumerSpec_ReceiverQueueSize) GetValue() int32 { var File_Function_proto protoreflect.FileDescriptor -var file_Function_proto_rawDesc = []byte{ - 0x0a, 0x0e, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x12, 0x05, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x43, 0x0a, 0x09, 0x52, 0x65, 0x73, 0x6f, 0x75, - 0x72, 0x63, 0x65, 0x73, 0x12, 0x10, 0x0a, 0x03, 0x63, 0x70, 0x75, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x01, 0x52, 0x03, 0x63, 0x70, 0x75, 0x12, 0x10, 0x0a, 0x03, 0x72, 0x61, 0x6d, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x03, 0x72, 0x61, 0x6d, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x69, 0x73, 0x6b, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x64, 0x69, 0x73, 0x6b, 0x22, 0x66, 0x0a, 0x0c, - 0x52, 0x65, 0x74, 0x72, 0x79, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x12, 0x2c, 0x0a, 0x11, - 0x6d, 0x61, 0x78, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x74, 0x72, 0x69, 0x65, - 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x11, 0x6d, 0x61, 0x78, 0x4d, 0x65, 0x73, 0x73, - 0x61, 0x67, 0x65, 0x52, 0x65, 0x74, 0x72, 0x69, 0x65, 0x73, 0x12, 0x28, 0x0a, 0x0f, 0x64, 0x65, - 0x61, 0x64, 0x4c, 0x65, 0x74, 0x74, 0x65, 0x72, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x0f, 0x64, 0x65, 0x61, 0x64, 0x4c, 0x65, 0x74, 0x74, 0x65, 0x72, 0x54, - 0x6f, 0x70, 0x69, 0x63, 0x22, 0xc9, 0x08, 0x0a, 0x0f, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x74, 0x65, 0x6e, 0x61, - 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, - 0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x12, - 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, - 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x4e, 0x61, 0x6d, 0x65, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x4e, 0x61, 0x6d, 0x65, - 0x12, 0x1a, 0x0a, 0x08, 0x6c, 0x6f, 0x67, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x18, 0x05, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x08, 0x6c, 0x6f, 0x67, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x12, 0x4f, 0x0a, 0x14, - 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x69, 0x6e, 0x67, 0x47, 0x75, 0x61, 0x72, 0x61, 0x6e, - 0x74, 0x65, 0x65, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1b, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x2e, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x69, 0x6e, 0x67, 0x47, 0x75, 0x61, - 0x72, 0x61, 0x6e, 0x74, 0x65, 0x65, 0x73, 0x52, 0x14, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, - 0x69, 0x6e, 0x67, 0x47, 0x75, 0x61, 0x72, 0x61, 0x6e, 0x74, 0x65, 0x65, 0x73, 0x12, 0x1e, 0x0a, - 0x0a, 0x75, 0x73, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x07, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x0a, 0x75, 0x73, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x1e, 0x0a, - 0x0a, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, 0x4d, 0x61, 0x70, 0x18, 0x10, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x0a, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, 0x4d, 0x61, 0x70, 0x12, 0x38, 0x0a, - 0x07, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1e, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x44, - 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x2e, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x52, 0x07, - 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x07, 0x61, 0x75, 0x74, 0x6f, 0x41, - 0x63, 0x6b, 0x18, 0x09, 0x20, 0x01, 0x28, 0x08, 0x42, 0x02, 0x18, 0x01, 0x52, 0x07, 0x61, 0x75, - 0x74, 0x6f, 0x41, 0x63, 0x6b, 0x12, 0x20, 0x0a, 0x0b, 0x70, 0x61, 0x72, 0x61, 0x6c, 0x6c, 0x65, - 0x6c, 0x69, 0x73, 0x6d, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x70, 0x61, 0x72, 0x61, - 0x6c, 0x6c, 0x65, 0x6c, 0x69, 0x73, 0x6d, 0x12, 0x29, 0x0a, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, - 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x53, 0x70, 0x65, 0x63, 0x52, 0x06, 0x73, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x12, 0x23, 0x0a, 0x04, 0x73, 0x69, 0x6e, 0x6b, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x0f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x69, 0x6e, 0x6b, 0x53, 0x70, 0x65, - 0x63, 0x52, 0x04, 0x73, 0x69, 0x6e, 0x6b, 0x12, 0x2e, 0x0a, 0x09, 0x72, 0x65, 0x73, 0x6f, 0x75, - 0x72, 0x63, 0x65, 0x73, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x52, 0x09, 0x72, 0x65, - 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x12, 0x1e, 0x0a, 0x0a, 0x70, 0x61, 0x63, 0x6b, 0x61, - 0x67, 0x65, 0x55, 0x72, 0x6c, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x70, 0x61, 0x63, - 0x6b, 0x61, 0x67, 0x65, 0x55, 0x72, 0x6c, 0x12, 0x37, 0x0a, 0x0c, 0x72, 0x65, 0x74, 0x72, 0x79, - 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x52, 0x65, 0x74, 0x72, 0x79, 0x44, 0x65, 0x74, 0x61, 0x69, - 0x6c, 0x73, 0x52, 0x0c, 0x72, 0x65, 0x74, 0x72, 0x79, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, - 0x12, 0x22, 0x0a, 0x0c, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x73, - 0x18, 0x11, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x46, - 0x6c, 0x61, 0x67, 0x73, 0x12, 0x4a, 0x0a, 0x0d, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, - 0x74, 0x54, 0x79, 0x70, 0x65, 0x18, 0x12, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x24, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x2e, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x65, 0x74, 0x61, - 0x69, 0x6c, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, - 0x65, 0x52, 0x0d, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, - 0x12, 0x32, 0x0a, 0x14, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, - 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x13, 0x20, 0x01, 0x28, 0x09, 0x52, 0x14, - 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x4f, 0x70, 0x74, - 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x62, 0x75, 0x69, 0x6c, 0x74, 0x69, 0x6e, 0x18, - 0x14, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x62, 0x75, 0x69, 0x6c, 0x74, 0x69, 0x6e, 0x12, 0x26, - 0x0a, 0x0e, 0x72, 0x65, 0x74, 0x61, 0x69, 0x6e, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x69, 0x6e, 0x67, - 0x18, 0x15, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x72, 0x65, 0x74, 0x61, 0x69, 0x6e, 0x4f, 0x72, - 0x64, 0x65, 0x72, 0x69, 0x6e, 0x67, 0x12, 0x2c, 0x0a, 0x11, 0x72, 0x65, 0x74, 0x61, 0x69, 0x6e, - 0x4b, 0x65, 0x79, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x69, 0x6e, 0x67, 0x18, 0x16, 0x20, 0x01, 0x28, - 0x08, 0x52, 0x11, 0x72, 0x65, 0x74, 0x61, 0x69, 0x6e, 0x4b, 0x65, 0x79, 0x4f, 0x72, 0x64, 0x65, - 0x72, 0x69, 0x6e, 0x67, 0x12, 0x4f, 0x0a, 0x14, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, - 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x17, 0x20, 0x01, - 0x28, 0x0e, 0x32, 0x1b, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x75, 0x62, 0x73, 0x63, - 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x52, - 0x14, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6f, 0x73, - 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x27, 0x0a, 0x07, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, - 0x12, 0x08, 0x0a, 0x04, 0x4a, 0x41, 0x56, 0x41, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x50, 0x59, - 0x54, 0x48, 0x4f, 0x4e, 0x10, 0x01, 0x12, 0x06, 0x0a, 0x02, 0x47, 0x4f, 0x10, 0x03, 0x22, 0x40, - 0x0a, 0x0d, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, - 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x0c, 0x0a, 0x08, - 0x46, 0x55, 0x4e, 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x10, 0x01, 0x12, 0x0a, 0x0a, 0x06, 0x53, 0x4f, - 0x55, 0x52, 0x43, 0x45, 0x10, 0x02, 0x12, 0x08, 0x0a, 0x04, 0x53, 0x49, 0x4e, 0x4b, 0x10, 0x03, - 0x22, 0x95, 0x05, 0x0a, 0x0c, 0x43, 0x6f, 0x6e, 0x73, 0x75, 0x6d, 0x65, 0x72, 0x53, 0x70, 0x65, - 0x63, 0x12, 0x1e, 0x0a, 0x0a, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x54, 0x79, 0x70, 0x65, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x54, 0x79, 0x70, - 0x65, 0x12, 0x26, 0x0a, 0x0e, 0x73, 0x65, 0x72, 0x64, 0x65, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x4e, - 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x73, 0x65, 0x72, 0x64, 0x65, - 0x43, 0x6c, 0x61, 0x73, 0x73, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x26, 0x0a, 0x0e, 0x69, 0x73, 0x52, - 0x65, 0x67, 0x65, 0x78, 0x50, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x08, 0x52, 0x0e, 0x69, 0x73, 0x52, 0x65, 0x67, 0x65, 0x78, 0x50, 0x61, 0x74, 0x74, 0x65, 0x72, - 0x6e, 0x12, 0x53, 0x0a, 0x11, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x51, 0x75, 0x65, - 0x75, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x43, 0x6f, 0x6e, 0x73, 0x75, 0x6d, 0x65, 0x72, 0x53, 0x70, 0x65, - 0x63, 0x2e, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x51, 0x75, 0x65, 0x75, 0x65, 0x53, - 0x69, 0x7a, 0x65, 0x52, 0x11, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x51, 0x75, 0x65, - 0x75, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x55, 0x0a, 0x10, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, - 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x29, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x43, 0x6f, 0x6e, 0x73, 0x75, 0x6d, 0x65, - 0x72, 0x53, 0x70, 0x65, 0x63, 0x2e, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x50, 0x72, 0x6f, 0x70, - 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x10, 0x73, 0x63, 0x68, - 0x65, 0x6d, 0x61, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x12, 0x5b, 0x0a, - 0x12, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6d, 0x65, 0x72, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, - 0x69, 0x65, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x2e, 0x43, 0x6f, 0x6e, 0x73, 0x75, 0x6d, 0x65, 0x72, 0x53, 0x70, 0x65, 0x63, 0x2e, 0x43, - 0x6f, 0x6e, 0x73, 0x75, 0x6d, 0x65, 0x72, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, - 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x12, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6d, 0x65, 0x72, - 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x12, 0x31, 0x0a, 0x0a, 0x63, 0x72, - 0x79, 0x70, 0x74, 0x6f, 0x53, 0x70, 0x65, 0x63, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x43, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x53, 0x70, 0x65, - 0x63, 0x52, 0x0a, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x53, 0x70, 0x65, 0x63, 0x12, 0x22, 0x0a, - 0x0c, 0x70, 0x6f, 0x6f, 0x6c, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x18, 0x08, 0x20, - 0x01, 0x28, 0x08, 0x52, 0x0c, 0x70, 0x6f, 0x6f, 0x6c, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, - 0x73, 0x1a, 0x29, 0x0a, 0x11, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x51, 0x75, 0x65, - 0x75, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x1a, 0x43, 0x0a, 0x15, - 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, - 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, - 0x01, 0x1a, 0x45, 0x0a, 0x17, 0x43, 0x6f, 0x6e, 0x73, 0x75, 0x6d, 0x65, 0x72, 0x50, 0x72, 0x6f, - 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, - 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, - 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xe1, 0x02, 0x0a, 0x0c, 0x50, 0x72, 0x6f, - 0x64, 0x75, 0x63, 0x65, 0x72, 0x53, 0x70, 0x65, 0x63, 0x12, 0x2e, 0x0a, 0x12, 0x6d, 0x61, 0x78, - 0x50, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x12, 0x6d, 0x61, 0x78, 0x50, 0x65, 0x6e, 0x64, 0x69, 0x6e, - 0x67, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x12, 0x4e, 0x0a, 0x22, 0x6d, 0x61, 0x78, - 0x50, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x41, - 0x63, 0x72, 0x6f, 0x73, 0x73, 0x50, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x22, 0x6d, 0x61, 0x78, 0x50, 0x65, 0x6e, 0x64, 0x69, 0x6e, - 0x67, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x41, 0x63, 0x72, 0x6f, 0x73, 0x73, 0x50, - 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x38, 0x0a, 0x17, 0x75, 0x73, 0x65, - 0x54, 0x68, 0x72, 0x65, 0x61, 0x64, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x50, 0x72, 0x6f, 0x64, 0x75, - 0x63, 0x65, 0x72, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x17, 0x75, 0x73, 0x65, 0x54, - 0x68, 0x72, 0x65, 0x61, 0x64, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, - 0x65, 0x72, 0x73, 0x12, 0x31, 0x0a, 0x0a, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x53, 0x70, 0x65, - 0x63, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, - 0x43, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x53, 0x70, 0x65, 0x63, 0x52, 0x0a, 0x63, 0x72, 0x79, 0x70, - 0x74, 0x6f, 0x53, 0x70, 0x65, 0x63, 0x12, 0x22, 0x0a, 0x0c, 0x62, 0x61, 0x74, 0x63, 0x68, 0x42, - 0x75, 0x69, 0x6c, 0x64, 0x65, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x62, 0x61, - 0x74, 0x63, 0x68, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x65, 0x72, 0x12, 0x40, 0x0a, 0x0f, 0x63, 0x6f, - 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x18, 0x06, 0x20, - 0x01, 0x28, 0x0e, 0x32, 0x16, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x43, 0x6f, 0x6d, 0x70, - 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0f, 0x63, 0x6f, 0x6d, - 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x22, 0xc1, 0x03, 0x0a, - 0x0a, 0x43, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x53, 0x70, 0x65, 0x63, 0x12, 0x3a, 0x0a, 0x18, 0x63, - 0x72, 0x79, 0x70, 0x74, 0x6f, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x61, 0x64, 0x65, 0x72, 0x43, 0x6c, - 0x61, 0x73, 0x73, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x18, 0x63, - 0x72, 0x79, 0x70, 0x74, 0x6f, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x61, 0x64, 0x65, 0x72, 0x43, 0x6c, - 0x61, 0x73, 0x73, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x34, 0x0a, 0x15, 0x63, 0x72, 0x79, 0x70, 0x74, - 0x6f, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x61, 0x64, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x15, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x4b, 0x65, - 0x79, 0x52, 0x65, 0x61, 0x64, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x3c, 0x0a, - 0x19, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x65, 0x72, 0x45, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, - 0x69, 0x6f, 0x6e, 0x4b, 0x65, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, - 0x52, 0x19, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x65, 0x72, 0x45, 0x6e, 0x63, 0x72, 0x79, 0x70, - 0x74, 0x69, 0x6f, 0x6e, 0x4b, 0x65, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x61, 0x0a, 0x1b, 0x70, - 0x72, 0x6f, 0x64, 0x75, 0x63, 0x65, 0x72, 0x43, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x46, 0x61, 0x69, - 0x6c, 0x75, 0x72, 0x65, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, - 0x32, 0x1f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x43, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x53, - 0x70, 0x65, 0x63, 0x2e, 0x46, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x41, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x52, 0x1b, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x65, 0x72, 0x43, 0x72, 0x79, 0x70, 0x74, - 0x6f, 0x46, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x61, - 0x0a, 0x1b, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6d, 0x65, 0x72, 0x43, 0x72, 0x79, 0x70, 0x74, 0x6f, - 0x46, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, - 0x01, 0x28, 0x0e, 0x32, 0x1f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x43, 0x72, 0x79, 0x70, - 0x74, 0x6f, 0x53, 0x70, 0x65, 0x63, 0x2e, 0x46, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x41, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x1b, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6d, 0x65, 0x72, 0x43, 0x72, - 0x79, 0x70, 0x74, 0x6f, 0x46, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x41, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x22, 0x3d, 0x0a, 0x0d, 0x46, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x41, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x12, 0x08, 0x0a, 0x04, 0x46, 0x41, 0x49, 0x4c, 0x10, 0x00, 0x12, 0x0b, 0x0a, 0x07, - 0x44, 0x49, 0x53, 0x43, 0x41, 0x52, 0x44, 0x10, 0x01, 0x12, 0x0b, 0x0a, 0x07, 0x43, 0x4f, 0x4e, - 0x53, 0x55, 0x4d, 0x45, 0x10, 0x02, 0x12, 0x08, 0x0a, 0x04, 0x53, 0x45, 0x4e, 0x44, 0x10, 0x0a, - 0x22, 0xf5, 0x06, 0x0a, 0x0a, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x53, 0x70, 0x65, 0x63, 0x12, - 0x1c, 0x0a, 0x09, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x09, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, - 0x07, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, - 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x12, 0x24, 0x0a, 0x0d, 0x74, 0x79, 0x70, 0x65, 0x43, - 0x6c, 0x61, 0x73, 0x73, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, - 0x74, 0x79, 0x70, 0x65, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x43, 0x0a, - 0x10, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, - 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x17, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, - 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, - 0x52, 0x10, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x79, - 0x70, 0x65, 0x12, 0x69, 0x0a, 0x16, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x73, 0x54, 0x6f, 0x53, 0x65, - 0x72, 0x44, 0x65, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x53, 0x70, 0x65, 0x63, 0x2e, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x73, 0x54, 0x6f, 0x53, 0x65, - 0x72, 0x44, 0x65, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x4e, 0x61, 0x6d, 0x65, 0x45, 0x6e, 0x74, 0x72, - 0x79, 0x42, 0x02, 0x18, 0x01, 0x52, 0x16, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x73, 0x54, 0x6f, 0x53, - 0x65, 0x72, 0x44, 0x65, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x41, 0x0a, - 0x0a, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x53, 0x70, 0x65, 0x63, 0x73, 0x18, 0x0a, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x21, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x53, 0x70, 0x65, 0x63, 0x2e, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x53, 0x70, 0x65, 0x63, 0x73, 0x45, - 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x53, 0x70, 0x65, 0x63, 0x73, - 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x4d, 0x73, 0x18, 0x06, 0x20, - 0x01, 0x28, 0x04, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x4d, 0x73, 0x12, 0x28, - 0x0a, 0x0d, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x73, 0x50, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x18, - 0x07, 0x20, 0x01, 0x28, 0x09, 0x42, 0x02, 0x18, 0x01, 0x52, 0x0d, 0x74, 0x6f, 0x70, 0x69, 0x63, - 0x73, 0x50, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x62, 0x75, 0x69, 0x6c, - 0x74, 0x69, 0x6e, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x62, 0x75, 0x69, 0x6c, 0x74, - 0x69, 0x6e, 0x12, 0x2a, 0x0a, 0x10, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, - 0x6f, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x73, 0x75, - 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x30, - 0x0a, 0x13, 0x63, 0x6c, 0x65, 0x61, 0x6e, 0x75, 0x70, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, - 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x08, 0x52, 0x13, 0x63, 0x6c, 0x65, - 0x61, 0x6e, 0x75, 0x70, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, - 0x12, 0x4f, 0x0a, 0x14, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, - 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1b, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, - 0x69, 0x6f, 0x6e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x14, 0x73, 0x75, 0x62, - 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, - 0x6e, 0x12, 0x42, 0x0a, 0x1c, 0x6e, 0x65, 0x67, 0x61, 0x74, 0x69, 0x76, 0x65, 0x41, 0x63, 0x6b, - 0x52, 0x65, 0x64, 0x65, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x79, 0x44, 0x65, 0x6c, 0x61, 0x79, 0x4d, - 0x73, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x04, 0x52, 0x1c, 0x6e, 0x65, 0x67, 0x61, 0x74, 0x69, 0x76, - 0x65, 0x41, 0x63, 0x6b, 0x52, 0x65, 0x64, 0x65, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x79, 0x44, 0x65, - 0x6c, 0x61, 0x79, 0x4d, 0x73, 0x12, 0x22, 0x0a, 0x0c, 0x73, 0x6b, 0x69, 0x70, 0x54, 0x6f, 0x4c, - 0x61, 0x74, 0x65, 0x73, 0x74, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x73, 0x6b, 0x69, - 0x70, 0x54, 0x6f, 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x1a, 0x49, 0x0a, 0x1b, 0x54, 0x6f, 0x70, - 0x69, 0x63, 0x73, 0x54, 0x6f, 0x53, 0x65, 0x72, 0x44, 0x65, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x4e, - 0x61, 0x6d, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x52, 0x0a, 0x0f, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x53, 0x70, 0x65, - 0x63, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x29, 0x0a, 0x05, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x2e, 0x43, 0x6f, 0x6e, 0x73, 0x75, 0x6d, 0x65, 0x72, 0x53, 0x70, 0x65, 0x63, 0x52, 0x05, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x95, 0x05, 0x0a, 0x08, 0x53, 0x69, 0x6e, - 0x6b, 0x53, 0x70, 0x65, 0x63, 0x12, 0x1c, 0x0a, 0x09, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x4e, 0x61, - 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x4e, - 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x12, 0x24, 0x0a, - 0x0d, 0x74, 0x79, 0x70, 0x65, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x05, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x74, 0x79, 0x70, 0x65, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x4e, - 0x61, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x05, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x12, 0x37, 0x0a, 0x0c, 0x70, 0x72, 0x6f, - 0x64, 0x75, 0x63, 0x65, 0x72, 0x53, 0x70, 0x65, 0x63, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x65, 0x72, - 0x53, 0x70, 0x65, 0x63, 0x52, 0x0c, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x65, 0x72, 0x53, 0x70, - 0x65, 0x63, 0x12, 0x26, 0x0a, 0x0e, 0x73, 0x65, 0x72, 0x44, 0x65, 0x43, 0x6c, 0x61, 0x73, 0x73, - 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x73, 0x65, 0x72, 0x44, - 0x65, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x62, 0x75, - 0x69, 0x6c, 0x74, 0x69, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x62, 0x75, 0x69, - 0x6c, 0x74, 0x69, 0x6e, 0x12, 0x1e, 0x0a, 0x0a, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x54, 0x79, - 0x70, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, - 0x54, 0x79, 0x70, 0x65, 0x12, 0x42, 0x0a, 0x1c, 0x66, 0x6f, 0x72, 0x77, 0x61, 0x72, 0x64, 0x53, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x50, 0x72, 0x6f, 0x70, - 0x65, 0x72, 0x74, 0x79, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x1c, 0x66, 0x6f, 0x72, 0x77, - 0x61, 0x72, 0x64, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, - 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x12, 0x51, 0x0a, 0x10, 0x73, 0x63, 0x68, 0x65, - 0x6d, 0x61, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x18, 0x09, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x69, 0x6e, 0x6b, 0x53, - 0x70, 0x65, 0x63, 0x2e, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, - 0x74, 0x69, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x10, 0x73, 0x63, 0x68, 0x65, 0x6d, - 0x61, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x12, 0x57, 0x0a, 0x12, 0x63, - 0x6f, 0x6e, 0x73, 0x75, 0x6d, 0x65, 0x72, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, - 0x73, 0x18, 0x0a, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, - 0x53, 0x69, 0x6e, 0x6b, 0x53, 0x70, 0x65, 0x63, 0x2e, 0x43, 0x6f, 0x6e, 0x73, 0x75, 0x6d, 0x65, - 0x72, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, - 0x52, 0x12, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6d, 0x65, 0x72, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, - 0x74, 0x69, 0x65, 0x73, 0x1a, 0x43, 0x0a, 0x15, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x50, 0x72, - 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, - 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, - 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x45, 0x0a, 0x17, 0x43, 0x6f, 0x6e, - 0x73, 0x75, 0x6d, 0x65, 0x72, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x45, - 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, - 0x22, 0x67, 0x0a, 0x17, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x4c, 0x6f, 0x63, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x74, 0x61, 0x44, 0x61, 0x74, 0x61, 0x12, 0x20, 0x0a, 0x0b, 0x70, - 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x50, 0x61, 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x0b, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x50, 0x61, 0x74, 0x68, 0x12, 0x2a, 0x0a, - 0x10, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x61, 0x6c, 0x46, 0x69, 0x6c, 0x65, 0x4e, 0x61, 0x6d, - 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x61, - 0x6c, 0x46, 0x69, 0x6c, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0xc1, 0x04, 0x0a, 0x10, 0x46, 0x75, - 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x74, 0x61, 0x44, 0x61, 0x74, 0x61, 0x12, 0x40, - 0x0a, 0x0f, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, - 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, - 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x52, - 0x0f, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, - 0x12, 0x48, 0x0a, 0x0f, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x4c, 0x6f, 0x63, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x2e, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x4d, 0x65, 0x74, 0x61, 0x44, 0x61, 0x74, 0x61, 0x52, 0x0f, 0x70, 0x61, 0x63, 0x6b, 0x61, - 0x67, 0x65, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, - 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x76, 0x65, 0x72, - 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x1e, 0x0a, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x69, - 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, - 0x54, 0x69, 0x6d, 0x65, 0x12, 0x53, 0x0a, 0x0e, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, - 0x53, 0x74, 0x61, 0x74, 0x65, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x74, - 0x61, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x53, 0x74, - 0x61, 0x74, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0e, 0x69, 0x6e, 0x73, 0x74, 0x61, - 0x6e, 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x73, 0x12, 0x4d, 0x0a, 0x10, 0x66, 0x75, 0x6e, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x75, 0x74, 0x68, 0x53, 0x70, 0x65, 0x63, 0x18, 0x06, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x46, 0x75, 0x6e, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x53, 0x70, 0x65, 0x63, 0x52, 0x10, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x41, 0x75, 0x74, 0x68, 0x53, 0x70, 0x65, 0x63, 0x12, 0x6a, 0x0a, 0x20, 0x74, 0x72, 0x61, 0x6e, - 0x73, 0x66, 0x6f, 0x72, 0x6d, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x61, 0x63, - 0x6b, 0x61, 0x67, 0x65, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x07, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x50, 0x61, 0x63, 0x6b, 0x61, - 0x67, 0x65, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x74, 0x61, 0x44, 0x61, - 0x74, 0x61, 0x52, 0x20, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, 0x72, 0x6d, 0x46, 0x75, 0x6e, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x4c, 0x6f, 0x63, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x1a, 0x57, 0x0a, 0x13, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, - 0x53, 0x74, 0x61, 0x74, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, - 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x2a, 0x0a, - 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x14, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, - 0x74, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x4c, 0x0a, - 0x1a, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, - 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x70, 0x65, 0x63, 0x12, 0x12, 0x0a, 0x04, 0x64, - 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x12, - 0x1a, 0x0a, 0x08, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x08, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x22, 0x6f, 0x0a, 0x08, 0x49, - 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x12, 0x43, 0x0a, 0x10, 0x66, 0x75, 0x6e, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x74, 0x61, 0x44, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x17, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x4d, 0x65, 0x74, 0x61, 0x44, 0x61, 0x74, 0x61, 0x52, 0x10, 0x66, 0x75, 0x6e, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x74, 0x61, 0x44, 0x61, 0x74, 0x61, 0x12, 0x1e, 0x0a, 0x0a, - 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x0a, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x49, 0x64, 0x22, 0x55, 0x0a, 0x0a, - 0x41, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x2b, 0x0a, 0x08, 0x69, 0x6e, - 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x52, 0x08, 0x69, - 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x77, 0x6f, 0x72, 0x6b, 0x65, - 0x72, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x77, 0x6f, 0x72, 0x6b, 0x65, - 0x72, 0x49, 0x64, 0x2a, 0x5b, 0x0a, 0x14, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x69, 0x6e, - 0x67, 0x47, 0x75, 0x61, 0x72, 0x61, 0x6e, 0x74, 0x65, 0x65, 0x73, 0x12, 0x10, 0x0a, 0x0c, 0x41, - 0x54, 0x4c, 0x45, 0x41, 0x53, 0x54, 0x5f, 0x4f, 0x4e, 0x43, 0x45, 0x10, 0x00, 0x12, 0x0f, 0x0a, - 0x0b, 0x41, 0x54, 0x4d, 0x4f, 0x53, 0x54, 0x5f, 0x4f, 0x4e, 0x43, 0x45, 0x10, 0x01, 0x12, 0x14, - 0x0a, 0x10, 0x45, 0x46, 0x46, 0x45, 0x43, 0x54, 0x49, 0x56, 0x45, 0x4c, 0x59, 0x5f, 0x4f, 0x4e, - 0x43, 0x45, 0x10, 0x02, 0x12, 0x0a, 0x0a, 0x06, 0x4d, 0x41, 0x4e, 0x55, 0x41, 0x4c, 0x10, 0x03, - 0x2a, 0x3c, 0x0a, 0x10, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, - 0x54, 0x79, 0x70, 0x65, 0x12, 0x0a, 0x0a, 0x06, 0x53, 0x48, 0x41, 0x52, 0x45, 0x44, 0x10, 0x00, - 0x12, 0x0c, 0x0a, 0x08, 0x46, 0x41, 0x49, 0x4c, 0x4f, 0x56, 0x45, 0x52, 0x10, 0x01, 0x12, 0x0e, - 0x0a, 0x0a, 0x4b, 0x45, 0x59, 0x5f, 0x53, 0x48, 0x41, 0x52, 0x45, 0x44, 0x10, 0x02, 0x2a, 0x30, - 0x0a, 0x14, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6f, - 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x0a, 0x0a, 0x06, 0x4c, 0x41, 0x54, 0x45, 0x53, 0x54, - 0x10, 0x00, 0x12, 0x0c, 0x0a, 0x08, 0x45, 0x41, 0x52, 0x4c, 0x49, 0x45, 0x53, 0x54, 0x10, 0x01, - 0x2a, 0x44, 0x0a, 0x0f, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x54, - 0x79, 0x70, 0x65, 0x12, 0x07, 0x0a, 0x03, 0x4c, 0x5a, 0x34, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, - 0x4e, 0x4f, 0x4e, 0x45, 0x10, 0x01, 0x12, 0x08, 0x0a, 0x04, 0x5a, 0x4c, 0x49, 0x42, 0x10, 0x02, - 0x12, 0x08, 0x0a, 0x04, 0x5a, 0x53, 0x54, 0x44, 0x10, 0x03, 0x12, 0x0a, 0x0a, 0x06, 0x53, 0x4e, - 0x41, 0x50, 0x50, 0x59, 0x10, 0x04, 0x2a, 0x29, 0x0a, 0x0d, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x0b, 0x0a, 0x07, 0x52, 0x55, 0x4e, 0x4e, 0x49, - 0x4e, 0x47, 0x10, 0x00, 0x12, 0x0b, 0x0a, 0x07, 0x53, 0x54, 0x4f, 0x50, 0x50, 0x45, 0x44, 0x10, - 0x01, 0x42, 0x2d, 0x0a, 0x21, 0x6f, 0x72, 0x67, 0x2e, 0x61, 0x70, 0x61, 0x63, 0x68, 0x65, 0x2e, - 0x70, 0x75, 0x6c, 0x73, 0x61, 0x72, 0x2e, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x42, 0x08, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, -} +const file_Function_proto_rawDesc = "" + + "\n" + + "\x0eFunction.proto\x12\x05proto\"C\n" + + "\tResources\x12\x10\n" + + "\x03cpu\x18\x01 \x01(\x01R\x03cpu\x12\x10\n" + + "\x03ram\x18\x02 \x01(\x03R\x03ram\x12\x12\n" + + "\x04disk\x18\x03 \x01(\x03R\x04disk\"f\n" + + "\fRetryDetails\x12,\n" + + "\x11maxMessageRetries\x18\x01 \x01(\x05R\x11maxMessageRetries\x12(\n" + + "\x0fdeadLetterTopic\x18\x02 \x01(\tR\x0fdeadLetterTopic\"\xc9\b\n" + + "\x0fFunctionDetails\x12\x16\n" + + "\x06tenant\x18\x01 \x01(\tR\x06tenant\x12\x1c\n" + + "\tnamespace\x18\x02 \x01(\tR\tnamespace\x12\x12\n" + + "\x04name\x18\x03 \x01(\tR\x04name\x12\x1c\n" + + "\tclassName\x18\x04 \x01(\tR\tclassName\x12\x1a\n" + + "\blogTopic\x18\x05 \x01(\tR\blogTopic\x12O\n" + + "\x14processingGuarantees\x18\x06 \x01(\x0e2\x1b.proto.ProcessingGuaranteesR\x14processingGuarantees\x12\x1e\n" + + "\n" + + "userConfig\x18\a \x01(\tR\n" + + "userConfig\x12\x1e\n" + + "\n" + + "secretsMap\x18\x10 \x01(\tR\n" + + "secretsMap\x128\n" + + "\aruntime\x18\b \x01(\x0e2\x1e.proto.FunctionDetails.RuntimeR\aruntime\x12\x1c\n" + + "\aautoAck\x18\t \x01(\bB\x02\x18\x01R\aautoAck\x12 \n" + + "\vparallelism\x18\n" + + " \x01(\x05R\vparallelism\x12)\n" + + "\x06source\x18\v \x01(\v2\x11.proto.SourceSpecR\x06source\x12#\n" + + "\x04sink\x18\f \x01(\v2\x0f.proto.SinkSpecR\x04sink\x12.\n" + + "\tresources\x18\r \x01(\v2\x10.proto.ResourcesR\tresources\x12\x1e\n" + + "\n" + + "packageUrl\x18\x0e \x01(\tR\n" + + "packageUrl\x127\n" + + "\fretryDetails\x18\x0f \x01(\v2\x13.proto.RetryDetailsR\fretryDetails\x12\"\n" + + "\fruntimeFlags\x18\x11 \x01(\tR\fruntimeFlags\x12J\n" + + "\rcomponentType\x18\x12 \x01(\x0e2$.proto.FunctionDetails.ComponentTypeR\rcomponentType\x122\n" + + "\x14customRuntimeOptions\x18\x13 \x01(\tR\x14customRuntimeOptions\x12\x18\n" + + "\abuiltin\x18\x14 \x01(\tR\abuiltin\x12&\n" + + "\x0eretainOrdering\x18\x15 \x01(\bR\x0eretainOrdering\x12,\n" + + "\x11retainKeyOrdering\x18\x16 \x01(\bR\x11retainKeyOrdering\x12O\n" + + "\x14subscriptionPosition\x18\x17 \x01(\x0e2\x1b.proto.SubscriptionPositionR\x14subscriptionPosition\"'\n" + + "\aRuntime\x12\b\n" + + "\x04JAVA\x10\x00\x12\n" + + "\n" + + "\x06PYTHON\x10\x01\x12\x06\n" + + "\x02GO\x10\x03\"@\n" + + "\rComponentType\x12\v\n" + + "\aUNKNOWN\x10\x00\x12\f\n" + + "\bFUNCTION\x10\x01\x12\n" + + "\n" + + "\x06SOURCE\x10\x02\x12\b\n" + + "\x04SINK\x10\x03\"\x95\x05\n" + + "\fConsumerSpec\x12\x1e\n" + + "\n" + + "schemaType\x18\x01 \x01(\tR\n" + + "schemaType\x12&\n" + + "\x0eserdeClassName\x18\x02 \x01(\tR\x0eserdeClassName\x12&\n" + + "\x0eisRegexPattern\x18\x03 \x01(\bR\x0eisRegexPattern\x12S\n" + + "\x11receiverQueueSize\x18\x04 \x01(\v2%.proto.ConsumerSpec.ReceiverQueueSizeR\x11receiverQueueSize\x12U\n" + + "\x10schemaProperties\x18\x05 \x03(\v2).proto.ConsumerSpec.SchemaPropertiesEntryR\x10schemaProperties\x12[\n" + + "\x12consumerProperties\x18\x06 \x03(\v2+.proto.ConsumerSpec.ConsumerPropertiesEntryR\x12consumerProperties\x121\n" + + "\n" + + "cryptoSpec\x18\a \x01(\v2\x11.proto.CryptoSpecR\n" + + "cryptoSpec\x12\"\n" + + "\fpoolMessages\x18\b \x01(\bR\fpoolMessages\x1a)\n" + + "\x11ReceiverQueueSize\x12\x14\n" + + "\x05value\x18\x01 \x01(\x05R\x05value\x1aC\n" + + "\x15SchemaPropertiesEntry\x12\x10\n" + + "\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n" + + "\x05value\x18\x02 \x01(\tR\x05value:\x028\x01\x1aE\n" + + "\x17ConsumerPropertiesEntry\x12\x10\n" + + "\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n" + + "\x05value\x18\x02 \x01(\tR\x05value:\x028\x01\"\x9a\x03\n" + + "\fProducerSpec\x12.\n" + + "\x12maxPendingMessages\x18\x01 \x01(\x05R\x12maxPendingMessages\x12N\n" + + "\"maxPendingMessagesAcrossPartitions\x18\x02 \x01(\x05R\"maxPendingMessagesAcrossPartitions\x128\n" + + "\x17useThreadLocalProducers\x18\x03 \x01(\bR\x17useThreadLocalProducers\x121\n" + + "\n" + + "cryptoSpec\x18\x04 \x01(\v2\x11.proto.CryptoSpecR\n" + + "cryptoSpec\x12\"\n" + + "\fbatchBuilder\x18\x05 \x01(\tR\fbatchBuilder\x12@\n" + + "\x0fcompressionType\x18\x06 \x01(\x0e2\x16.proto.CompressionTypeR\x0fcompressionType\x127\n" + + "\fbatchingSpec\x18\a \x01(\v2\x13.proto.BatchingSpecR\fbatchingSpec\"\xc1\x03\n" + + "\n" + + "CryptoSpec\x12:\n" + + "\x18cryptoKeyReaderClassName\x18\x01 \x01(\tR\x18cryptoKeyReaderClassName\x124\n" + + "\x15cryptoKeyReaderConfig\x18\x02 \x01(\tR\x15cryptoKeyReaderConfig\x12<\n" + + "\x19producerEncryptionKeyName\x18\x03 \x03(\tR\x19producerEncryptionKeyName\x12a\n" + + "\x1bproducerCryptoFailureAction\x18\x04 \x01(\x0e2\x1f.proto.CryptoSpec.FailureActionR\x1bproducerCryptoFailureAction\x12a\n" + + "\x1bconsumerCryptoFailureAction\x18\x05 \x01(\x0e2\x1f.proto.CryptoSpec.FailureActionR\x1bconsumerCryptoFailureAction\"=\n" + + "\rFailureAction\x12\b\n" + + "\x04FAIL\x10\x00\x12\v\n" + + "\aDISCARD\x10\x01\x12\v\n" + + "\aCONSUME\x10\x02\x12\b\n" + + "\x04SEND\x10\n" + + "\"\xd4\x02\n" + + "\fBatchingSpec\x12\x18\n" + + "\aenabled\x18\x01 \x01(\bR\aenabled\x12<\n" + + "\x19batchingMaxPublishDelayMs\x18\x02 \x01(\x05R\x19batchingMaxPublishDelayMs\x12j\n" + + "0roundRobinRouterBatchingPartitionSwitchFrequency\x18\x03 \x01(\x05R0roundRobinRouterBatchingPartitionSwitchFrequency\x120\n" + + "\x13batchingMaxMessages\x18\x04 \x01(\x05R\x13batchingMaxMessages\x12*\n" + + "\x10batchingMaxBytes\x18\x05 \x01(\x05R\x10batchingMaxBytes\x12\"\n" + + "\fbatchBuilder\x18\x06 \x01(\tR\fbatchBuilder\"\xf5\x06\n" + + "\n" + + "SourceSpec\x12\x1c\n" + + "\tclassName\x18\x01 \x01(\tR\tclassName\x12\x18\n" + + "\aconfigs\x18\x02 \x01(\tR\aconfigs\x12$\n" + + "\rtypeClassName\x18\x05 \x01(\tR\rtypeClassName\x12C\n" + + "\x10subscriptionType\x18\x03 \x01(\x0e2\x17.proto.SubscriptionTypeR\x10subscriptionType\x12i\n" + + "\x16topicsToSerDeClassName\x18\x04 \x03(\v2-.proto.SourceSpec.TopicsToSerDeClassNameEntryB\x02\x18\x01R\x16topicsToSerDeClassName\x12A\n" + + "\n" + + "inputSpecs\x18\n" + + " \x03(\v2!.proto.SourceSpec.InputSpecsEntryR\n" + + "inputSpecs\x12\x1c\n" + + "\ttimeoutMs\x18\x06 \x01(\x04R\ttimeoutMs\x12(\n" + + "\rtopicsPattern\x18\a \x01(\tB\x02\x18\x01R\rtopicsPattern\x12\x18\n" + + "\abuiltin\x18\b \x01(\tR\abuiltin\x12*\n" + + "\x10subscriptionName\x18\t \x01(\tR\x10subscriptionName\x120\n" + + "\x13cleanupSubscription\x18\v \x01(\bR\x13cleanupSubscription\x12O\n" + + "\x14subscriptionPosition\x18\f \x01(\x0e2\x1b.proto.SubscriptionPositionR\x14subscriptionPosition\x12B\n" + + "\x1cnegativeAckRedeliveryDelayMs\x18\r \x01(\x04R\x1cnegativeAckRedeliveryDelayMs\x12\"\n" + + "\fskipToLatest\x18\x0e \x01(\bR\fskipToLatest\x1aI\n" + + "\x1bTopicsToSerDeClassNameEntry\x12\x10\n" + + "\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n" + + "\x05value\x18\x02 \x01(\tR\x05value:\x028\x01\x1aR\n" + + "\x0fInputSpecsEntry\x12\x10\n" + + "\x03key\x18\x01 \x01(\tR\x03key\x12)\n" + + "\x05value\x18\x02 \x01(\v2\x13.proto.ConsumerSpecR\x05value:\x028\x01\"\x95\x05\n" + + "\bSinkSpec\x12\x1c\n" + + "\tclassName\x18\x01 \x01(\tR\tclassName\x12\x18\n" + + "\aconfigs\x18\x02 \x01(\tR\aconfigs\x12$\n" + + "\rtypeClassName\x18\x05 \x01(\tR\rtypeClassName\x12\x14\n" + + "\x05topic\x18\x03 \x01(\tR\x05topic\x127\n" + + "\fproducerSpec\x18\v \x01(\v2\x13.proto.ProducerSpecR\fproducerSpec\x12&\n" + + "\x0eserDeClassName\x18\x04 \x01(\tR\x0eserDeClassName\x12\x18\n" + + "\abuiltin\x18\x06 \x01(\tR\abuiltin\x12\x1e\n" + + "\n" + + "schemaType\x18\a \x01(\tR\n" + + "schemaType\x12B\n" + + "\x1cforwardSourceMessageProperty\x18\b \x01(\bR\x1cforwardSourceMessageProperty\x12Q\n" + + "\x10schemaProperties\x18\t \x03(\v2%.proto.SinkSpec.SchemaPropertiesEntryR\x10schemaProperties\x12W\n" + + "\x12consumerProperties\x18\n" + + " \x03(\v2'.proto.SinkSpec.ConsumerPropertiesEntryR\x12consumerProperties\x1aC\n" + + "\x15SchemaPropertiesEntry\x12\x10\n" + + "\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n" + + "\x05value\x18\x02 \x01(\tR\x05value:\x028\x01\x1aE\n" + + "\x17ConsumerPropertiesEntry\x12\x10\n" + + "\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n" + + "\x05value\x18\x02 \x01(\tR\x05value:\x028\x01\"g\n" + + "\x17PackageLocationMetaData\x12 \n" + + "\vpackagePath\x18\x01 \x01(\tR\vpackagePath\x12*\n" + + "\x10originalFileName\x18\x02 \x01(\tR\x10originalFileName\"\xc1\x04\n" + + "\x10FunctionMetaData\x12@\n" + + "\x0ffunctionDetails\x18\x01 \x01(\v2\x16.proto.FunctionDetailsR\x0ffunctionDetails\x12H\n" + + "\x0fpackageLocation\x18\x02 \x01(\v2\x1e.proto.PackageLocationMetaDataR\x0fpackageLocation\x12\x18\n" + + "\aversion\x18\x03 \x01(\x04R\aversion\x12\x1e\n" + + "\n" + + "createTime\x18\x04 \x01(\x04R\n" + + "createTime\x12S\n" + + "\x0einstanceStates\x18\x05 \x03(\v2+.proto.FunctionMetaData.InstanceStatesEntryR\x0einstanceStates\x12M\n" + + "\x10functionAuthSpec\x18\x06 \x01(\v2!.proto.FunctionAuthenticationSpecR\x10functionAuthSpec\x12j\n" + + " transformFunctionPackageLocation\x18\a \x01(\v2\x1e.proto.PackageLocationMetaDataR transformFunctionPackageLocation\x1aW\n" + + "\x13InstanceStatesEntry\x12\x10\n" + + "\x03key\x18\x01 \x01(\x05R\x03key\x12*\n" + + "\x05value\x18\x02 \x01(\x0e2\x14.proto.FunctionStateR\x05value:\x028\x01\"L\n" + + "\x1aFunctionAuthenticationSpec\x12\x12\n" + + "\x04data\x18\x01 \x01(\fR\x04data\x12\x1a\n" + + "\bprovider\x18\x02 \x01(\tR\bprovider\"o\n" + + "\bInstance\x12C\n" + + "\x10functionMetaData\x18\x01 \x01(\v2\x17.proto.FunctionMetaDataR\x10functionMetaData\x12\x1e\n" + + "\n" + + "instanceId\x18\x02 \x01(\x05R\n" + + "instanceId\"U\n" + + "\n" + + "Assignment\x12+\n" + + "\binstance\x18\x01 \x01(\v2\x0f.proto.InstanceR\binstance\x12\x1a\n" + + "\bworkerId\x18\x02 \x01(\tR\bworkerId*[\n" + + "\x14ProcessingGuarantees\x12\x10\n" + + "\fATLEAST_ONCE\x10\x00\x12\x0f\n" + + "\vATMOST_ONCE\x10\x01\x12\x14\n" + + "\x10EFFECTIVELY_ONCE\x10\x02\x12\n" + + "\n" + + "\x06MANUAL\x10\x03*<\n" + + "\x10SubscriptionType\x12\n" + + "\n" + + "\x06SHARED\x10\x00\x12\f\n" + + "\bFAILOVER\x10\x01\x12\x0e\n" + + "\n" + + "KEY_SHARED\x10\x02*0\n" + + "\x14SubscriptionPosition\x12\n" + + "\n" + + "\x06LATEST\x10\x00\x12\f\n" + + "\bEARLIEST\x10\x01*D\n" + + "\x0fCompressionType\x12\a\n" + + "\x03LZ4\x10\x00\x12\b\n" + + "\x04NONE\x10\x01\x12\b\n" + + "\x04ZLIB\x10\x02\x12\b\n" + + "\x04ZSTD\x10\x03\x12\n" + + "\n" + + "\x06SNAPPY\x10\x04*)\n" + + "\rFunctionState\x12\v\n" + + "\aRUNNING\x10\x00\x12\v\n" + + "\aSTOPPED\x10\x01B@\n" + + "!org.apache.pulsar.functions.protoB\bFunctionZ\x11controllers/protob\x06proto3" var ( file_Function_proto_rawDescOnce sync.Once - file_Function_proto_rawDescData = file_Function_proto_rawDesc + file_Function_proto_rawDescData []byte ) func file_Function_proto_rawDescGZIP() []byte { file_Function_proto_rawDescOnce.Do(func() { - file_Function_proto_rawDescData = protoimpl.X.CompressGZIP(file_Function_proto_rawDescData) + file_Function_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_Function_proto_rawDesc), len(file_Function_proto_rawDesc))) }) return file_Function_proto_rawDescData } var file_Function_proto_enumTypes = make([]protoimpl.EnumInfo, 8) -var file_Function_proto_msgTypes = make([]protoimpl.MessageInfo, 21) -var file_Function_proto_goTypes = []interface{}{ +var file_Function_proto_msgTypes = make([]protoimpl.MessageInfo, 22) +var file_Function_proto_goTypes = []any{ (ProcessingGuarantees)(0), // 0: proto.ProcessingGuarantees (SubscriptionType)(0), // 1: proto.SubscriptionType (SubscriptionPosition)(0), // 2: proto.SubscriptionPosition @@ -2117,60 +2011,62 @@ var file_Function_proto_goTypes = []interface{}{ (*ConsumerSpec)(nil), // 11: proto.ConsumerSpec (*ProducerSpec)(nil), // 12: proto.ProducerSpec (*CryptoSpec)(nil), // 13: proto.CryptoSpec - (*SourceSpec)(nil), // 14: proto.SourceSpec - (*SinkSpec)(nil), // 15: proto.SinkSpec - (*PackageLocationMetaData)(nil), // 16: proto.PackageLocationMetaData - (*FunctionMetaData)(nil), // 17: proto.FunctionMetaData - (*FunctionAuthenticationSpec)(nil), // 18: proto.FunctionAuthenticationSpec - (*Instance)(nil), // 19: proto.Instance - (*Assignment)(nil), // 20: proto.Assignment - (*ConsumerSpec_ReceiverQueueSize)(nil), // 21: proto.ConsumerSpec.ReceiverQueueSize - nil, // 22: proto.ConsumerSpec.SchemaPropertiesEntry - nil, // 23: proto.ConsumerSpec.ConsumerPropertiesEntry - nil, // 24: proto.SourceSpec.TopicsToSerDeClassNameEntry - nil, // 25: proto.SourceSpec.InputSpecsEntry - nil, // 26: proto.SinkSpec.SchemaPropertiesEntry - nil, // 27: proto.SinkSpec.ConsumerPropertiesEntry - nil, // 28: proto.FunctionMetaData.InstanceStatesEntry + (*BatchingSpec)(nil), // 14: proto.BatchingSpec + (*SourceSpec)(nil), // 15: proto.SourceSpec + (*SinkSpec)(nil), // 16: proto.SinkSpec + (*PackageLocationMetaData)(nil), // 17: proto.PackageLocationMetaData + (*FunctionMetaData)(nil), // 18: proto.FunctionMetaData + (*FunctionAuthenticationSpec)(nil), // 19: proto.FunctionAuthenticationSpec + (*Instance)(nil), // 20: proto.Instance + (*Assignment)(nil), // 21: proto.Assignment + (*ConsumerSpec_ReceiverQueueSize)(nil), // 22: proto.ConsumerSpec.ReceiverQueueSize + nil, // 23: proto.ConsumerSpec.SchemaPropertiesEntry + nil, // 24: proto.ConsumerSpec.ConsumerPropertiesEntry + nil, // 25: proto.SourceSpec.TopicsToSerDeClassNameEntry + nil, // 26: proto.SourceSpec.InputSpecsEntry + nil, // 27: proto.SinkSpec.SchemaPropertiesEntry + nil, // 28: proto.SinkSpec.ConsumerPropertiesEntry + nil, // 29: proto.FunctionMetaData.InstanceStatesEntry } var file_Function_proto_depIdxs = []int32{ 0, // 0: proto.FunctionDetails.processingGuarantees:type_name -> proto.ProcessingGuarantees 5, // 1: proto.FunctionDetails.runtime:type_name -> proto.FunctionDetails.Runtime - 14, // 2: proto.FunctionDetails.source:type_name -> proto.SourceSpec - 15, // 3: proto.FunctionDetails.sink:type_name -> proto.SinkSpec + 15, // 2: proto.FunctionDetails.source:type_name -> proto.SourceSpec + 16, // 3: proto.FunctionDetails.sink:type_name -> proto.SinkSpec 8, // 4: proto.FunctionDetails.resources:type_name -> proto.Resources 9, // 5: proto.FunctionDetails.retryDetails:type_name -> proto.RetryDetails 6, // 6: proto.FunctionDetails.componentType:type_name -> proto.FunctionDetails.ComponentType 2, // 7: proto.FunctionDetails.subscriptionPosition:type_name -> proto.SubscriptionPosition - 21, // 8: proto.ConsumerSpec.receiverQueueSize:type_name -> proto.ConsumerSpec.ReceiverQueueSize - 22, // 9: proto.ConsumerSpec.schemaProperties:type_name -> proto.ConsumerSpec.SchemaPropertiesEntry - 23, // 10: proto.ConsumerSpec.consumerProperties:type_name -> proto.ConsumerSpec.ConsumerPropertiesEntry + 22, // 8: proto.ConsumerSpec.receiverQueueSize:type_name -> proto.ConsumerSpec.ReceiverQueueSize + 23, // 9: proto.ConsumerSpec.schemaProperties:type_name -> proto.ConsumerSpec.SchemaPropertiesEntry + 24, // 10: proto.ConsumerSpec.consumerProperties:type_name -> proto.ConsumerSpec.ConsumerPropertiesEntry 13, // 11: proto.ConsumerSpec.cryptoSpec:type_name -> proto.CryptoSpec 13, // 12: proto.ProducerSpec.cryptoSpec:type_name -> proto.CryptoSpec 3, // 13: proto.ProducerSpec.compressionType:type_name -> proto.CompressionType - 7, // 14: proto.CryptoSpec.producerCryptoFailureAction:type_name -> proto.CryptoSpec.FailureAction - 7, // 15: proto.CryptoSpec.consumerCryptoFailureAction:type_name -> proto.CryptoSpec.FailureAction - 1, // 16: proto.SourceSpec.subscriptionType:type_name -> proto.SubscriptionType - 24, // 17: proto.SourceSpec.topicsToSerDeClassName:type_name -> proto.SourceSpec.TopicsToSerDeClassNameEntry - 25, // 18: proto.SourceSpec.inputSpecs:type_name -> proto.SourceSpec.InputSpecsEntry - 2, // 19: proto.SourceSpec.subscriptionPosition:type_name -> proto.SubscriptionPosition - 12, // 20: proto.SinkSpec.producerSpec:type_name -> proto.ProducerSpec - 26, // 21: proto.SinkSpec.schemaProperties:type_name -> proto.SinkSpec.SchemaPropertiesEntry - 27, // 22: proto.SinkSpec.consumerProperties:type_name -> proto.SinkSpec.ConsumerPropertiesEntry - 10, // 23: proto.FunctionMetaData.functionDetails:type_name -> proto.FunctionDetails - 16, // 24: proto.FunctionMetaData.packageLocation:type_name -> proto.PackageLocationMetaData - 28, // 25: proto.FunctionMetaData.instanceStates:type_name -> proto.FunctionMetaData.InstanceStatesEntry - 18, // 26: proto.FunctionMetaData.functionAuthSpec:type_name -> proto.FunctionAuthenticationSpec - 16, // 27: proto.FunctionMetaData.transformFunctionPackageLocation:type_name -> proto.PackageLocationMetaData - 17, // 28: proto.Instance.functionMetaData:type_name -> proto.FunctionMetaData - 19, // 29: proto.Assignment.instance:type_name -> proto.Instance - 11, // 30: proto.SourceSpec.InputSpecsEntry.value:type_name -> proto.ConsumerSpec - 4, // 31: proto.FunctionMetaData.InstanceStatesEntry.value:type_name -> proto.FunctionState - 32, // [32:32] is the sub-list for method output_type - 32, // [32:32] is the sub-list for method input_type - 32, // [32:32] is the sub-list for extension type_name - 32, // [32:32] is the sub-list for extension extendee - 0, // [0:32] is the sub-list for field type_name + 14, // 14: proto.ProducerSpec.batchingSpec:type_name -> proto.BatchingSpec + 7, // 15: proto.CryptoSpec.producerCryptoFailureAction:type_name -> proto.CryptoSpec.FailureAction + 7, // 16: proto.CryptoSpec.consumerCryptoFailureAction:type_name -> proto.CryptoSpec.FailureAction + 1, // 17: proto.SourceSpec.subscriptionType:type_name -> proto.SubscriptionType + 25, // 18: proto.SourceSpec.topicsToSerDeClassName:type_name -> proto.SourceSpec.TopicsToSerDeClassNameEntry + 26, // 19: proto.SourceSpec.inputSpecs:type_name -> proto.SourceSpec.InputSpecsEntry + 2, // 20: proto.SourceSpec.subscriptionPosition:type_name -> proto.SubscriptionPosition + 12, // 21: proto.SinkSpec.producerSpec:type_name -> proto.ProducerSpec + 27, // 22: proto.SinkSpec.schemaProperties:type_name -> proto.SinkSpec.SchemaPropertiesEntry + 28, // 23: proto.SinkSpec.consumerProperties:type_name -> proto.SinkSpec.ConsumerPropertiesEntry + 10, // 24: proto.FunctionMetaData.functionDetails:type_name -> proto.FunctionDetails + 17, // 25: proto.FunctionMetaData.packageLocation:type_name -> proto.PackageLocationMetaData + 29, // 26: proto.FunctionMetaData.instanceStates:type_name -> proto.FunctionMetaData.InstanceStatesEntry + 19, // 27: proto.FunctionMetaData.functionAuthSpec:type_name -> proto.FunctionAuthenticationSpec + 17, // 28: proto.FunctionMetaData.transformFunctionPackageLocation:type_name -> proto.PackageLocationMetaData + 18, // 29: proto.Instance.functionMetaData:type_name -> proto.FunctionMetaData + 20, // 30: proto.Assignment.instance:type_name -> proto.Instance + 11, // 31: proto.SourceSpec.InputSpecsEntry.value:type_name -> proto.ConsumerSpec + 4, // 32: proto.FunctionMetaData.InstanceStatesEntry.value:type_name -> proto.FunctionState + 33, // [33:33] is the sub-list for method output_type + 33, // [33:33] is the sub-list for method input_type + 33, // [33:33] is the sub-list for extension type_name + 33, // [33:33] is the sub-list for extension extendee + 0, // [0:33] is the sub-list for field type_name } func init() { file_Function_proto_init() } @@ -2178,183 +2074,13 @@ func file_Function_proto_init() { if File_Function_proto != nil { return } - if !protoimpl.UnsafeEnabled { - file_Function_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Resources); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_Function_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*RetryDetails); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_Function_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*FunctionDetails); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_Function_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ConsumerSpec); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_Function_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ProducerSpec); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_Function_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CryptoSpec); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_Function_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SourceSpec); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_Function_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SinkSpec); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_Function_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PackageLocationMetaData); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_Function_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*FunctionMetaData); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_Function_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*FunctionAuthenticationSpec); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_Function_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Instance); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_Function_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Assignment); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_Function_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ConsumerSpec_ReceiverQueueSize); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - } type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_Function_proto_rawDesc, + RawDescriptor: unsafe.Slice(unsafe.StringData(file_Function_proto_rawDesc), len(file_Function_proto_rawDesc)), NumEnums: 8, - NumMessages: 21, + NumMessages: 22, NumExtensions: 0, NumServices: 0, }, @@ -2364,7 +2090,6 @@ func file_Function_proto_init() { MessageInfos: file_Function_proto_msgTypes, }.Build() File_Function_proto = out.File - file_Function_proto_rawDesc = nil file_Function_proto_goTypes = nil file_Function_proto_depIdxs = nil } diff --git a/controllers/proto/Function.proto b/controllers/proto/Function.proto index de3f03a39..9d9986a33 100644 --- a/controllers/proto/Function.proto +++ b/controllers/proto/Function.proto @@ -22,6 +22,7 @@ package proto; option java_package = "org.apache.pulsar.functions.proto"; option java_outer_classname = "Function"; +option go_package = "controllers/proto"; enum ProcessingGuarantees { ATLEAST_ONCE = 0; // [default value] @@ -121,6 +122,7 @@ message ProducerSpec { CryptoSpec cryptoSpec = 4; string batchBuilder = 5; CompressionType compressionType = 6; + BatchingSpec batchingSpec = 7; } message CryptoSpec { @@ -147,6 +149,15 @@ message CryptoSpec { FailureAction consumerCryptoFailureAction = 5; } +message BatchingSpec { + bool enabled = 1; + int32 batchingMaxPublishDelayMs = 2; + int32 roundRobinRouterBatchingPartitionSwitchFrequency = 3; + int32 batchingMaxMessages = 4; + int32 batchingMaxBytes = 5; + string batchBuilder = 6; +} + message SourceSpec { string className = 1; // map in json format diff --git a/controllers/proto/generate.sh b/controllers/proto/generate.sh index f7ebb5261..99d570346 100755 --- a/controllers/proto/generate.sh +++ b/controllers/proto/generate.sh @@ -55,5 +55,6 @@ fi protoFiles="${protoDefinitions}/*.proto" protoc \ - --go_out=import_path=${pkg},plugins=grpc:. \ - --proto_path="${protoDefinitions}" ${protoFiles} + --proto_path="${protoDefinitions}" \ + --go_out=. \ + ${protoFiles} diff --git a/controllers/spec/common.go b/controllers/spec/common.go index 9592d7ebd..021e9075f 100644 --- a/controllers/spec/common.go +++ b/controllers/spec/common.go @@ -2483,3 +2483,22 @@ func CreateDiff(orj, modified *appsv1.StatefulSet) (string, error) { } return string(patch), nil } + +func convertBatchingConfig(batchingConfig *v1alpha1.BatchingConfig) *proto.BatchingSpec { + if batchingConfig == nil { + // to keep the backward compatibility, when batchingSpec is null or empty + // the batching is enabled by default, and the default max publish delay is 10ms + return &proto.BatchingSpec{ + Enabled: true, + BatchingMaxPublishDelayMs: 10, + } + } + return &proto.BatchingSpec{ + Enabled: batchingConfig.Enabled, + BatchingMaxPublishDelayMs: batchingConfig.BatchingMaxPublishDelayMs, + RoundRobinRouterBatchingPartitionSwitchFrequency: batchingConfig.RoundRobinRouterBatchingPartitionSwitchFrequency, + BatchingMaxMessages: batchingConfig.BatchingMaxMessages, + BatchingMaxBytes: batchingConfig.BatchingMaxBytes, + BatchBuilder: batchingConfig.BatchBuilder, + } +} diff --git a/controllers/spec/utils.go b/controllers/spec/utils.go index e62171b22..7db5fd78d 100644 --- a/controllers/spec/utils.go +++ b/controllers/spec/utils.go @@ -242,6 +242,7 @@ func generateFunctionOutputSpec(function *v1alpha1.Function) *proto.SinkSpec { CryptoSpec: generateCryptoSpec(function.Spec.Output.ProducerConf.CryptoConfig), BatchBuilder: function.Spec.Output.ProducerConf.BatchBuilder, CompressionType: convertCompressionType(function.Spec.Output.ProducerConf.CompressionType), + BatchingSpec: convertBatchingConfig(function.Spec.Output.ProducerConf.BatchingConfig), } sinkSpec.ProducerSpec = producerConfig @@ -306,6 +307,7 @@ func generateSourceOutputSpec(source *v1alpha1.Source) *proto.SinkSpec { CryptoSpec: cryptoSpec, BatchBuilder: source.Spec.Output.ProducerConf.BatchBuilder, CompressionType: convertCompressionType(source.Spec.Output.ProducerConf.CompressionType), + BatchingSpec: convertBatchingConfig(source.Spec.Output.ProducerConf.BatchingConfig), } } var forward = true diff --git a/go.mod b/go.mod index 3b77f4d4d..2f6e95fe3 100644 --- a/go.mod +++ b/go.mod @@ -1,6 +1,6 @@ module github.com/streamnative/function-mesh -go 1.24.2 +go 1.24.4 require ( github.com/apache/pulsar-client-go v0.9.1-0.20230816081803-fbee610ddcbf diff --git a/images/samples/go-function-samples/Dockerfile b/images/samples/go-function-samples/Dockerfile index b396b979b..1c6412317 100644 --- a/images/samples/go-function-samples/Dockerfile +++ b/images/samples/go-function-samples/Dockerfile @@ -1,5 +1,5 @@ ARG PULSAR_IMAGE_TAG -FROM golang:1.24.2-bullseye as builder +FROM golang:1.24.4-bullseye as builder WORKDIR /workspace # Copy the Go Modules manifests diff --git a/images/samples/go-function-samples/func/go.mod b/images/samples/go-function-samples/func/go.mod index 9d2631d4c..f128a66c6 100644 --- a/images/samples/go-function-samples/func/go.mod +++ b/images/samples/go-function-samples/func/go.mod @@ -1,6 +1,6 @@ module github.com/apache/pulsar/pulsar-function-go/examples -go 1.24.2 +go 1.24.4 require github.com/apache/pulsar/pulsar-function-go v0.0.0-20250430085326-611dc3f360b5 diff --git a/redhat.Dockerfile b/redhat.Dockerfile index 663d17571..06a17376a 100644 --- a/redhat.Dockerfile +++ b/redhat.Dockerfile @@ -1,5 +1,5 @@ # Build the manager binary -FROM golang:1.24.2-bullseye as builder +FROM golang:1.24.4-bullseye as builder WORKDIR /workspace/api COPY api/ .