grpcgcp/grpc_gcp/grpc_gcp.proto (110 lines of code) (raw):
// Copyright 2018 gRPC authors.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
syntax = "proto3";
option go_package = "github.com/GoogleCloudPlatform/grpc-gcp-go/grpcgcp/grpc_gcp";
package grpc.gcp;
message ApiConfig {
// The channel pool configurations.
ChannelPoolConfig channel_pool = 2;
// The method configurations.
repeated MethodConfig method = 1001;
}
// ChannelPoolConfig are options for configuring the channel pool.
// RPCs will be scheduled onto existing channels in the pool until all channels
// have <max_concurrent_streams_low_watermark> number of streams. At this point
// a new channel is spun out. Once <max_size> channels have been spun out and
// each has <max_concurrent_streams_low_watermark> streams, subsequent RPCs will
// hang until any of the in-flight RPCs is finished, freeing up a channel.
message ChannelPoolConfig {
// The max number of channels in the pool.
// Default value is 0, meaning 'unlimited' size.
uint32 max_size = 1;
// The idle timeout (seconds) of channels without bound affinity sessions.
uint64 idle_timeout = 2;
// The low watermark of max number of concurrent streams in a channel.
// New channel will be created once it get hit, until we reach the max size of the channel pool.
// Default value is 100. The valid range is [1, 100]. Any value outside the range will be ignored and the default value will be used.
// Note: It is not recommended that users adjust this value, since a single channel should generally have no trouble managing the default (maximum) number of streams.
uint32 max_concurrent_streams_low_watermark = 3;
// The minimum number of channels in the pool.
uint32 min_size = 4;
// If a channel mapped to an affinity key is not ready, temporarily fallback
// to another ready channel.
// Enabling this fallback is beneficial in scenarios with short RPC timeouts
// and rather slow connection establishing or during incidents when new
// connections fail but existing connections still operate.
bool fallback_to_ready = 5;
// Enables per channel unresponsive connection detection if > 0 and unresponsive_calls > 0.
// If enabled and more than unresponsive_detection_ms passed since the last response from the server,
// and >= unresponsive_calls RPC calls (started after last response from the server) timed-out on the client side,
// then the connection of that channel will be gracefully refreshed. I.e., a new connection will be created for
// that channel and after the new connection is ready it will replace the old connection. The calls on the old
// connection will not be interrupted. The unresponsive_detection_ms will be doubled every consecutive refresh
// if no response from the server is received.
uint32 unresponsive_detection_ms = 6;
// Enables per channel unresponsive connection detection if > 0 and unresponsive_detection_ms > 0.
// If enabled and more than unresponsive_detection_ms passed since the last response from the server,
// and >= unresponsive_calls RPC calls (started after last response from the server) timed-out on the client side,
// then the connection of that channel will be gracefully refreshed. I.e., a new connection will be created for
// that channel and after the new connection is ready it will replace the old connection. The calls on the old
// connection will not be interrupted. The unresponsive_detection_ms will be doubled every consecutive refresh
// if no response from the server is received.
uint32 unresponsive_calls = 7;
// A selection of strategies for picking a channel for a call with BIND command.
enum BindPickStrategy {
// No preference -- picking a channel for a BIND call will be no different
// than for any other calls.
UNSPECIFIED = 0;
// A channel with the least active streams at the moment of a BIND call
// initiation will be picked.
LEAST_ACTIVE_STREAMS = 1;
// Cycle through channels created by the BIND call initiation. I. e. pick
// a channel in a round-robin manner. Note that some channels may be
// skipped during channel pool resize.
ROUND_ROBIN = 2;
}
// The strategy for picking a channel for a call with BIND command.
BindPickStrategy bind_pick_strategy = 8;
}
message MethodConfig {
// A fully qualified name of a gRPC method, or a wildcard pattern ending
// with .*, such as foo.bar.A, foo.bar.*. Method configs are evaluated
// sequentially, and the first one takes precedence.
repeated string name = 1;
// The channel affinity configurations.
AffinityConfig affinity = 1001;
}
message AffinityConfig {
enum Command {
// The annotated method will be required to be bound to an existing session
// to execute the RPC. The corresponding <affinity_key_field_path> will be
// used to find the affinity key from the request message.
BOUND = 0;
// The annotated method will establish the channel affinity with the
// channel which is used to execute the RPC. The corresponding
// <affinity_key_field_path> will be used to find the affinity key from the
// response message.
BIND = 1;
// The annotated method will remove the channel affinity with the
// channel which is used to execute the RPC. The corresponding
// <affinity_key_field_path> will be used to find the affinity key from the
// request message.
UNBIND = 2;
}
// The affinity command applies on the selected gRPC methods.
Command command = 2;
// The field path of the affinity key in the request/response message.
// For example: "f.a", "f.b.d", etc.
string affinity_key = 3;
}