diff --git a/docs/design-docs/design_docs/qviews/query/collection_readiness.md b/docs/design-docs/design_docs/qviews/query/collection_readiness.md new file mode 100644 index 00000000000..d852d363faa --- /dev/null +++ b/docs/design-docs/design_docs/qviews/query/collection_readiness.md @@ -0,0 +1,89 @@ +# Collection Readiness + +Automatic DQL loading previously called `ShowLoadCollections` every 10 ms until +query service was available. Each request had its own polling loop, including +requests for the same collection. This design replaces that loop with one +outstanding `WaitCollectionReady` RPC shared by concurrent requests on a Proxy. + +## Contract + +`WaitCollectionReady(collectionID, expected_vchannels, check_only)` is an +internal QueryCoord RPC. It never initiates a load. + +- A missing desired load config returns `CollectionNotLoaded` immediately. +- Every expected vchannel must have an Up view for every replica in the current + desired load config. A missing shard counts as unavailable, even if every + already-registered shard is Up. +- `check_only=true` returns immediately using the same predicate. Otherwise an + unavailable collection waits for a state change. +- Cancellation, the request deadline, the configured load timeout, runtime + shutdown, or release ends the wait. A failure of one preparing view does not + terminate the collection load: the existing balancer may replace that view. + +The check is a readiness observation, not a query lease. A release or node failure +can still occur after it succeeds; existing query execution error handling remains +responsible for that race. + +## Notification ownership + +`qviewsRuntime` owns collection-scoped notifications. `ShardViewRegistry` stats +updates signal only waiters for the affected collection. `LoadConfigStore` +notifies after committed Put/Remove operations; Remove permanently invalidates +existing subscriptions before another Put can commit under the collection guard. +Callbacks perform no RPC or catalog access. + +The notifier retains entries only for collections with active waiters. Waiters +share one change channel per collection. Notifications carry no shard, node, +segment, or load-config payload. Releasing a collection retires its subscription +state; a subsequent load gets a different state, so coalescing cannot erase a +release seen by an existing waiter. Runtime shutdown wakes all waits. + +## Race-free observation + +The RPC subscribes before reading current state, then repeats these steps: + +1. Capture the current change channel and check whether the subscription was + released. +2. Read the immutable load config and its version. +3. Check the complete expected shard set under the registry read lock. +4. Reread the config version. If it changed, retry the observation. Check release + again before returning readiness. +5. Return if ready, or select on the captured change channel, cancellation and + shutdown. + +A notification before the select closes the captured channel and cannot be lost. +An already-ready collection is detected by the initial read, including recovered +Up views that preceded observer registration. The read path never takes the +collection persistence guard, so a blocked catalog write does not prevent RPC +cancellation. It allocates the expected shard list once per config version and +checks those shards directly, without constructing registry snapshots. + +## Proxy sharing + +The initial readiness check still executes for each DQL request. When loading is +needed, every caller authorizes its own Load before joining shared work. The +singleflight scope includes load submission and the subsequent readiness RPC. +Callers that observe Loading join the same scope. An individual caller can stop +waiting without canceling the shared operation; the shared operation remains +bounded by the Proxy lifecycle and load timeout. + +`ShowLoadCollections` remains available for load-progress queries. The automatic-load +path may still use it through `GetLoadState`, but never periodically while waiting. +Successful sequential DQL requests still perform an initial status RPC; removing +that RPC would require a separately versioned readiness cache and invalidation +protocol. + +## Compatibility and validation + +The new RPC and request message are appended to the protobuf schema. Existing +field numbers and RPCs retain their meaning. A Proxy requiring this RPC needs a +QueryCoord that implements it; an older server returns Unimplemented. There is +no silent fallback to polling. + +Validation covers real SN Up callbacks through the Coord state machine and +registry observer to RPC completion; missing shards and replicas; +notification before blocking; release followed by reload; caller cancellation; +runtime shutdown; a real gRPC deadline and typed released status; concurrent +Proxy callers sharing a single wait; and notifier cleanup under race detection. +Production CPU/alloc savings and mixed-version rollout are not established by +these local tests. diff --git a/docs/design-docs/design_docs/qviews/query/query_client.md b/docs/design-docs/design_docs/qviews/query/query_client.md index c09b2b84ca8..8d7e657b624 100644 --- a/docs/design-docs/design_docs/qviews/query/query_client.md +++ b/docs/design-docs/design_docs/qviews/query/query_client.md @@ -432,58 +432,23 @@ ViewQueryServiceClient - **Dispatch**: The top-level `ViewQueryServiceClient` switches on `WorkNode` type and delegates to the appropriate sub-client. -### 5.5 Shard Discovery via Channel Assignment - -ShardResolver is backed by the existing channel assignment service discovery -(`streaming.proto`), extended to publish per-SN shard and primary information -alongside pchannel→SN binding. - -**Data flow:** Coord publishes shard assignments as part of channel assignment -full updates. `StreamingNodeAssignment` is extended with two new fields: - -- `shard_assignment`: A `ShardAssignmentInfo` carrying pchannel-scoped loaded - shards on this node. Each `PChannelShardAssignment` names one pchannel and - carries its shard replicas as (collection_id, shard_index, replica_id). -- `secondary_channels`: Secondary (read-only) pchannel replicas on this SN. - Primary pchannels remain in the existing `channels` field, preserving backward - compatibility. Old clients ignore the new field. - -The client-side watcher maintains a local cache, so shard resolution is a pure -local lookup with zero network overhead on the query path. - -**Supply ownership and dependencies:** - -- `secondary_channels` is supplied by StreamingCoord's channel assignment layer. - StreamingCoord already owns the pchannel to StreamingNode binding and each - `PChannelInfo` carries an `access_mode`; the assignment publisher splits - read-write pchannels into `channels` and read-only pchannels into - `secondary_channels`. -- `shard_assignment` is supplied by the qviews Coord layer, not inferred by the - StreamingCoord channel manager. The authoritative source is the qviews - load/view management pipeline (`CollectionLoadManager`, Coord-side balancer, - `ShardViewRegistry` / `ShardViewManager`), which owns the mapping from - `(collection_id, pchannel, shard_index, replica_id)` to the StreamingNode that - hosts that shard replica. The client derives the vchannel with - `funcutil.GetVirtualChannel(pchannel, collection_id, shard_index)`. -- Each `PChannelShardAssignment.pchannel` must appear in either `channels` or - `secondary_channels` of the same `StreamingNodeAssignment`. This keeps the - pchannel role and shard mapping in one consistent assignment snapshot. -- The assignment discovery service is the aggregation and publication boundary: - it joins the StreamingCoord pchannel assignment snapshot with the qviews shard - assignment snapshot into a single full assignment update. Clients should - consume this unified snapshot instead of joining channel topology and qviews - topology independently, so shard routing and primary detection are based on a - consistent versioned view. - -**Primary replica derivation:** The existing `channels` field contains primary -pchannels (WAL owner, read-write); the new `secondary_channels` field contains -secondary pchannels (WAL subscriber, read-only). A replica's shard inherits the -primary/secondary status of its pchannel on the same SN. The client identifies -the primary replica for each vchannel: the replica whose shard is on the SN where -the corresponding pchannel appears in `channels` (not `secondary_channels`). - -All proto definitions are in `streaming.proto` under `ShardAssignmentInfo`, -`PChannelShardAssignment`, and `ShardAssignmentEntry`. +### 5.5 Shard Resolution and Collection Readiness + +The Proxy resolves collection vchannels through its metadata cache. These +vchannels describe static topology and remain available even when the collection +is unloaded. Channel assignment discovery continues to provide PChannel-to-node +routing and primary/secondary roles; it carries no collection shard entries. + +Phase 1 addresses the primary StreamingNode with `UnknownReplicaID`. The node +resolves the query view by vchannel and returns the real replica ID in the query +plan. Phase 2 uses that replica ID when executing the plan. + +Automatic loading has a separate readiness barrier. The Proxy uses QueryCoord's +`WaitCollectionReady` RPC, with a nonblocking check for the initial DQL fast path +and an event-driven wait after a load has been submitted. Readiness does not +reintroduce full shard-assignment publication. See +[Collection Readiness](collection_readiness.md) for the complete expected-shard +check, cancellation, shared waits, and release semantics. ## 6. Package Layout diff --git a/internal/coordinator/mix_coord.go b/internal/coordinator/mix_coord.go index 49db314d979..695920e0be9 100644 --- a/internal/coordinator/mix_coord.go +++ b/internal/coordinator/mix_coord.go @@ -1057,6 +1057,10 @@ func (s *mixCoordImpl) ListCheckers(ctx context.Context, req *querypb.ListChecke return s.queryCoordServer.ListCheckers(ctx, req) } +func (s *mixCoordImpl) WaitCollectionReady(ctx context.Context, req *querypb.WaitCollectionReadyRequest) (*commonpb.Status, error) { + return s.queryCoordServer.WaitCollectionReady(ctx, req) +} + func (s *mixCoordImpl) ShowLoadCollections(ctx context.Context, req *querypb.ShowCollectionsRequest) (*querypb.ShowCollectionsResponse, error) { return s.queryCoordServer.ShowLoadCollections(ctx, req) } diff --git a/internal/datacoord/mock_test.go b/internal/datacoord/mock_test.go index 755246869f3..11c3e217de8 100644 --- a/internal/datacoord/mock_test.go +++ b/internal/datacoord/mock_test.go @@ -778,6 +778,10 @@ func (s *mockMixCoord) ListCheckers(ctx context.Context, req *querypb.ListChecke panic("implement me") } +func (s *mockMixCoord) WaitCollectionReady(ctx context.Context, req *querypb.WaitCollectionReadyRequest) (*commonpb.Status, error) { + return &commonpb.Status{}, nil +} + func (s *mockMixCoord) ShowLoadCollections(ctx context.Context, req *querypb.ShowCollectionsRequest) (*querypb.ShowCollectionsResponse, error) { panic("implement me") } diff --git a/internal/distributed/mixcoord/client/client.go b/internal/distributed/mixcoord/client/client.go index 2f03a376fe9..7a42103e711 100644 --- a/internal/distributed/mixcoord/client/client.go +++ b/internal/distributed/mixcoord/client/client.go @@ -1645,6 +1645,14 @@ func (c *Client) ListIndexes(ctx context.Context, in *indexpb.ListIndexesRequest }) } +func (c *Client) WaitCollectionReady(ctx context.Context, req *querypb.WaitCollectionReadyRequest, opts ...grpc.CallOption) (*commonpb.Status, error) { + req = typeutil.Clone(req) + commonpbutil.UpdateMsgBase(req.GetBase(), commonpbutil.FillMsgBaseFromClient(paramtable.GetNodeID(), commonpbutil.WithTargetID(c.grpcClient.GetNodeID()))) + return wrapGrpcCall(ctx, c, func(client MixCoordClient) (*commonpb.Status, error) { + return client.WaitCollectionReady(ctx, req, opts...) + }) +} + func (c *Client) ShowLoadCollections(ctx context.Context, req *querypb.ShowCollectionsRequest, opts ...grpc.CallOption) (*querypb.ShowCollectionsResponse, error) { req = typeutil.Clone(req) commonpbutil.UpdateMsgBase( diff --git a/internal/distributed/mixcoord/service.go b/internal/distributed/mixcoord/service.go index 5c537075814..83fc4afe5f5 100644 --- a/internal/distributed/mixcoord/service.go +++ b/internal/distributed/mixcoord/service.go @@ -609,6 +609,10 @@ func (s *Server) OperatePrivilegeGroup(ctx context.Context, request *milvuspb.Op } // ShowCollections shows the collections in the QueryCoord. +func (s *Server) WaitCollectionReady(ctx context.Context, req *querypb.WaitCollectionReadyRequest) (*commonpb.Status, error) { + return s.mixCoord.WaitCollectionReady(ctx, req) +} + func (s *Server) ShowLoadCollections(ctx context.Context, req *querypb.ShowCollectionsRequest) (*querypb.ShowCollectionsResponse, error) { return s.mixCoord.ShowLoadCollections(ctx, req) } diff --git a/internal/mocks/mock_mixcoord.go b/internal/mocks/mock_mixcoord.go index de87e659f25..3e953ae3e7d 100644 --- a/internal/mocks/mock_mixcoord.go +++ b/internal/mocks/mock_mixcoord.go @@ -11880,6 +11880,65 @@ func (_c *MixCoord_ValidateAnalyzer_Call) RunAndReturn(run func(context.Context, return _c } +// WaitCollectionReady provides a mock function with given fields: _a0, _a1 +func (_m *MixCoord) WaitCollectionReady(_a0 context.Context, _a1 *querypb.WaitCollectionReadyRequest) (*commonpb.Status, error) { + ret := _m.Called(_a0, _a1) + + if len(ret) == 0 { + panic("no return value specified for WaitCollectionReady") + } + + var r0 *commonpb.Status + var r1 error + if rf, ok := ret.Get(0).(func(context.Context, *querypb.WaitCollectionReadyRequest) (*commonpb.Status, error)); ok { + return rf(_a0, _a1) + } + if rf, ok := ret.Get(0).(func(context.Context, *querypb.WaitCollectionReadyRequest) *commonpb.Status); ok { + r0 = rf(_a0, _a1) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(*commonpb.Status) + } + } + + if rf, ok := ret.Get(1).(func(context.Context, *querypb.WaitCollectionReadyRequest) error); ok { + r1 = rf(_a0, _a1) + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + +// MixCoord_WaitCollectionReady_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'WaitCollectionReady' +type MixCoord_WaitCollectionReady_Call struct { + *mock.Call +} + +// WaitCollectionReady is a helper method to define mock.On call +// - _a0 context.Context +// - _a1 *querypb.WaitCollectionReadyRequest +func (_e *MixCoord_Expecter) WaitCollectionReady(_a0 interface{}, _a1 interface{}) *MixCoord_WaitCollectionReady_Call { + return &MixCoord_WaitCollectionReady_Call{Call: _e.mock.On("WaitCollectionReady", _a0, _a1)} +} + +func (_c *MixCoord_WaitCollectionReady_Call) Run(run func(_a0 context.Context, _a1 *querypb.WaitCollectionReadyRequest)) *MixCoord_WaitCollectionReady_Call { + _c.Call.Run(func(args mock.Arguments) { + run(args[0].(context.Context), args[1].(*querypb.WaitCollectionReadyRequest)) + }) + return _c +} + +func (_c *MixCoord_WaitCollectionReady_Call) Return(_a0 *commonpb.Status, _a1 error) *MixCoord_WaitCollectionReady_Call { + _c.Call.Return(_a0, _a1) + return _c +} + +func (_c *MixCoord_WaitCollectionReady_Call) RunAndReturn(run func(context.Context, *querypb.WaitCollectionReadyRequest) (*commonpb.Status, error)) *MixCoord_WaitCollectionReady_Call { + _c.Call.Return(run) + return _c +} + // WatchChannels provides a mock function with given fields: _a0, _a1 func (_m *MixCoord) WatchChannels(_a0 context.Context, _a1 *datapb.WatchChannelsRequest) (*datapb.WatchChannelsResponse, error) { ret := _m.Called(_a0, _a1) @@ -11990,8 +12049,7 @@ func (_c *MixCoord_WatchQueryViewSegmentLoadInfo_Call) RunAndReturn(run func(que func NewMixCoord(t interface { mock.TestingT Cleanup(func()) -}, -) *MixCoord { +}) *MixCoord { mock := &MixCoord{} mock.Mock.Test(t) diff --git a/internal/mocks/mock_mixcoord_client.go b/internal/mocks/mock_mixcoord_client.go index a5440fddc4e..7f91c5e9e76 100644 --- a/internal/mocks/mock_mixcoord_client.go +++ b/internal/mocks/mock_mixcoord_client.go @@ -7105,43 +7105,6 @@ func (_c *MockMixCoordClient_GetQueryViewLoadInfo_Call) RunAndReturn(run func(co return _c } -// WatchQueryViewSegmentLoadInfo provides a mock function with given fields: ctx, opts -func (_m *MockMixCoordClient) WatchQueryViewSegmentLoadInfo(ctx context.Context, opts ...grpc.CallOption) (querypb.QueryCoord_WatchQueryViewSegmentLoadInfoClient, error) { - _va := make([]interface{}, len(opts)) - for _i := range opts { - _va[_i] = opts[_i] - } - var _ca []interface{} - _ca = append(_ca, ctx) - _ca = append(_ca, _va...) - ret := _m.Called(_ca...) - - if len(ret) == 0 { - panic("no return value specified for WatchQueryViewSegmentLoadInfo") - } - - var r0 querypb.QueryCoord_WatchQueryViewSegmentLoadInfoClient - var r1 error - if rf, ok := ret.Get(0).(func(context.Context, ...grpc.CallOption) (querypb.QueryCoord_WatchQueryViewSegmentLoadInfoClient, error)); ok { - return rf(ctx, opts...) - } - if rf, ok := ret.Get(0).(func(context.Context, ...grpc.CallOption) querypb.QueryCoord_WatchQueryViewSegmentLoadInfoClient); ok { - r0 = rf(ctx, opts...) - } else { - if ret.Get(0) != nil { - r0 = ret.Get(0).(querypb.QueryCoord_WatchQueryViewSegmentLoadInfoClient) - } - } - - if rf, ok := ret.Get(1).(func(context.Context, ...grpc.CallOption) error); ok { - r1 = rf(ctx, opts...) - } else { - r1 = ret.Error(1) - } - - return r0, r1 -} - // GetQuotaMetrics provides a mock function with given fields: ctx, in, opts func (_m *MockMixCoordClient) GetQuotaMetrics(ctx context.Context, in *internalpb.GetQuotaMetricsRequest, opts ...grpc.CallOption) (*internalpb.GetQuotaMetricsResponse, error) { _va := make([]interface{}, len(opts)) @@ -8030,8 +7993,8 @@ func (_c *MockMixCoordClient_GetShardLeaders_Call) RunAndReturn(run func(context return _c } -// GetStreamingNodeQueryViewResources provides a mock function with given fields: ctx, in, opts -func (_m *MockMixCoordClient) GetStreamingNodeQueryViewResources(ctx context.Context, in *datapb.GetStreamingNodeQueryViewResourcesRequest, opts ...grpc.CallOption) (*datapb.GetStreamingNodeQueryViewResourcesResponse, error) { +// GetStatisticsChannel provides a mock function with given fields: ctx, in, opts +func (_m *MockMixCoordClient) GetStatisticsChannel(ctx context.Context, in *internalpb.GetStatisticsChannelRequest, opts ...grpc.CallOption) (*milvuspb.StringResponse, error) { _va := make([]interface{}, len(opts)) for _i := range opts { _va[_i] = opts[_i] @@ -8042,23 +8005,23 @@ func (_m *MockMixCoordClient) GetStreamingNodeQueryViewResources(ctx context.Con ret := _m.Called(_ca...) if len(ret) == 0 { - panic("no return value specified for GetStreamingNodeQueryViewResources") + panic("no return value specified for GetStatisticsChannel") } - var r0 *datapb.GetStreamingNodeQueryViewResourcesResponse + var r0 *milvuspb.StringResponse var r1 error - if rf, ok := ret.Get(0).(func(context.Context, *datapb.GetStreamingNodeQueryViewResourcesRequest, ...grpc.CallOption) (*datapb.GetStreamingNodeQueryViewResourcesResponse, error)); ok { + if rf, ok := ret.Get(0).(func(context.Context, *internalpb.GetStatisticsChannelRequest, ...grpc.CallOption) (*milvuspb.StringResponse, error)); ok { return rf(ctx, in, opts...) } - if rf, ok := ret.Get(0).(func(context.Context, *datapb.GetStreamingNodeQueryViewResourcesRequest, ...grpc.CallOption) *datapb.GetStreamingNodeQueryViewResourcesResponse); ok { + if rf, ok := ret.Get(0).(func(context.Context, *internalpb.GetStatisticsChannelRequest, ...grpc.CallOption) *milvuspb.StringResponse); ok { r0 = rf(ctx, in, opts...) } else { if ret.Get(0) != nil { - r0 = ret.Get(0).(*datapb.GetStreamingNodeQueryViewResourcesResponse) + r0 = ret.Get(0).(*milvuspb.StringResponse) } } - if rf, ok := ret.Get(1).(func(context.Context, *datapb.GetStreamingNodeQueryViewResourcesRequest, ...grpc.CallOption) error); ok { + if rf, ok := ret.Get(1).(func(context.Context, *internalpb.GetStatisticsChannelRequest, ...grpc.CallOption) error); ok { r1 = rf(ctx, in, opts...) } else { r1 = ret.Error(1) @@ -8067,21 +8030,21 @@ func (_m *MockMixCoordClient) GetStreamingNodeQueryViewResources(ctx context.Con return r0, r1 } -// MockMixCoordClient_GetStreamingNodeQueryViewResources_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'GetStreamingNodeQueryViewResources' -type MockMixCoordClient_GetStreamingNodeQueryViewResources_Call struct { +// MockMixCoordClient_GetStatisticsChannel_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'GetStatisticsChannel' +type MockMixCoordClient_GetStatisticsChannel_Call struct { *mock.Call } -// GetStreamingNodeQueryViewResources is a helper method to define mock.On call +// GetStatisticsChannel is a helper method to define mock.On call // - ctx context.Context -// - in *datapb.GetStreamingNodeQueryViewResourcesRequest +// - in *internalpb.GetStatisticsChannelRequest // - opts ...grpc.CallOption -func (_e *MockMixCoordClient_Expecter) GetStreamingNodeQueryViewResources(ctx interface{}, in interface{}, opts ...interface{}) *MockMixCoordClient_GetStreamingNodeQueryViewResources_Call { - return &MockMixCoordClient_GetStreamingNodeQueryViewResources_Call{Call: _e.mock.On("GetStreamingNodeQueryViewResources", +func (_e *MockMixCoordClient_Expecter) GetStatisticsChannel(ctx interface{}, in interface{}, opts ...interface{}) *MockMixCoordClient_GetStatisticsChannel_Call { + return &MockMixCoordClient_GetStatisticsChannel_Call{Call: _e.mock.On("GetStatisticsChannel", append([]interface{}{ctx, in}, opts...)...)} } -func (_c *MockMixCoordClient_GetStreamingNodeQueryViewResources_Call) Run(run func(ctx context.Context, in *datapb.GetStreamingNodeQueryViewResourcesRequest, opts ...grpc.CallOption)) *MockMixCoordClient_GetStreamingNodeQueryViewResources_Call { +func (_c *MockMixCoordClient_GetStatisticsChannel_Call) Run(run func(ctx context.Context, in *internalpb.GetStatisticsChannelRequest, opts ...grpc.CallOption)) *MockMixCoordClient_GetStatisticsChannel_Call { _c.Call.Run(func(args mock.Arguments) { variadicArgs := make([]grpc.CallOption, len(args)-2) for i, a := range args[2:] { @@ -8089,23 +8052,23 @@ func (_c *MockMixCoordClient_GetStreamingNodeQueryViewResources_Call) Run(run fu variadicArgs[i] = a.(grpc.CallOption) } } - run(args[0].(context.Context), args[1].(*datapb.GetStreamingNodeQueryViewResourcesRequest), variadicArgs...) + run(args[0].(context.Context), args[1].(*internalpb.GetStatisticsChannelRequest), variadicArgs...) }) return _c } -func (_c *MockMixCoordClient_GetStreamingNodeQueryViewResources_Call) Return(_a0 *datapb.GetStreamingNodeQueryViewResourcesResponse, _a1 error) *MockMixCoordClient_GetStreamingNodeQueryViewResources_Call { +func (_c *MockMixCoordClient_GetStatisticsChannel_Call) Return(_a0 *milvuspb.StringResponse, _a1 error) *MockMixCoordClient_GetStatisticsChannel_Call { _c.Call.Return(_a0, _a1) return _c } -func (_c *MockMixCoordClient_GetStreamingNodeQueryViewResources_Call) RunAndReturn(run func(context.Context, *datapb.GetStreamingNodeQueryViewResourcesRequest, ...grpc.CallOption) (*datapb.GetStreamingNodeQueryViewResourcesResponse, error)) *MockMixCoordClient_GetStreamingNodeQueryViewResources_Call { +func (_c *MockMixCoordClient_GetStatisticsChannel_Call) RunAndReturn(run func(context.Context, *internalpb.GetStatisticsChannelRequest, ...grpc.CallOption) (*milvuspb.StringResponse, error)) *MockMixCoordClient_GetStatisticsChannel_Call { _c.Call.Return(run) return _c } -// GetStatisticsChannel provides a mock function with given fields: ctx, in, opts -func (_m *MockMixCoordClient) GetStatisticsChannel(ctx context.Context, in *internalpb.GetStatisticsChannelRequest, opts ...grpc.CallOption) (*milvuspb.StringResponse, error) { +// GetStreamingNodeQueryViewResources provides a mock function with given fields: ctx, in, opts +func (_m *MockMixCoordClient) GetStreamingNodeQueryViewResources(ctx context.Context, in *datapb.GetStreamingNodeQueryViewResourcesRequest, opts ...grpc.CallOption) (*datapb.GetStreamingNodeQueryViewResourcesResponse, error) { _va := make([]interface{}, len(opts)) for _i := range opts { _va[_i] = opts[_i] @@ -8116,23 +8079,23 @@ func (_m *MockMixCoordClient) GetStatisticsChannel(ctx context.Context, in *inte ret := _m.Called(_ca...) if len(ret) == 0 { - panic("no return value specified for GetStatisticsChannel") + panic("no return value specified for GetStreamingNodeQueryViewResources") } - var r0 *milvuspb.StringResponse + var r0 *datapb.GetStreamingNodeQueryViewResourcesResponse var r1 error - if rf, ok := ret.Get(0).(func(context.Context, *internalpb.GetStatisticsChannelRequest, ...grpc.CallOption) (*milvuspb.StringResponse, error)); ok { + if rf, ok := ret.Get(0).(func(context.Context, *datapb.GetStreamingNodeQueryViewResourcesRequest, ...grpc.CallOption) (*datapb.GetStreamingNodeQueryViewResourcesResponse, error)); ok { return rf(ctx, in, opts...) } - if rf, ok := ret.Get(0).(func(context.Context, *internalpb.GetStatisticsChannelRequest, ...grpc.CallOption) *milvuspb.StringResponse); ok { + if rf, ok := ret.Get(0).(func(context.Context, *datapb.GetStreamingNodeQueryViewResourcesRequest, ...grpc.CallOption) *datapb.GetStreamingNodeQueryViewResourcesResponse); ok { r0 = rf(ctx, in, opts...) } else { if ret.Get(0) != nil { - r0 = ret.Get(0).(*milvuspb.StringResponse) + r0 = ret.Get(0).(*datapb.GetStreamingNodeQueryViewResourcesResponse) } } - if rf, ok := ret.Get(1).(func(context.Context, *internalpb.GetStatisticsChannelRequest, ...grpc.CallOption) error); ok { + if rf, ok := ret.Get(1).(func(context.Context, *datapb.GetStreamingNodeQueryViewResourcesRequest, ...grpc.CallOption) error); ok { r1 = rf(ctx, in, opts...) } else { r1 = ret.Error(1) @@ -8141,21 +8104,21 @@ func (_m *MockMixCoordClient) GetStatisticsChannel(ctx context.Context, in *inte return r0, r1 } -// MockMixCoordClient_GetStatisticsChannel_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'GetStatisticsChannel' -type MockMixCoordClient_GetStatisticsChannel_Call struct { +// MockMixCoordClient_GetStreamingNodeQueryViewResources_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'GetStreamingNodeQueryViewResources' +type MockMixCoordClient_GetStreamingNodeQueryViewResources_Call struct { *mock.Call } -// GetStatisticsChannel is a helper method to define mock.On call +// GetStreamingNodeQueryViewResources is a helper method to define mock.On call // - ctx context.Context -// - in *internalpb.GetStatisticsChannelRequest +// - in *datapb.GetStreamingNodeQueryViewResourcesRequest // - opts ...grpc.CallOption -func (_e *MockMixCoordClient_Expecter) GetStatisticsChannel(ctx interface{}, in interface{}, opts ...interface{}) *MockMixCoordClient_GetStatisticsChannel_Call { - return &MockMixCoordClient_GetStatisticsChannel_Call{Call: _e.mock.On("GetStatisticsChannel", +func (_e *MockMixCoordClient_Expecter) GetStreamingNodeQueryViewResources(ctx interface{}, in interface{}, opts ...interface{}) *MockMixCoordClient_GetStreamingNodeQueryViewResources_Call { + return &MockMixCoordClient_GetStreamingNodeQueryViewResources_Call{Call: _e.mock.On("GetStreamingNodeQueryViewResources", append([]interface{}{ctx, in}, opts...)...)} } -func (_c *MockMixCoordClient_GetStatisticsChannel_Call) Run(run func(ctx context.Context, in *internalpb.GetStatisticsChannelRequest, opts ...grpc.CallOption)) *MockMixCoordClient_GetStatisticsChannel_Call { +func (_c *MockMixCoordClient_GetStreamingNodeQueryViewResources_Call) Run(run func(ctx context.Context, in *datapb.GetStreamingNodeQueryViewResourcesRequest, opts ...grpc.CallOption)) *MockMixCoordClient_GetStreamingNodeQueryViewResources_Call { _c.Call.Run(func(args mock.Arguments) { variadicArgs := make([]grpc.CallOption, len(args)-2) for i, a := range args[2:] { @@ -8163,17 +8126,17 @@ func (_c *MockMixCoordClient_GetStatisticsChannel_Call) Run(run func(ctx context variadicArgs[i] = a.(grpc.CallOption) } } - run(args[0].(context.Context), args[1].(*internalpb.GetStatisticsChannelRequest), variadicArgs...) + run(args[0].(context.Context), args[1].(*datapb.GetStreamingNodeQueryViewResourcesRequest), variadicArgs...) }) return _c } -func (_c *MockMixCoordClient_GetStatisticsChannel_Call) Return(_a0 *milvuspb.StringResponse, _a1 error) *MockMixCoordClient_GetStatisticsChannel_Call { +func (_c *MockMixCoordClient_GetStreamingNodeQueryViewResources_Call) Return(_a0 *datapb.GetStreamingNodeQueryViewResourcesResponse, _a1 error) *MockMixCoordClient_GetStreamingNodeQueryViewResources_Call { _c.Call.Return(_a0, _a1) return _c } -func (_c *MockMixCoordClient_GetStatisticsChannel_Call) RunAndReturn(run func(context.Context, *internalpb.GetStatisticsChannelRequest, ...grpc.CallOption) (*milvuspb.StringResponse, error)) *MockMixCoordClient_GetStatisticsChannel_Call { +func (_c *MockMixCoordClient_GetStreamingNodeQueryViewResources_Call) RunAndReturn(run func(context.Context, *datapb.GetStreamingNodeQueryViewResourcesRequest, ...grpc.CallOption) (*datapb.GetStreamingNodeQueryViewResourcesResponse, error)) *MockMixCoordClient_GetStreamingNodeQueryViewResources_Call { _c.Call.Return(run) return _c } @@ -13728,6 +13691,80 @@ func (_c *MockMixCoordClient_ValidateAnalyzer_Call) RunAndReturn(run func(contex return _c } +// WaitCollectionReady provides a mock function with given fields: ctx, in, opts +func (_m *MockMixCoordClient) WaitCollectionReady(ctx context.Context, in *querypb.WaitCollectionReadyRequest, opts ...grpc.CallOption) (*commonpb.Status, error) { + _va := make([]interface{}, len(opts)) + for _i := range opts { + _va[_i] = opts[_i] + } + var _ca []interface{} + _ca = append(_ca, ctx, in) + _ca = append(_ca, _va...) + ret := _m.Called(_ca...) + + if len(ret) == 0 { + panic("no return value specified for WaitCollectionReady") + } + + var r0 *commonpb.Status + var r1 error + if rf, ok := ret.Get(0).(func(context.Context, *querypb.WaitCollectionReadyRequest, ...grpc.CallOption) (*commonpb.Status, error)); ok { + return rf(ctx, in, opts...) + } + if rf, ok := ret.Get(0).(func(context.Context, *querypb.WaitCollectionReadyRequest, ...grpc.CallOption) *commonpb.Status); ok { + r0 = rf(ctx, in, opts...) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(*commonpb.Status) + } + } + + if rf, ok := ret.Get(1).(func(context.Context, *querypb.WaitCollectionReadyRequest, ...grpc.CallOption) error); ok { + r1 = rf(ctx, in, opts...) + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + +// MockMixCoordClient_WaitCollectionReady_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'WaitCollectionReady' +type MockMixCoordClient_WaitCollectionReady_Call struct { + *mock.Call +} + +// WaitCollectionReady is a helper method to define mock.On call +// - ctx context.Context +// - in *querypb.WaitCollectionReadyRequest +// - opts ...grpc.CallOption +func (_e *MockMixCoordClient_Expecter) WaitCollectionReady(ctx interface{}, in interface{}, opts ...interface{}) *MockMixCoordClient_WaitCollectionReady_Call { + return &MockMixCoordClient_WaitCollectionReady_Call{Call: _e.mock.On("WaitCollectionReady", + append([]interface{}{ctx, in}, opts...)...)} +} + +func (_c *MockMixCoordClient_WaitCollectionReady_Call) Run(run func(ctx context.Context, in *querypb.WaitCollectionReadyRequest, opts ...grpc.CallOption)) *MockMixCoordClient_WaitCollectionReady_Call { + _c.Call.Run(func(args mock.Arguments) { + variadicArgs := make([]grpc.CallOption, len(args)-2) + for i, a := range args[2:] { + if a != nil { + variadicArgs[i] = a.(grpc.CallOption) + } + } + run(args[0].(context.Context), args[1].(*querypb.WaitCollectionReadyRequest), variadicArgs...) + }) + return _c +} + +func (_c *MockMixCoordClient_WaitCollectionReady_Call) Return(_a0 *commonpb.Status, _a1 error) *MockMixCoordClient_WaitCollectionReady_Call { + _c.Call.Return(_a0, _a1) + return _c +} + +func (_c *MockMixCoordClient_WaitCollectionReady_Call) RunAndReturn(run func(context.Context, *querypb.WaitCollectionReadyRequest, ...grpc.CallOption) (*commonpb.Status, error)) *MockMixCoordClient_WaitCollectionReady_Call { + _c.Call.Return(run) + return _c +} + // WatchChannels provides a mock function with given fields: ctx, in, opts func (_m *MockMixCoordClient) WatchChannels(ctx context.Context, in *datapb.WatchChannelsRequest, opts ...grpc.CallOption) (*datapb.WatchChannelsResponse, error) { _va := make([]interface{}, len(opts)) @@ -13802,6 +13839,79 @@ func (_c *MockMixCoordClient_WatchChannels_Call) RunAndReturn(run func(context.C return _c } +// WatchQueryViewSegmentLoadInfo provides a mock function with given fields: ctx, opts +func (_m *MockMixCoordClient) WatchQueryViewSegmentLoadInfo(ctx context.Context, opts ...grpc.CallOption) (querypb.QueryCoord_WatchQueryViewSegmentLoadInfoClient, error) { + _va := make([]interface{}, len(opts)) + for _i := range opts { + _va[_i] = opts[_i] + } + var _ca []interface{} + _ca = append(_ca, ctx) + _ca = append(_ca, _va...) + ret := _m.Called(_ca...) + + if len(ret) == 0 { + panic("no return value specified for WatchQueryViewSegmentLoadInfo") + } + + var r0 querypb.QueryCoord_WatchQueryViewSegmentLoadInfoClient + var r1 error + if rf, ok := ret.Get(0).(func(context.Context, ...grpc.CallOption) (querypb.QueryCoord_WatchQueryViewSegmentLoadInfoClient, error)); ok { + return rf(ctx, opts...) + } + if rf, ok := ret.Get(0).(func(context.Context, ...grpc.CallOption) querypb.QueryCoord_WatchQueryViewSegmentLoadInfoClient); ok { + r0 = rf(ctx, opts...) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(querypb.QueryCoord_WatchQueryViewSegmentLoadInfoClient) + } + } + + if rf, ok := ret.Get(1).(func(context.Context, ...grpc.CallOption) error); ok { + r1 = rf(ctx, opts...) + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + +// MockMixCoordClient_WatchQueryViewSegmentLoadInfo_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'WatchQueryViewSegmentLoadInfo' +type MockMixCoordClient_WatchQueryViewSegmentLoadInfo_Call struct { + *mock.Call +} + +// WatchQueryViewSegmentLoadInfo is a helper method to define mock.On call +// - ctx context.Context +// - opts ...grpc.CallOption +func (_e *MockMixCoordClient_Expecter) WatchQueryViewSegmentLoadInfo(ctx interface{}, opts ...interface{}) *MockMixCoordClient_WatchQueryViewSegmentLoadInfo_Call { + return &MockMixCoordClient_WatchQueryViewSegmentLoadInfo_Call{Call: _e.mock.On("WatchQueryViewSegmentLoadInfo", + append([]interface{}{ctx}, opts...)...)} +} + +func (_c *MockMixCoordClient_WatchQueryViewSegmentLoadInfo_Call) Run(run func(ctx context.Context, opts ...grpc.CallOption)) *MockMixCoordClient_WatchQueryViewSegmentLoadInfo_Call { + _c.Call.Run(func(args mock.Arguments) { + variadicArgs := make([]grpc.CallOption, len(args)-1) + for i, a := range args[1:] { + if a != nil { + variadicArgs[i] = a.(grpc.CallOption) + } + } + run(args[0].(context.Context), variadicArgs...) + }) + return _c +} + +func (_c *MockMixCoordClient_WatchQueryViewSegmentLoadInfo_Call) Return(_a0 querypb.QueryCoord_WatchQueryViewSegmentLoadInfoClient, _a1 error) *MockMixCoordClient_WatchQueryViewSegmentLoadInfo_Call { + _c.Call.Return(_a0, _a1) + return _c +} + +func (_c *MockMixCoordClient_WatchQueryViewSegmentLoadInfo_Call) RunAndReturn(run func(context.Context, ...grpc.CallOption) (querypb.QueryCoord_WatchQueryViewSegmentLoadInfoClient, error)) *MockMixCoordClient_WatchQueryViewSegmentLoadInfo_Call { + _c.Call.Return(run) + return _c +} + // NewMockMixCoordClient creates a new instance of MockMixCoordClient. It also registers a testing interface on the mock and a cleanup function to assert the mocks expectations. // The first argument is typically a *testing.T value. func NewMockMixCoordClient(t interface { diff --git a/internal/mocks/mock_querycoord.go b/internal/mocks/mock_querycoord.go index 3621ff437af..984392589b7 100644 --- a/internal/mocks/mock_querycoord.go +++ b/internal/mocks/mock_querycoord.go @@ -913,6 +913,65 @@ func (_c *MockQueryCoord_GetQueryNodeDistribution_Call) RunAndReturn(run func(co return _c } +// GetQueryViewLoadInfo provides a mock function with given fields: _a0, _a1 +func (_m *MockQueryCoord) GetQueryViewLoadInfo(_a0 context.Context, _a1 *querypb.GetQueryViewLoadInfoRequest) (*querypb.GetQueryViewLoadInfoResponse, error) { + ret := _m.Called(_a0, _a1) + + if len(ret) == 0 { + panic("no return value specified for GetQueryViewLoadInfo") + } + + var r0 *querypb.GetQueryViewLoadInfoResponse + var r1 error + if rf, ok := ret.Get(0).(func(context.Context, *querypb.GetQueryViewLoadInfoRequest) (*querypb.GetQueryViewLoadInfoResponse, error)); ok { + return rf(_a0, _a1) + } + if rf, ok := ret.Get(0).(func(context.Context, *querypb.GetQueryViewLoadInfoRequest) *querypb.GetQueryViewLoadInfoResponse); ok { + r0 = rf(_a0, _a1) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(*querypb.GetQueryViewLoadInfoResponse) + } + } + + if rf, ok := ret.Get(1).(func(context.Context, *querypb.GetQueryViewLoadInfoRequest) error); ok { + r1 = rf(_a0, _a1) + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + +// MockQueryCoord_GetQueryViewLoadInfo_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'GetQueryViewLoadInfo' +type MockQueryCoord_GetQueryViewLoadInfo_Call struct { + *mock.Call +} + +// GetQueryViewLoadInfo is a helper method to define mock.On call +// - _a0 context.Context +// - _a1 *querypb.GetQueryViewLoadInfoRequest +func (_e *MockQueryCoord_Expecter) GetQueryViewLoadInfo(_a0 interface{}, _a1 interface{}) *MockQueryCoord_GetQueryViewLoadInfo_Call { + return &MockQueryCoord_GetQueryViewLoadInfo_Call{Call: _e.mock.On("GetQueryViewLoadInfo", _a0, _a1)} +} + +func (_c *MockQueryCoord_GetQueryViewLoadInfo_Call) Run(run func(_a0 context.Context, _a1 *querypb.GetQueryViewLoadInfoRequest)) *MockQueryCoord_GetQueryViewLoadInfo_Call { + _c.Call.Run(func(args mock.Arguments) { + run(args[0].(context.Context), args[1].(*querypb.GetQueryViewLoadInfoRequest)) + }) + return _c +} + +func (_c *MockQueryCoord_GetQueryViewLoadInfo_Call) Return(_a0 *querypb.GetQueryViewLoadInfoResponse, _a1 error) *MockQueryCoord_GetQueryViewLoadInfo_Call { + _c.Call.Return(_a0, _a1) + return _c +} + +func (_c *MockQueryCoord_GetQueryViewLoadInfo_Call) RunAndReturn(run func(context.Context, *querypb.GetQueryViewLoadInfoRequest) (*querypb.GetQueryViewLoadInfoResponse, error)) *MockQueryCoord_GetQueryViewLoadInfo_Call { + _c.Call.Return(run) + return _c +} + // GetReplicas provides a mock function with given fields: _a0, _a1 func (_m *MockQueryCoord) GetReplicas(_a0 context.Context, _a1 *milvuspb.GetReplicasRequest) (*milvuspb.GetReplicasResponse, error) { ret := _m.Called(_a0, _a1) @@ -2943,6 +3002,111 @@ func (_c *MockQueryCoord_ValidateAnalyzer_Call) RunAndReturn(run func(context.Co return _c } +// WaitCollectionReady provides a mock function with given fields: _a0, _a1 +func (_m *MockQueryCoord) WaitCollectionReady(_a0 context.Context, _a1 *querypb.WaitCollectionReadyRequest) (*commonpb.Status, error) { + ret := _m.Called(_a0, _a1) + + if len(ret) == 0 { + panic("no return value specified for WaitCollectionReady") + } + + var r0 *commonpb.Status + var r1 error + if rf, ok := ret.Get(0).(func(context.Context, *querypb.WaitCollectionReadyRequest) (*commonpb.Status, error)); ok { + return rf(_a0, _a1) + } + if rf, ok := ret.Get(0).(func(context.Context, *querypb.WaitCollectionReadyRequest) *commonpb.Status); ok { + r0 = rf(_a0, _a1) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(*commonpb.Status) + } + } + + if rf, ok := ret.Get(1).(func(context.Context, *querypb.WaitCollectionReadyRequest) error); ok { + r1 = rf(_a0, _a1) + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + +// MockQueryCoord_WaitCollectionReady_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'WaitCollectionReady' +type MockQueryCoord_WaitCollectionReady_Call struct { + *mock.Call +} + +// WaitCollectionReady is a helper method to define mock.On call +// - _a0 context.Context +// - _a1 *querypb.WaitCollectionReadyRequest +func (_e *MockQueryCoord_Expecter) WaitCollectionReady(_a0 interface{}, _a1 interface{}) *MockQueryCoord_WaitCollectionReady_Call { + return &MockQueryCoord_WaitCollectionReady_Call{Call: _e.mock.On("WaitCollectionReady", _a0, _a1)} +} + +func (_c *MockQueryCoord_WaitCollectionReady_Call) Run(run func(_a0 context.Context, _a1 *querypb.WaitCollectionReadyRequest)) *MockQueryCoord_WaitCollectionReady_Call { + _c.Call.Run(func(args mock.Arguments) { + run(args[0].(context.Context), args[1].(*querypb.WaitCollectionReadyRequest)) + }) + return _c +} + +func (_c *MockQueryCoord_WaitCollectionReady_Call) Return(_a0 *commonpb.Status, _a1 error) *MockQueryCoord_WaitCollectionReady_Call { + _c.Call.Return(_a0, _a1) + return _c +} + +func (_c *MockQueryCoord_WaitCollectionReady_Call) RunAndReturn(run func(context.Context, *querypb.WaitCollectionReadyRequest) (*commonpb.Status, error)) *MockQueryCoord_WaitCollectionReady_Call { + _c.Call.Return(run) + return _c +} + +// WatchQueryViewSegmentLoadInfo provides a mock function with given fields: _a0 +func (_m *MockQueryCoord) WatchQueryViewSegmentLoadInfo(_a0 querypb.QueryCoord_WatchQueryViewSegmentLoadInfoServer) error { + ret := _m.Called(_a0) + + if len(ret) == 0 { + panic("no return value specified for WatchQueryViewSegmentLoadInfo") + } + + var r0 error + if rf, ok := ret.Get(0).(func(querypb.QueryCoord_WatchQueryViewSegmentLoadInfoServer) error); ok { + r0 = rf(_a0) + } else { + r0 = ret.Error(0) + } + + return r0 +} + +// MockQueryCoord_WatchQueryViewSegmentLoadInfo_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'WatchQueryViewSegmentLoadInfo' +type MockQueryCoord_WatchQueryViewSegmentLoadInfo_Call struct { + *mock.Call +} + +// WatchQueryViewSegmentLoadInfo is a helper method to define mock.On call +// - _a0 querypb.QueryCoord_WatchQueryViewSegmentLoadInfoServer +func (_e *MockQueryCoord_Expecter) WatchQueryViewSegmentLoadInfo(_a0 interface{}) *MockQueryCoord_WatchQueryViewSegmentLoadInfo_Call { + return &MockQueryCoord_WatchQueryViewSegmentLoadInfo_Call{Call: _e.mock.On("WatchQueryViewSegmentLoadInfo", _a0)} +} + +func (_c *MockQueryCoord_WatchQueryViewSegmentLoadInfo_Call) Run(run func(_a0 querypb.QueryCoord_WatchQueryViewSegmentLoadInfoServer)) *MockQueryCoord_WatchQueryViewSegmentLoadInfo_Call { + _c.Call.Run(func(args mock.Arguments) { + run(args[0].(querypb.QueryCoord_WatchQueryViewSegmentLoadInfoServer)) + }) + return _c +} + +func (_c *MockQueryCoord_WatchQueryViewSegmentLoadInfo_Call) Return(_a0 error) *MockQueryCoord_WatchQueryViewSegmentLoadInfo_Call { + _c.Call.Return(_a0) + return _c +} + +func (_c *MockQueryCoord_WatchQueryViewSegmentLoadInfo_Call) RunAndReturn(run func(querypb.QueryCoord_WatchQueryViewSegmentLoadInfoServer) error) *MockQueryCoord_WatchQueryViewSegmentLoadInfo_Call { + _c.Call.Return(run) + return _c +} + // NewMockQueryCoord creates a new instance of MockQueryCoord. It also registers a testing interface on the mock and a cleanup function to assert the mocks expectations. // The first argument is typically a *testing.T value. func NewMockQueryCoord(t interface { diff --git a/internal/mocks/mock_querycoord_client.go b/internal/mocks/mock_querycoord_client.go index acff2bf1e01..d569358b0be 100644 --- a/internal/mocks/mock_querycoord_client.go +++ b/internal/mocks/mock_querycoord_client.go @@ -1255,43 +1255,6 @@ func (_c *MockQueryCoordClient_GetQueryViewLoadInfo_Call) RunAndReturn(run func( return _c } -// WatchQueryViewSegmentLoadInfo provides a mock function with given fields: ctx, opts -func (_m *MockQueryCoordClient) WatchQueryViewSegmentLoadInfo(ctx context.Context, opts ...grpc.CallOption) (querypb.QueryCoord_WatchQueryViewSegmentLoadInfoClient, error) { - _va := make([]interface{}, len(opts)) - for _i := range opts { - _va[_i] = opts[_i] - } - var _ca []interface{} - _ca = append(_ca, ctx) - _ca = append(_ca, _va...) - ret := _m.Called(_ca...) - - if len(ret) == 0 { - panic("no return value specified for WatchQueryViewSegmentLoadInfo") - } - - var r0 querypb.QueryCoord_WatchQueryViewSegmentLoadInfoClient - var r1 error - if rf, ok := ret.Get(0).(func(context.Context, ...grpc.CallOption) (querypb.QueryCoord_WatchQueryViewSegmentLoadInfoClient, error)); ok { - return rf(ctx, opts...) - } - if rf, ok := ret.Get(0).(func(context.Context, ...grpc.CallOption) querypb.QueryCoord_WatchQueryViewSegmentLoadInfoClient); ok { - r0 = rf(ctx, opts...) - } else { - if ret.Get(0) != nil { - r0 = ret.Get(0).(querypb.QueryCoord_WatchQueryViewSegmentLoadInfoClient) - } - } - - if rf, ok := ret.Get(1).(func(context.Context, ...grpc.CallOption) error); ok { - r1 = rf(ctx, opts...) - } else { - r1 = ret.Error(1) - } - - return r0, r1 -} - // GetReplicas provides a mock function with given fields: ctx, in, opts func (_m *MockQueryCoordClient) GetReplicas(ctx context.Context, in *milvuspb.GetReplicasRequest, opts ...grpc.CallOption) (*milvuspb.GetReplicasResponse, error) { _va := make([]interface{}, len(opts)) @@ -3364,6 +3327,153 @@ func (_c *MockQueryCoordClient_ValidateAnalyzer_Call) RunAndReturn(run func(cont return _c } +// WaitCollectionReady provides a mock function with given fields: ctx, in, opts +func (_m *MockQueryCoordClient) WaitCollectionReady(ctx context.Context, in *querypb.WaitCollectionReadyRequest, opts ...grpc.CallOption) (*commonpb.Status, error) { + _va := make([]interface{}, len(opts)) + for _i := range opts { + _va[_i] = opts[_i] + } + var _ca []interface{} + _ca = append(_ca, ctx, in) + _ca = append(_ca, _va...) + ret := _m.Called(_ca...) + + if len(ret) == 0 { + panic("no return value specified for WaitCollectionReady") + } + + var r0 *commonpb.Status + var r1 error + if rf, ok := ret.Get(0).(func(context.Context, *querypb.WaitCollectionReadyRequest, ...grpc.CallOption) (*commonpb.Status, error)); ok { + return rf(ctx, in, opts...) + } + if rf, ok := ret.Get(0).(func(context.Context, *querypb.WaitCollectionReadyRequest, ...grpc.CallOption) *commonpb.Status); ok { + r0 = rf(ctx, in, opts...) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(*commonpb.Status) + } + } + + if rf, ok := ret.Get(1).(func(context.Context, *querypb.WaitCollectionReadyRequest, ...grpc.CallOption) error); ok { + r1 = rf(ctx, in, opts...) + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + +// MockQueryCoordClient_WaitCollectionReady_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'WaitCollectionReady' +type MockQueryCoordClient_WaitCollectionReady_Call struct { + *mock.Call +} + +// WaitCollectionReady is a helper method to define mock.On call +// - ctx context.Context +// - in *querypb.WaitCollectionReadyRequest +// - opts ...grpc.CallOption +func (_e *MockQueryCoordClient_Expecter) WaitCollectionReady(ctx interface{}, in interface{}, opts ...interface{}) *MockQueryCoordClient_WaitCollectionReady_Call { + return &MockQueryCoordClient_WaitCollectionReady_Call{Call: _e.mock.On("WaitCollectionReady", + append([]interface{}{ctx, in}, opts...)...)} +} + +func (_c *MockQueryCoordClient_WaitCollectionReady_Call) Run(run func(ctx context.Context, in *querypb.WaitCollectionReadyRequest, opts ...grpc.CallOption)) *MockQueryCoordClient_WaitCollectionReady_Call { + _c.Call.Run(func(args mock.Arguments) { + variadicArgs := make([]grpc.CallOption, len(args)-2) + for i, a := range args[2:] { + if a != nil { + variadicArgs[i] = a.(grpc.CallOption) + } + } + run(args[0].(context.Context), args[1].(*querypb.WaitCollectionReadyRequest), variadicArgs...) + }) + return _c +} + +func (_c *MockQueryCoordClient_WaitCollectionReady_Call) Return(_a0 *commonpb.Status, _a1 error) *MockQueryCoordClient_WaitCollectionReady_Call { + _c.Call.Return(_a0, _a1) + return _c +} + +func (_c *MockQueryCoordClient_WaitCollectionReady_Call) RunAndReturn(run func(context.Context, *querypb.WaitCollectionReadyRequest, ...grpc.CallOption) (*commonpb.Status, error)) *MockQueryCoordClient_WaitCollectionReady_Call { + _c.Call.Return(run) + return _c +} + +// WatchQueryViewSegmentLoadInfo provides a mock function with given fields: ctx, opts +func (_m *MockQueryCoordClient) WatchQueryViewSegmentLoadInfo(ctx context.Context, opts ...grpc.CallOption) (querypb.QueryCoord_WatchQueryViewSegmentLoadInfoClient, error) { + _va := make([]interface{}, len(opts)) + for _i := range opts { + _va[_i] = opts[_i] + } + var _ca []interface{} + _ca = append(_ca, ctx) + _ca = append(_ca, _va...) + ret := _m.Called(_ca...) + + if len(ret) == 0 { + panic("no return value specified for WatchQueryViewSegmentLoadInfo") + } + + var r0 querypb.QueryCoord_WatchQueryViewSegmentLoadInfoClient + var r1 error + if rf, ok := ret.Get(0).(func(context.Context, ...grpc.CallOption) (querypb.QueryCoord_WatchQueryViewSegmentLoadInfoClient, error)); ok { + return rf(ctx, opts...) + } + if rf, ok := ret.Get(0).(func(context.Context, ...grpc.CallOption) querypb.QueryCoord_WatchQueryViewSegmentLoadInfoClient); ok { + r0 = rf(ctx, opts...) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(querypb.QueryCoord_WatchQueryViewSegmentLoadInfoClient) + } + } + + if rf, ok := ret.Get(1).(func(context.Context, ...grpc.CallOption) error); ok { + r1 = rf(ctx, opts...) + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + +// MockQueryCoordClient_WatchQueryViewSegmentLoadInfo_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'WatchQueryViewSegmentLoadInfo' +type MockQueryCoordClient_WatchQueryViewSegmentLoadInfo_Call struct { + *mock.Call +} + +// WatchQueryViewSegmentLoadInfo is a helper method to define mock.On call +// - ctx context.Context +// - opts ...grpc.CallOption +func (_e *MockQueryCoordClient_Expecter) WatchQueryViewSegmentLoadInfo(ctx interface{}, opts ...interface{}) *MockQueryCoordClient_WatchQueryViewSegmentLoadInfo_Call { + return &MockQueryCoordClient_WatchQueryViewSegmentLoadInfo_Call{Call: _e.mock.On("WatchQueryViewSegmentLoadInfo", + append([]interface{}{ctx}, opts...)...)} +} + +func (_c *MockQueryCoordClient_WatchQueryViewSegmentLoadInfo_Call) Run(run func(ctx context.Context, opts ...grpc.CallOption)) *MockQueryCoordClient_WatchQueryViewSegmentLoadInfo_Call { + _c.Call.Run(func(args mock.Arguments) { + variadicArgs := make([]grpc.CallOption, len(args)-1) + for i, a := range args[1:] { + if a != nil { + variadicArgs[i] = a.(grpc.CallOption) + } + } + run(args[0].(context.Context), variadicArgs...) + }) + return _c +} + +func (_c *MockQueryCoordClient_WatchQueryViewSegmentLoadInfo_Call) Return(_a0 querypb.QueryCoord_WatchQueryViewSegmentLoadInfoClient, _a1 error) *MockQueryCoordClient_WatchQueryViewSegmentLoadInfo_Call { + _c.Call.Return(_a0, _a1) + return _c +} + +func (_c *MockQueryCoordClient_WatchQueryViewSegmentLoadInfo_Call) RunAndReturn(run func(context.Context, ...grpc.CallOption) (querypb.QueryCoord_WatchQueryViewSegmentLoadInfoClient, error)) *MockQueryCoordClient_WatchQueryViewSegmentLoadInfo_Call { + _c.Call.Return(run) + return _c +} + // NewMockQueryCoordClient creates a new instance of MockQueryCoordClient. It also registers a testing interface on the mock and a cleanup function to assert the mocks expectations. // The first argument is typically a *testing.T value. func NewMockQueryCoordClient(t interface { diff --git a/internal/proxy/collection_readiness.go b/internal/proxy/collection_readiness.go index 5ac5029178b..52f4e25a1d9 100644 --- a/internal/proxy/collection_readiness.go +++ b/internal/proxy/collection_readiness.go @@ -18,9 +18,6 @@ package proxy import ( "context" - "time" - - "github.com/cockroachdb/errors" "github.com/milvus-io/milvus/internal/views/queryclient" "github.com/milvus-io/milvus/pkg/v3/proto/querypb" @@ -29,49 +26,30 @@ import ( var _ queryclient.CollectionReadiness = (*Proxy)(nil) -// CheckCollectionReady checks QueryCoord's query-service readiness. Assignment -// discovery no longer carries collection shard views, and the metadata cache's -// vchannels describe topology regardless of whether the collection is loaded. func (node *Proxy) CheckCollectionReady(ctx context.Context, collectionID int64, expectedVChannels []string) error { + return node.checkOrWaitCollectionReady(ctx, collectionID, expectedVChannels, true) +} + +// WaitForCollectionReady sends one RPC. QueryCoord wakes it on state changes; +// the Proxy does not poll ShowLoadCollections while the collection loads. +func (node *Proxy) WaitForCollectionReady(ctx context.Context, collectionID int64, expectedVChannels []string) error { + return node.checkOrWaitCollectionReady(ctx, collectionID, expectedVChannels, false) +} + +func (node *Proxy) checkOrWaitCollectionReady(ctx context.Context, collectionID int64, expectedVChannels []string, checkOnly bool) error { if err := ctx.Err(); err != nil { return context.Cause(ctx) } if len(expectedVChannels) == 0 { return merr.WrapErrCollectionNotLoaded(collectionID) } - resp, err := node.mixCoord.ShowLoadCollections(ctx, &querypb.ShowCollectionsRequest{ - CollectionIDs: []int64{collectionID}, + resp, err := node.mixCoord.WaitCollectionReady(ctx, &querypb.WaitCollectionReadyRequest{ + CollectionID: collectionID, + ExpectedVchannels: expectedVChannels, + CheckOnly: checkOnly, }) - if err := merr.CheckRPCCall(resp, err); err != nil { - return err - } - if len(resp.GetCollectionIDs()) != len(resp.GetQueryServiceAvailable()) { - return merr.WrapErrServiceInternalMsg("query service readiness does not match collection IDs") - } - for i, id := range resp.GetCollectionIDs() { - if id == collectionID && resp.GetQueryServiceAvailable()[i] { - return nil - } - } - return merr.WrapErrCollectionNotLoaded(collectionID) -} - -// WaitForCollectionReady waits for QueryCoord to report available query views. -func (node *Proxy) WaitForCollectionReady(ctx context.Context, collectionID int64, expectedVChannels []string) error { - if len(expectedVChannels) == 0 { - return merr.WrapErrCollectionNotLoaded(collectionID) - } - ticker := time.NewTicker(10 * time.Millisecond) - defer ticker.Stop() - for { - err := node.CheckCollectionReady(ctx, collectionID, expectedVChannels) - if !errors.Is(err, merr.ErrCollectionNotLoaded) { - return err - } - select { - case <-ctx.Done(): - return context.Cause(ctx) - case <-ticker.C: - } + if ctx.Err() != nil { + return context.Cause(ctx) } + return merr.CheckRPCCall(resp, err) } diff --git a/internal/proxy/collection_readiness_test.go b/internal/proxy/collection_readiness_test.go index 86bf2c17903..dc55855d1f1 100644 --- a/internal/proxy/collection_readiness_test.go +++ b/internal/proxy/collection_readiness_test.go @@ -18,126 +18,88 @@ package proxy import ( "context" + "sync/atomic" "testing" + "time" "github.com/stretchr/testify/require" "google.golang.org/grpc" + grpcstatus "google.golang.org/grpc/status" + "github.com/milvus-io/milvus-proto/go-api/v3/commonpb" "github.com/milvus-io/milvus/pkg/v3/proto/querypb" "github.com/milvus-io/milvus/pkg/v3/util/merr" ) -func TestCheckCollectionReadyUsesQueryCoordReadiness(t *testing.T) { - tests := []struct { - name string - resp *querypb.ShowCollectionsResponse - err error - want error - }{ - { - name: "loaded", - resp: &querypb.ShowCollectionsResponse{ - Status: merr.Success(), CollectionIDs: []int64{100}, QueryServiceAvailable: []bool{true}, - }, - }, - { - name: "views not yet available", - resp: &querypb.ShowCollectionsResponse{ - Status: merr.Success(), CollectionIDs: []int64{100}, QueryServiceAvailable: []bool{false}, - }, - want: merr.ErrCollectionNotLoaded, - }, - { - name: "another collection cannot satisfy readiness", - resp: &querypb.ShowCollectionsResponse{ - Status: merr.Success(), CollectionIDs: []int64{101}, QueryServiceAvailable: []bool{true}, - }, - want: merr.ErrCollectionNotLoaded, - }, - { - name: "released", - resp: &querypb.ShowCollectionsResponse{Status: merr.Status(merr.WrapErrCollectionNotLoaded(100))}, - want: merr.ErrCollectionNotLoaded, - }, - { - name: "querycoord error is preserved", - resp: &querypb.ShowCollectionsResponse{Status: merr.Status(merr.WrapErrServiceUnavailableMsg("recovering"))}, - want: merr.ErrServiceUnavailable, - }, - { - name: "transport error is preserved", - err: context.DeadlineExceeded, - want: context.DeadlineExceeded, - }, - { - name: "malformed readiness response", - resp: &querypb.ShowCollectionsResponse{Status: merr.Success(), CollectionIDs: []int64{100}}, - want: merr.ErrServiceInternal, - }, - } - for _, test := range tests { - t.Run(test.name, func(t *testing.T) { +func TestCollectionReadinessUsesOneRPC(t *testing.T) { + for _, checkOnly := range []bool{true, false} { + for _, want := range []error{nil, merr.ErrCollectionNotLoaded, merr.ErrServiceUnavailable} { + calls := 0 node := &Proxy{mixCoord: &MixCoordMock{ - ShowLoadCollectionsFunc: func(_ context.Context, req *querypb.ShowCollectionsRequest, _ ...grpc.CallOption) (*querypb.ShowCollectionsResponse, error) { - require.Equal(t, []int64{100}, req.GetCollectionIDs()) - return test.resp, test.err + WaitCollectionReadyFunc: func(_ context.Context, req *querypb.WaitCollectionReadyRequest, _ ...grpc.CallOption) (*commonpb.Status, error) { + calls++ + require.EqualValues(t, 100, req.GetCollectionID()) + require.Equal(t, []string{"v0", "v1"}, req.GetExpectedVchannels()) + require.Equal(t, checkOnly, req.GetCheckOnly()) + return merr.Status(want), nil + }, + ShowLoadCollectionsFunc: func(context.Context, *querypb.ShowCollectionsRequest, ...grpc.CallOption) (*querypb.ShowCollectionsResponse, error) { + t.Fatal("readiness must not poll ShowLoadCollections") + return nil, nil }, }} - err := node.CheckCollectionReady(context.Background(), 100, []string{"v0", "v1"}) - if test.want == nil { - require.NoError(t, err) + var err error + if checkOnly { + err = node.CheckCollectionReady(context.Background(), 100, []string{"v0", "v1"}) } else { - require.ErrorIs(t, err, test.want) + err = node.WaitForCollectionReady(context.Background(), 100, []string{"v0", "v1"}) } - }) + require.ErrorIs(t, err, want) + require.Equal(t, 1, calls) + } } } -func TestWaitForCollectionReadyUsesQueryCoord(t *testing.T) { - t.Run("waits until query service is available", func(t *testing.T) { - calls := 0 - node := &Proxy{mixCoord: &MixCoordMock{ - ShowLoadCollectionsFunc: func(context.Context, *querypb.ShowCollectionsRequest, ...grpc.CallOption) (*querypb.ShowCollectionsResponse, error) { - calls++ - return &querypb.ShowCollectionsResponse{ - Status: merr.Success(), CollectionIDs: []int64{100}, QueryServiceAvailable: []bool{calls >= 3}, - }, nil - }, - }} - require.NoError(t, node.WaitForCollectionReady(context.Background(), 100, []string{"v0"})) - require.Equal(t, 3, calls) - }) - - t.Run("cancellation stops waiting", func(t *testing.T) { - ctx, cancel := context.WithCancelCause(context.Background()) - defer cancel(nil) - calls := 0 - node := &Proxy{mixCoord: &MixCoordMock{ - ShowLoadCollectionsFunc: func(context.Context, *querypb.ShowCollectionsRequest, ...grpc.CallOption) (*querypb.ShowCollectionsResponse, error) { - calls++ - cancel(context.DeadlineExceeded) - return &querypb.ShowCollectionsResponse{Status: merr.Status(merr.WrapErrCollectionNotLoaded(100))}, nil - }, - }} - require.ErrorIs(t, node.WaitForCollectionReady(ctx, 100, []string{"v0"}), context.DeadlineExceeded) - require.Equal(t, 1, calls) - }) - - t.Run("other errors do not loop", func(t *testing.T) { - calls := 0 - node := &Proxy{mixCoord: &MixCoordMock{ - ShowLoadCollectionsFunc: func(context.Context, *querypb.ShowCollectionsRequest, ...grpc.CallOption) (*querypb.ShowCollectionsResponse, error) { - calls++ - return &querypb.ShowCollectionsResponse{Status: merr.Status(merr.WrapErrServiceInternalMsg("failed"))}, nil - }, - }} - require.ErrorIs(t, node.WaitForCollectionReady(context.Background(), 100, []string{"v0"}), merr.ErrServiceInternal) - require.Equal(t, 1, calls) - }) +func TestCollectionReadinessCancellationDoesNotPoll(t *testing.T) { + ctx, cancel := context.WithCancel(context.Background()) + defer cancel() + started := make(chan struct{}) + var calls atomic.Int32 + node := &Proxy{mixCoord: &MixCoordMock{ + WaitCollectionReadyFunc: func(ctx context.Context, _ *querypb.WaitCollectionReadyRequest, _ ...grpc.CallOption) (*commonpb.Status, error) { + calls.Add(1) + close(started) + <-ctx.Done() + return nil, grpcstatus.FromContextError(ctx.Err()).Err() + }, + }} + result := make(chan error, 1) + go func() { result <- node.WaitForCollectionReady(ctx, 100, []string{"v0"}) }() + select { + case <-started: + case <-time.After(time.Second): + t.Fatal("RPC did not start") + } + select { + case err := <-result: + t.Fatalf("wait returned before cancellation: %v", err) + case <-time.After(35 * time.Millisecond): + } + cancel() + select { + case err := <-result: + require.ErrorIs(t, err, context.Canceled) + case <-time.After(time.Second): + t.Fatal("RPC did not stop on cancellation") + } + require.EqualValues(t, 1, calls.Load()) +} - t.Run("empty topology does not wait", func(t *testing.T) { - node := &Proxy{} - require.ErrorIs(t, node.CheckCollectionReady(context.Background(), 100, nil), merr.ErrCollectionNotLoaded) - require.ErrorIs(t, node.WaitForCollectionReady(context.Background(), 100, nil), merr.ErrCollectionNotLoaded) - }) +func TestCollectionReadinessRejectsEmptyTopologyAndCanceledContext(t *testing.T) { + node := &Proxy{} + require.ErrorIs(t, node.CheckCollectionReady(context.Background(), 100, nil), merr.ErrCollectionNotLoaded) + require.ErrorIs(t, node.WaitForCollectionReady(context.Background(), 100, nil), merr.ErrCollectionNotLoaded) + ctx, cancel := context.WithCancelCause(context.Background()) + cancel(context.DeadlineExceeded) + require.ErrorIs(t, node.WaitForCollectionReady(ctx, 100, []string{"v0"}), context.DeadlineExceeded) } diff --git a/internal/proxy/rootcoord_mock_test.go b/internal/proxy/rootcoord_mock_test.go index 64e1cac1a78..38e7ebb2820 100644 --- a/internal/proxy/rootcoord_mock_test.go +++ b/internal/proxy/rootcoord_mock_test.go @@ -112,6 +112,7 @@ type MixCoordMock struct { DescribeIndexFunc func(ctx context.Context, request *indexpb.DescribeIndexRequest, opts ...grpc.CallOption) (*indexpb.DescribeIndexResponse, error) GetShardLeadersFunc func(ctx context.Context, request *querypb.GetShardLeadersRequest, opts ...grpc.CallOption) (*querypb.GetShardLeadersResponse, error) ShowLoadPartitionsFunc func(ctx context.Context, request *querypb.ShowPartitionsRequest, opts ...grpc.CallOption) (*querypb.ShowPartitionsResponse, error) + WaitCollectionReadyFunc func(context.Context, *querypb.WaitCollectionReadyRequest, ...grpc.CallOption) (*commonpb.Status, error) ShowLoadCollectionsFunc func(ctx context.Context, request *querypb.ShowCollectionsRequest, opts ...grpc.CallOption) (*querypb.ShowCollectionsResponse, error) GetGetCredentialFunc DescribeCollectionFunc @@ -1671,6 +1672,13 @@ func (coord *MixCoordMock) GetIndexBuildProgress(ctx context.Context, req *index }, nil } +func (coord *MixCoordMock) WaitCollectionReady(ctx context.Context, req *querypb.WaitCollectionReadyRequest, opts ...grpc.CallOption) (*commonpb.Status, error) { + if coord.WaitCollectionReadyFunc != nil { + return coord.WaitCollectionReadyFunc(ctx, req, opts...) + } + return merr.Success(), nil +} + func (coord *MixCoordMock) ShowLoadCollections(ctx context.Context, in *querypb.ShowCollectionsRequest, opts ...grpc.CallOption) (*querypb.ShowCollectionsResponse, error) { if coord.ShowLoadCollectionsFunc != nil { return coord.ShowLoadCollectionsFunc(ctx, in) diff --git a/internal/proxy/search_auto_load.go b/internal/proxy/search_auto_load.go index 643e24b7cfa..99cdad87565 100644 --- a/internal/proxy/search_auto_load.go +++ b/internal/proxy/search_auto_load.go @@ -81,12 +81,11 @@ func (node *Proxy) ensureCollectionReady(ctx context.Context, dbName, collection return merr.Wrap(err, "check collection load state before DQL request") } + loadRequest := &milvuspb.LoadCollectionRequest{DbName: dbName, CollectionName: collectionName} + needsLoad := loadState.GetState() == commonpb.LoadState_LoadStateNotLoad switch loadState.GetState() { case commonpb.LoadState_LoadStateNotLoad: - loadRequest := &milvuspb.LoadCollectionRequest{ - DbName: dbName, - CollectionName: collectionName, - } + // Every caller must authorize its own load before joining shared work. ctx, err = PrivilegeInterceptor(ctx, loadRequest) if err != nil { if grpcstatus.Code(err) == codes.PermissionDenied { @@ -94,20 +93,26 @@ func (node *Proxy) ensureCollectionReady(ctx context.Context, dbName, collection } return err } - resultCh := node.autoLoadCollectionGroup.DoChan(strconv.FormatInt(collectionID, 10), func() (struct{}, error) { - loadCtx, cancelLifecycle := contextutil.MergeContext(context.WithoutCancel(ctx), node.ctx) - defer cancelLifecycle() - loadCtx, cancelTimeout := context.WithTimeout(loadCtx, loadTimeout) - defer cancelTimeout() + case commonpb.LoadState_LoadStateLoading, commonpb.LoadState_LoadStateLoaded: + case commonpb.LoadState_LoadStateNotExist: + return merr.WrapErrCollectionNotFoundWithDB(dbName, collectionName) + default: + return merr.WrapErrServiceInternalMsg("unexpected collection load state %s", loadState.GetState().String()) + } + + // Share the complete load-and-wait lifecycle, including callers that observe + // Loading after another request has already submitted the load. + resultCh := node.autoLoadCollectionGroup.DoChan(strconv.FormatInt(collectionID, 10), func() (struct{}, error) { + loadCtx, cancelLifecycle := contextutil.MergeContext(context.WithoutCancel(ctx), node.ctx) + defer cancelLifecycle() + loadCtx, cancelTimeout := context.WithTimeout(loadCtx, loadTimeout) + defer cancelTimeout() - loadState, err := node.GetLoadState(loadCtx, &milvuspb.GetLoadStateRequest{ - DbName: dbName, - CollectionName: collectionName, - }) + if needsLoad { + loadState, err := node.GetLoadState(loadCtx, &milvuspb.GetLoadStateRequest{DbName: dbName, CollectionName: collectionName}) if err := merr.CheckRPCCall(loadState, err); err != nil { return struct{}{}, merr.Wrap(err, "recheck collection load state before DQL request") } - switch loadState.GetState() { case commonpb.LoadState_LoadStateNotLoad: mlog.Info(loadCtx, "load collection before DQL request", @@ -124,35 +129,25 @@ func (node *Proxy) ensureCollectionReady(ctx context.Context, dbName, collection default: return struct{}{}, merr.WrapErrServiceInternalMsg("unexpected collection load state %s", loadState.GetState().String()) } - return struct{}{}, nil - }) - select { - case result := <-resultCh: - if result.Err != nil { - return result.Err - } - case <-ctx.Done(): + } + waitStartedAt := time.Now() + if err := readiness.WaitForCollectionReady(loadCtx, collectionID, collectionInfo.VChannels); err != nil { + return struct{}{}, err + } + mlog.Info(loadCtx, "[load on search] wait collection ready done", + mlog.FieldDbName(dbName), mlog.FieldCollectionName(collectionName), + mlog.FieldCollectionID(collectionID), mlog.Duration("wait", time.Since(waitStartedAt))) + return struct{}{}, nil + }) + select { + case result := <-resultCh: + if err := ctx.Err(); err != nil { return context.Cause(ctx) } - case commonpb.LoadState_LoadStateLoading, commonpb.LoadState_LoadStateLoaded: - // Recheck QueryCoord readiness below after load submission or while - // the collection's query views are still becoming available. - case commonpb.LoadState_LoadStateNotExist: - return merr.WrapErrCollectionNotFoundWithDB(dbName, collectionName) - default: - return merr.WrapErrServiceInternalMsg("unexpected collection load state %s", loadState.GetState().String()) - } - - waitStartedAt := time.Now() - if err := readiness.WaitForCollectionReady(ctx, collectionID, collectionInfo.VChannels); err != nil { - return err + return result.Err + case <-ctx.Done(): + return context.Cause(ctx) } - mlog.Info(ctx, "[load on search] wait collection ready done", - mlog.FieldDbName(dbName), - mlog.FieldCollectionName(collectionName), - mlog.FieldCollectionID(collectionID), - mlog.Duration("wait", time.Since(waitStartedAt))) - return nil } // loadCollectionForDQL submits a shared automatic load without a task queue. diff --git a/internal/proxy/search_auto_load_wait_test.go b/internal/proxy/search_auto_load_wait_test.go new file mode 100644 index 00000000000..c7b8d69ce6e --- /dev/null +++ b/internal/proxy/search_auto_load_wait_test.go @@ -0,0 +1,138 @@ +// Licensed to the LF AI & Data foundation under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you 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. + +package proxy + +import ( + "context" + "sync" + "sync/atomic" + "testing" + "time" + + "github.com/bytedance/mockey" + "github.com/stretchr/testify/require" + + "github.com/milvus-io/milvus-proto/go-api/v3/commonpb" + "github.com/milvus-io/milvus-proto/go-api/v3/milvuspb" + "github.com/milvus-io/milvus/pkg/v3/util/merr" +) + +type sharedReadinessClient struct { + autoLoadViewQueryClient + started chan struct{} + finish chan struct{} + canceled chan struct{} + once sync.Once + waits atomic.Int32 +} + +func (c *sharedReadinessClient) WaitForCollectionReady(ctx context.Context, _ int64, _ []string) error { + c.waits.Add(1) + c.once.Do(func() { close(c.started) }) + select { + case <-c.finish: + return nil + case <-ctx.Done(): + select { + case c.canceled <- struct{}{}: + default: + } + return context.Cause(ctx) + } +} + +func TestEnsureCollectionReadySharesWaitingAndPreservesCallerCancellation(t *testing.T) { + for _, initial := range []commonpb.LoadState{commonpb.LoadState_LoadStateNotLoad, commonpb.LoadState_LoadStateLoading} { + t.Run(initial.String(), func(t *testing.T) { + enableAutoLoad(t) + client := &sharedReadinessClient{ + autoLoadViewQueryClient: autoLoadViewQueryClient{checkErr: merr.WrapErrCollectionNotLoaded(100)}, + started: make(chan struct{}), finish: make(chan struct{}), canceled: make(chan struct{}, 1), + } + var finishOnce sync.Once + finish := func() { finishOnce.Do(func() { close(client.finish) }) } + t.Cleanup(finish) + nodeCtx, stop := context.WithCancel(context.Background()) + defer stop() + node := &Proxy{ctx: nodeCtx, metaCache: mockSearchCollectionMeta(t, 100, []string{"v0", "v1"}), viewQueryClient: client} + node.UpdateStateCode(commonpb.StateCode_Healthy) + var loading atomic.Bool + loading.Store(initial == commonpb.LoadState_LoadStateLoading) + var checks, loads atomic.Int32 + stateMock := mockey.Mock((*Proxy).GetLoadState).To(func(*Proxy, context.Context, *milvuspb.GetLoadStateRequest) (*milvuspb.GetLoadStateResponse, error) { + checks.Add(1) + state := commonpb.LoadState_LoadStateNotLoad + if loading.Load() { + state = commonpb.LoadState_LoadStateLoading + } + return &milvuspb.GetLoadStateResponse{Status: merr.Success(), State: state}, nil + }).Build() + defer stateMock.UnPatch() + privilegeMock := mockey.Mock(PrivilegeInterceptor).To(func(ctx context.Context, _ interface{}) (context.Context, error) { return ctx, nil }).Build() + defer privilegeMock.UnPatch() + loadMock := mockey.Mock((*Proxy).loadCollectionForDQL).To(func(*Proxy, context.Context, *milvuspb.LoadCollectionRequest) (*commonpb.Status, error) { + loads.Add(1) + loading.Store(true) + return merr.Success(), nil + }).Build() + defer loadMock.UnPatch() + leaderCtx, cancelLeader := context.WithCancel(context.Background()) + defer cancelLeader() + leaderResult := make(chan error, 1) + go func() { leaderResult <- node.ensureCollectionReady(leaderCtx, "db", "collection") }() + select { + case <-client.started: + case <-time.After(3 * time.Second): + t.Fatal("shared wait did not start") + } + const followers = 16 + results := make(chan error, followers) + for i := 0; i < followers; i++ { + go func() { results <- node.ensureCollectionReady(context.Background(), "db", "collection") }() + } + require.Eventually(t, func() bool { return checks.Load() >= followers+1 }, time.Second, time.Millisecond) + cancelLeader() + select { + case err := <-leaderResult: + require.ErrorIs(t, err, context.Canceled) + case <-time.After(time.Second): + t.Fatal("leader could not cancel independently") + } + select { + case <-client.canceled: + t.Fatal("one caller canceled the shared RPC") + case <-time.After(35 * time.Millisecond): + } + require.EqualValues(t, 1, client.waits.Load(), "Loading callers must join the existing wait") + finish() + for i := 0; i < followers; i++ { + select { + case err := <-results: + require.NoError(t, err) + case <-time.After(time.Second): + t.Fatal("follower did not receive readiness") + } + } + require.EqualValues(t, 1, client.waits.Load()) + expectedLoads := int32(0) + if initial == commonpb.LoadState_LoadStateNotLoad { + expectedLoads = 1 + } + require.Equal(t, expectedLoads, loads.Load()) + }) + } +} diff --git a/internal/querycoordv2/collection_readiness.go b/internal/querycoordv2/collection_readiness.go new file mode 100644 index 00000000000..315962535f1 --- /dev/null +++ b/internal/querycoordv2/collection_readiness.go @@ -0,0 +1,142 @@ +// Licensed to the LF AI & Data foundation under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you 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. + +package querycoordv2 + +import ( + "context" + "time" + + "github.com/milvus-io/milvus-proto/go-api/v3/commonpb" + "github.com/milvus-io/milvus/internal/views/coord/coordview" + "github.com/milvus-io/milvus/internal/views/coord/loadmgr" + "github.com/milvus-io/milvus/internal/views/coord/readiness" + "github.com/milvus-io/milvus/internal/views/qviews" + "github.com/milvus-io/milvus/pkg/v3/proto/querypb" + "github.com/milvus-io/milvus/pkg/v3/util/merr" + "github.com/milvus-io/milvus/pkg/v3/util/metautil" + "github.com/milvus-io/milvus/pkg/v3/util/paramtable" +) + +// WaitCollectionReady observes the existing load; it never initiates a load. +func (s *Server) WaitCollectionReady(ctx context.Context, req *querypb.WaitCollectionReadyRequest) (*commonpb.Status, error) { + return merr.Status(s.waitCollectionReady(ctx, req)), nil +} + +func (s *Server) waitCollectionReady(ctx context.Context, req *querypb.WaitCollectionReadyRequest) error { + if err := merr.CheckHealthy(s.State()); err != nil { + return err + } + if err := ctx.Err(); err != nil { + return context.Cause(ctx) + } + collectionID := req.GetCollectionID() + if len(req.GetExpectedVchannels()) == 0 { + return merr.WrapErrCollectionNotLoaded(collectionID) + } + runtime := s.qviewsRuntime + if runtime == nil || runtime.readyChanges == nil { + return merr.WrapErrServiceNotReady("querycoord", 0, "query view readiness is unavailable") + } + ctx, cancel := context.WithTimeout(ctx, paramtable.Get().QueryCoordCfg.LoadTimeoutSeconds.GetAsDuration(time.Second)) + defer cancel() + + var subscription *readiness.Subscription + if !req.GetCheckOnly() { + // Subscribe before checking: both an already-Up view and a change between + // checking and blocking must be visible without a timer or a replay scan. + subscription = runtime.readyChanges.Subscribe(collectionID) + defer subscription.Close() + } + var cachedConfig *loadmgr.LoadConfig + var shards []qviews.ShardID + for { + if err := ctx.Err(); err != nil { + return context.Cause(ctx) + } + select { + case <-runtime.readyChanges.Done(): + return merr.WrapErrServiceUnavailableMsg("querycoord stopped while waiting for collection %d", collectionID) + default: + } + var changed <-chan struct{} + if subscription != nil { + var released bool + changed, released = subscription.Observe() + if released { + return merr.WrapErrCollectionNotLoaded(collectionID) + } + } + entry := runtime.loadConfigStore.Get(collectionID) + if entry.Config == nil { + return merr.WrapErrCollectionNotLoaded(collectionID) + } + if cachedConfig != entry.Config { + cachedConfig = entry.Config + shards = make([]qviews.ShardID, 0, len(req.GetExpectedVchannels())*len(cachedConfig.Replicas)) + for _, vchannel := range req.GetExpectedVchannels() { + for _, replica := range cachedConfig.Replicas { + shards = append(shards, qviews.ShardID{VChannel: vchannel, ReplicaID: replica.ReplicaID}) + } + } + } + ready := runtime.shardViewRegistry.AllShardsUp(shards) + // Revalidate the immutable config after reading shard state. Do not take + // the collection persistence guard: a slow catalog write must not make + // this read-only RPC ignore cancellation. Release notifies under that + // guard before any reload can commit, so a replaced load cannot satisfy + // an existing subscription even when updates are coalesced. + if latest := runtime.loadConfigStore.Get(collectionID); latest.ConfigVersion != entry.ConfigVersion { + continue + } + if subscription != nil { + if _, released := subscription.Observe(); released { + return merr.WrapErrCollectionNotLoaded(collectionID) + } + } + if ready { + return nil + } + if req.GetCheckOnly() { + return merr.WrapErrCollectionNotLoaded(collectionID) + } + select { + case <-ctx.Done(): + return context.Cause(ctx) + case <-runtime.readyChanges.Done(): + return merr.WrapErrServiceUnavailableMsg("querycoord stopped while waiting for collection %d", collectionID) + case <-changed: + } + } +} + +func newCollectionReadiness(loadConfigStore *loadmgr.LoadConfigStore, shardViewRegistry *coordview.ShardViewRegistry) *readiness.Notifications { + readyChanges := readiness.NewNotifications() + loadConfigStore.RegisterObserver(func(collectionID int64, released bool) { + if released { + readyChanges.Release(collectionID) + } else { + readyChanges.Notify(collectionID) + } + }) + shardViewRegistry.RegisterStatsObserver(func(shardID qviews.ShardID, _ *coordview.ShardStats) { + channel, err := metautil.ParseChannel(shardID.VChannel, metautil.NewDynChannelMapper()) + if err == nil { + readyChanges.Notify(channel.CollectionID()) + } + }) + return readyChanges +} diff --git a/internal/querycoordv2/collection_readiness_test.go b/internal/querycoordv2/collection_readiness_test.go new file mode 100644 index 00000000000..a1978a32ea5 --- /dev/null +++ b/internal/querycoordv2/collection_readiness_test.go @@ -0,0 +1,242 @@ +// Licensed to the LF AI & Data foundation under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you 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. + +package querycoordv2 + +import ( + "context" + "net" + "sync" + "testing" + "time" + + "github.com/stretchr/testify/mock" + "github.com/stretchr/testify/require" + "google.golang.org/grpc" + "google.golang.org/grpc/credentials/insecure" + "google.golang.org/grpc/test/bufconn" + + "github.com/milvus-io/milvus-proto/go-api/v3/commonpb" + metastoremocks "github.com/milvus-io/milvus/internal/metastore/mocks" + "github.com/milvus-io/milvus/internal/views/coord/coordview" + "github.com/milvus-io/milvus/internal/views/coord/coordview/syncer" + "github.com/milvus-io/milvus/internal/views/coord/loadmgr" + "github.com/milvus-io/milvus/internal/views/qviews" + "github.com/milvus-io/milvus/pkg/v3/proto/querypb" + "github.com/milvus-io/milvus/pkg/v3/proto/viewpb" + "github.com/milvus-io/milvus/pkg/v3/util/merr" +) + +type readinessCatalog struct { + views []*viewpb.QueryViewOfShard +} + +func (c *readinessCatalog) ListQueryViews(context.Context) ([]*viewpb.QueryViewOfShard, error) { + return c.views, nil +} + +func (c *readinessCatalog) SaveQueryViews(context.Context, []*viewpb.QueryViewOfShard) error { + return nil +} + +type readinessSyncer struct{ sent chan syncer.SyncView } + +func (s *readinessSyncer) SyncViews(_ context.Context, group syncer.SyncGroup) error { + for _, views := range group.ViewsByNode { + for _, view := range views { + s.sent <- view + } + } + return nil +} +func (*readinessSyncer) Close() error { return nil } + +func newReadinessTestServer(t *testing.T, views ...*viewpb.QueryViewOfShard) (*Server, *metastoremocks.QueryCoordCatalog, *readinessSyncer) { + t.Helper() + return newReadinessTestServerWithConfig(t, &querypb.CollectionLoadInfo{CollectionID: 100}, views...) +} + +func newReadinessTestServerWithConfig(t *testing.T, info *querypb.CollectionLoadInfo, views ...*viewpb.QueryViewOfShard) (*Server, *metastoremocks.QueryCoordCatalog, *readinessSyncer) { + t.Helper() + ctx := context.Background() + catalog := metastoremocks.NewQueryCoordCatalog(t) + catalog.EXPECT().GetCollections(mock.Anything).Return([]*querypb.CollectionLoadInfo{info}, nil).Once() + catalog.EXPECT().GetPartitions(mock.Anything, mock.Anything).Return(map[int64][]*querypb.PartitionLoadInfo{}, nil).Once() + catalog.EXPECT().GetReplicas(mock.Anything).Return([]*querypb.Replica{{ID: 1000, CollectionID: 100}}, nil).Once() + store, err := loadmgr.RecoverLoadConfigStore(ctx, catalog) + require.NoError(t, err) + syncer := &readinessSyncer{sent: make(chan syncer.SyncView, 64)} + registry, err := coordview.RecoverShardViewRegistry(ctx, &readinessCatalog{views: views}, syncer) + require.NoError(t, err) + runtime := &qviewsRuntime{loadConfigStore: store, shardViewRegistry: registry, readyChanges: newCollectionReadiness(store, registry)} + t.Cleanup(func() { runtime.readyChanges.Close(); registry.Close() }) + s := &Server{ctx: ctx, qviewsRuntime: runtime} + s.UpdateStateCode(commonpb.StateCode_Healthy) + return s, catalog, syncer +} + +func readinessRequest(channels ...string) *querypb.WaitCollectionReadyRequest { + return &querypb.WaitCollectionReadyRequest{CollectionID: 100, ExpectedVchannels: channels} +} + +func receiveReadinessSync(t *testing.T, s *readinessSyncer, state qviews.QueryViewState) syncer.SyncView { + t.Helper() + select { + case view := <-s.sent: + require.Equal(t, state, view.View.State()) + return view + case <-time.After(3 * time.Second): + t.Fatal("timed out waiting for node sync") + return syncer.SyncView{} + } +} + +func TestWaitCollectionReadyWakesFromStreamingNodeUp(t *testing.T) { + first, second := "by-dev-rootcoord-dml_100v0", "by-dev-rootcoord-dml_100v1" + s, _, syncer := newReadinessTestServer(t, testPersistedQueryView(100, qviews.ShardID{ReplicaID: 1000, VChannel: first})) + req := readinessRequest(first, second) + req.CheckOnly = true + status, err := s.WaitCollectionReady(context.Background(), req) + require.NoError(t, err) + require.ErrorIs(t, merr.Error(status), merr.ErrCollectionNotLoaded, "one Up shard must not hide a missing shard") + req.CheckOnly = false + result := make(chan error, 1) + ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second) + defer cancel() + go func() { status, err := s.WaitCollectionReady(ctx, req); result <- merr.CheckRPCCall(status, err) }() + assertReadinessBlocked(t, result) + shardID := qviews.ShardID{ReplicaID: 1000, VChannel: second} + builder := qviews.NewQueryViewAtCoordBuilder(1000, &viewpb.DataViewOfCollection{ + CollectionId: 100, DataVersion: &viewpb.DataVersion{StreamingVersion: 1}, Shards: []*viewpb.DataViewOfShard{{Vchannel: second}}, + }, second) + require.NoError(t, s.qviewsRuntime.shardViewRegistry.Ensure(shardID).AddPreparing(ctx, builder)) + preparing := receiveReadinessSync(t, syncer, qviews.QueryViewStatePreparing) + ready := preparing.View.IntoProto() + ready.Meta.State = viewpb.QueryViewState_QueryViewStateReady + preparing.OnSyncResponse(qviews.NewQueryViewAtWorkNodeFromProto(ready)) + up := receiveReadinessSync(t, syncer, qviews.QueryViewStateUp) + assertReadinessBlocked(t, result) + // Drive the real Coord state machine, registry observer and RPC waiter from + // the SN's Up acknowledgement; do not directly notify the test waiter. + up.OnSyncResponse(up.View) + select { + case err := <-result: + require.NoError(t, err) + case <-time.After(3 * time.Second): + t.Fatal("SN Up did not wake the readiness RPC") + } + status, err = s.WaitCollectionReady(ctx, req) + require.NoError(t, merr.CheckRPCCall(status, err), "an already-ready collection needs no new notification") +} + +func assertReadinessBlocked(t *testing.T, result <-chan error) { + t.Helper() + select { + case err := <-result: + t.Fatalf("readiness returned before the collection was ready: %v", err) + case <-time.After(35 * time.Millisecond): + } +} + +func TestWaitCollectionReadyEndsOnReleaseCancelAndShutdown(t *testing.T) { + for _, scenario := range []string{"release", "cancel", "shutdown"} { + t.Run(scenario, func(t *testing.T) { + s, catalog, _ := newReadinessTestServer(t) + ctx, cancel := context.WithCancel(context.Background()) + defer cancel() + result := make(chan error, 1) + go func() { result <- s.waitCollectionReady(ctx, readinessRequest("by-dev-rootcoord-dml_100v0")) }() + assertReadinessBlocked(t, result) + var want error = merr.ErrCollectionNotLoaded + switch scenario { + case "release": + catalog.EXPECT().ReleaseReplicas(mock.Anything, int64(100)).Return(nil).Once() + catalog.EXPECT().ReleaseCollection(mock.Anything, int64(100)).Return(nil).Once() + require.NoError(t, s.qviewsRuntime.loadConfigStore.Remove(ctx, 100)) + case "cancel": + cancel() + want = context.Canceled + case "shutdown": + s.qviewsRuntime.readyChanges.Close() + want = merr.ErrServiceUnavailable + } + select { + case err := <-result: + require.ErrorIs(t, err, want) + case <-time.After(time.Second): + t.Fatal("waiter was not released") + } + }) + } +} + +func TestWaitCollectionReadyGRPCContract(t *testing.T) { + s, catalog, _ := newReadinessTestServer(t) + listener := bufconn.Listen(1024 * 1024) + grpcServer := grpc.NewServer() + querypb.RegisterQueryCoordServer(grpcServer, s) + go func() { _ = grpcServer.Serve(listener) }() + t.Cleanup(grpcServer.Stop) + conn, err := grpc.NewClient("passthrough:///readiness", grpc.WithTransportCredentials(insecure.NewCredentials()), + grpc.WithContextDialer(func(context.Context, string) (net.Conn, error) { return listener.Dial() })) + require.NoError(t, err) + t.Cleanup(func() { _ = conn.Close() }) + client := querypb.NewQueryCoordClient(conn) + ctx, cancel := context.WithTimeout(context.Background(), 40*time.Millisecond) + defer cancel() + _, err = client.WaitCollectionReady(ctx, readinessRequest("by-dev-rootcoord-dml_100v0")) + require.Error(t, err, "a real RPC must honor its deadline") + catalog.EXPECT().ReleaseReplicas(mock.Anything, int64(100)).Return(nil).Once() + catalog.EXPECT().ReleaseCollection(mock.Anything, int64(100)).Return(nil).Once() + require.NoError(t, s.qviewsRuntime.loadConfigStore.Remove(context.Background(), 100)) + status, err := client.WaitCollectionReady(context.Background(), readinessRequest("by-dev-rootcoord-dml_100v0")) + require.NoError(t, err) + require.ErrorIs(t, merr.Error(status), merr.ErrCollectionNotLoaded, "release must preserve the typed error across gRPC") +} + +func TestWaitCollectionReadyCancellationDoesNotWaitForCatalog(t *testing.T) { + s, catalog, _ := newReadinessTestServer(t) + writeStarted, finishWrite := make(chan struct{}), make(chan struct{}) + var finishOnce sync.Once + finish := func() { finishOnce.Do(func() { close(finishWrite) }) } + defer finish() + catalog.EXPECT().SaveCollection(mock.Anything, mock.Anything).Run(func(context.Context, *querypb.CollectionLoadInfo, ...*querypb.PartitionLoadInfo) { + close(writeStarted) + <-finishWrite + }).Return(nil).Once() + catalog.EXPECT().SaveReplica(mock.Anything, mock.Anything).Return(nil).Once() + writeResult := make(chan error, 1) + go func() { + writeResult <- s.qviewsRuntime.loadConfigStore.Put(context.Background(), s.qviewsRuntime.loadConfigStore.Get(100).Config) + }() + select { + case <-writeStarted: + case <-time.After(time.Second): + t.Fatal("catalog write did not start") + } + ctx, cancel := context.WithTimeout(context.Background(), 40*time.Millisecond) + defer cancel() + result := make(chan error, 1) + go func() { result <- s.waitCollectionReady(ctx, readinessRequest("by-dev-rootcoord-dml_100v0")) }() + select { + case err := <-result: + require.ErrorIs(t, err, context.DeadlineExceeded) + case <-time.After(time.Second): + t.Fatal("readiness cancellation waited on a blocked catalog write") + } + finish() + require.NoError(t, <-writeResult) +} diff --git a/internal/querycoordv2/qviews_runtime.go b/internal/querycoordv2/qviews_runtime.go index 9b84b1e7701..62b33c45bca 100644 --- a/internal/querycoordv2/qviews_runtime.go +++ b/internal/querycoordv2/qviews_runtime.go @@ -34,6 +34,7 @@ import ( "github.com/milvus-io/milvus/internal/views/coord/coordview/syncer" "github.com/milvus-io/milvus/internal/views/coord/loadmgr" "github.com/milvus-io/milvus/internal/views/coord/nodeview" + "github.com/milvus-io/milvus/internal/views/coord/readiness" "github.com/milvus-io/milvus/internal/views/qviews" "github.com/milvus-io/milvus/pkg/v3/kv" "github.com/milvus-io/milvus/pkg/v3/util/merr" @@ -50,6 +51,7 @@ type qviewsRuntime struct { loadConfigStore *loadmgr.LoadConfigStore loadManager *loadmgr.CollectionLoadManager shardViewRegistry *coordview.ShardViewRegistry + readyChanges *readiness.Notifications syncer syncer.ReliableSyncer balancer qviewsBalancer @@ -148,11 +150,13 @@ func newQViewsRuntime(ctx context.Context, deps qviewsRuntimeDependencies) (*qvi balancerController.Trigger(balancer.TriggerScope{DirtyCollections: []int64{collectionID}}) }, ) + readyChanges := newCollectionReadiness(loadConfigStore, shardViewRegistry) return &qviewsRuntime{ loadConfigStore: loadConfigStore, loadManager: loadManager, shardViewRegistry: shardViewRegistry, + readyChanges: readyChanges, syncer: reliableSyncer, balancer: balancerController, queryNodeManager: deps.queryNodeManager, @@ -167,6 +171,9 @@ func (r *qviewsRuntime) start(ctx context.Context) { func (r *qviewsRuntime) stop() { r.stopOnce.Do(func() { + if r.readyChanges != nil { + r.readyChanges.Close() + } r.balancer.Stop() if r.shardViewRegistry != nil { r.shardViewRegistry.Close() diff --git a/internal/util/mock/grpc_querycoord_client.go b/internal/util/mock/grpc_querycoord_client.go index ca3b31658f8..09d29e844c3 100644 --- a/internal/util/mock/grpc_querycoord_client.go +++ b/internal/util/mock/grpc_querycoord_client.go @@ -54,6 +54,10 @@ func (m *GrpcQueryCoordClient) GetStatisticsChannel(ctx context.Context, in *int return &milvuspb.StringResponse{}, m.Err } +func (m *GrpcQueryCoordClient) WaitCollectionReady(ctx context.Context, req *querypb.WaitCollectionReadyRequest, opts ...grpc.CallOption) (*commonpb.Status, error) { + return &commonpb.Status{}, m.Err +} + func (m *GrpcQueryCoordClient) ShowLoadCollections(ctx context.Context, in *querypb.ShowCollectionsRequest, opts ...grpc.CallOption) (*querypb.ShowCollectionsResponse, error) { return &querypb.ShowCollectionsResponse{}, m.Err } diff --git a/internal/views/coord/coordview/shard_readiness_test.go b/internal/views/coord/coordview/shard_readiness_test.go new file mode 100644 index 00000000000..1f52c77c844 --- /dev/null +++ b/internal/views/coord/coordview/shard_readiness_test.go @@ -0,0 +1,46 @@ +// Licensed to the LF AI & Data foundation under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you 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. + +package coordview + +import ( + "testing" + + "github.com/stretchr/testify/require" + + "github.com/milvus-io/milvus/internal/views/qviews" +) + +func TestAllShardsUpRequiresCompleteExpectedSet(t *testing.T) { + first := qviews.ShardID{ReplicaID: 1, VChannel: "v0"} + missing := qviews.ShardID{ReplicaID: 1, VChannel: "v1"} + secondReplica := qviews.ShardID{ReplicaID: 2, VChannel: "v0"} + version := qviews.QueryViewVersion{} + r := &ShardViewRegistry{stats: map[qviews.ShardID]*ShardStats{ + first: {UpVersion: &version}, + }} + require.False(t, r.AllShardsUp(nil)) + require.True(t, r.AllShardsUp([]qviews.ShardID{first})) + require.False(t, r.AllShardsUp([]qviews.ShardID{first, missing})) + require.False(t, r.AllShardsUp([]qviews.ShardID{first, secondReplica})) + r.stats[missing] = &ShardStats{} + require.False(t, r.AllShardsUp([]qviews.ShardID{first, missing})) + r.stats[missing] = &ShardStats{UpVersion: &version} + require.True(t, r.AllShardsUp([]qviews.ShardID{first, missing})) + require.Zero(t, testing.AllocsPerRun(100, func() { + r.AllShardsUp([]qviews.ShardID{first, missing}) + })) +} diff --git a/internal/views/coord/coordview/shard_view_registry.go b/internal/views/coord/coordview/shard_view_registry.go index a3eb60b068f..f13c969282d 100644 --- a/internal/views/coord/coordview/shard_view_registry.go +++ b/internal/views/coord/coordview/shard_view_registry.go @@ -172,6 +172,22 @@ func (r *ShardViewRegistry) Get(shardID qviews.ShardID) *ShardViewManager { return r.shards[shardID] } +// AllShardsUp checks a complete expected shard set without allocating a snapshot. +func (r *ShardViewRegistry) AllShardsUp(shards []qviews.ShardID) bool { + if len(shards) == 0 { + return false + } + r.mu.RLock() + defer r.mu.RUnlock() + for _, shardID := range shards { + stats := r.stats[shardID] + if stats == nil || stats.UpVersion == nil { + return false + } + } + return true +} + // removeEmptyManager reclaims a manager after its last QueryView has completed // durable removal. Recheck both emptiness and identity because the callback is // invoked after releasing the manager lock. diff --git a/internal/views/coord/loadmgr/load_config_observer_test.go b/internal/views/coord/loadmgr/load_config_observer_test.go new file mode 100644 index 00000000000..734ce219883 --- /dev/null +++ b/internal/views/coord/loadmgr/load_config_observer_test.go @@ -0,0 +1,49 @@ +// Licensed to the LF AI & Data foundation under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you 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. + +package loadmgr + +import ( + "context" + "testing" + + "github.com/stretchr/testify/mock" + "github.com/stretchr/testify/require" + + "github.com/milvus-io/milvus/pkg/v3/util/merr" +) + +func TestLoadConfigObserverOnlyReportsCommittedChanges(t *testing.T) { + store, catalog := newTestStore(t) + var events []bool + store.RegisterObserver(func(id int64, released bool) { + require.EqualValues(t, 100, id) + events = append(events, released) + }) + cfg := sampleConfig() + catalog.EXPECT().SaveCollection(mock.Anything, mock.Anything, mock.Anything, mock.Anything). + Return(merr.WrapErrServiceUnavailableMsg("catalog unavailable")).Once() + require.Error(t, store.Put(context.Background(), cfg)) + require.Empty(t, events) + expectFullSave(catalog, 2) + require.NoError(t, store.Put(context.Background(), cfg)) + require.NoError(t, store.Put(context.Background(), cfg)) + catalog.EXPECT().ReleaseReplicas(mock.Anything, int64(100)).Return(nil).Once() + catalog.EXPECT().ReleaseCollection(mock.Anything, int64(100)).Return(nil).Once() + require.NoError(t, store.Remove(context.Background(), 100)) + require.NoError(t, store.Remove(context.Background(), 100)) + require.Equal(t, []bool{false, false, true}, events) +} diff --git a/internal/views/coord/loadmgr/load_config_store.go b/internal/views/coord/loadmgr/load_config_store.go index 6a845ee2399..07fe690b191 100644 --- a/internal/views/coord/loadmgr/load_config_store.go +++ b/internal/views/coord/loadmgr/load_config_store.go @@ -39,6 +39,8 @@ type LoadConfigStore struct { // snapshot is the resident immutable view returned to Balancer. snapshot *LoadConfigSnapshot + + observers []func(collectionID int64, released bool) } // LoadConfigEntry captures one immutable config and its versions in one read. @@ -151,6 +153,7 @@ func (s *LoadConfigStore) Put(ctx context.Context, cfg *LoadConfig) error { s.version++ s.versions[collectionID] = s.version s.mu.Unlock() + s.notifyObservers(collectionID, false) return nil } @@ -181,9 +184,27 @@ func (s *LoadConfigStore) Remove(ctx context.Context, collectionID int64) error s.version++ delete(s.versions, collectionID) s.mu.Unlock() + s.notifyObservers(collectionID, true) return nil } +// RegisterObserver observes future committed changes. Callbacks run under the +// collection guard so a release notification precedes any subsequent reload. +// They must only signal waiters, never perform I/O or reenter the store. +func (s *LoadConfigStore) RegisterObserver(observer func(collectionID int64, released bool)) { + s.mu.Lock() + defer s.mu.Unlock() + s.observers = append(s.observers, observer) +} + +func (s *LoadConfigStore) notifyObservers(collectionID int64, released bool) { + s.mu.RLock() + defer s.mu.RUnlock() + for _, observer := range s.observers { + observer(collectionID, released) + } +} + // Contains reports whether a collection has a live load config without // materializing the full balancer snapshot. func (s *LoadConfigStore) Contains(collectionID int64) bool { diff --git a/internal/views/coord/readiness/notifications.go b/internal/views/coord/readiness/notifications.go new file mode 100644 index 00000000000..a6c2731f287 --- /dev/null +++ b/internal/views/coord/readiness/notifications.go @@ -0,0 +1,112 @@ +// Licensed to the LF AI & Data foundation under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you 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. + +package readiness + +import "sync" + +// Notifications keeps change signals only for collections with active waiters. +// Signals carry no metadata: a waiter must reread authoritative state after it +// wakes. Release permanently invalidates existing subscriptions, including when +// a new load starts before a waiter gets scheduled again. +type Notifications struct { + mu sync.Mutex + collections map[int64]*subscriptionState + done chan struct{} + closed bool +} + +type subscriptionState struct { + changed chan struct{} + released bool + waiters int +} + +type Subscription struct { + owner *Notifications + collectionID int64 + state *subscriptionState + once sync.Once +} + +func NewNotifications() *Notifications { + return &Notifications{collections: make(map[int64]*subscriptionState), done: make(chan struct{})} +} + +func (n *Notifications) Subscribe(collectionID int64) *Subscription { + n.mu.Lock() + defer n.mu.Unlock() + state := n.collections[collectionID] + if state == nil { + state = &subscriptionState{changed: make(chan struct{})} + if !n.closed { + n.collections[collectionID] = state + } + } + state.waiters++ + return &Subscription{owner: n, collectionID: collectionID, state: state} +} + +// Observe returns the signal to capture BEFORE reading current collection state. +// A concurrent change closes that signal even if it precedes the actual wait. +func (s *Subscription) Observe() (changed <-chan struct{}, released bool) { + s.owner.mu.Lock() + defer s.owner.mu.Unlock() + return s.state.changed, s.state.released +} + +func (s *Subscription) Close() { + s.once.Do(func() { + s.owner.mu.Lock() + defer s.owner.mu.Unlock() + s.state.waiters-- + if s.state.waiters == 0 && s.owner.collections[s.collectionID] == s.state { + delete(s.owner.collections, s.collectionID) + } + }) +} + +// Notify is nonblocking and safe to call from a state-machine callback. +func (n *Notifications) Notify(collectionID int64) { + n.mu.Lock() + defer n.mu.Unlock() + if state := n.collections[collectionID]; state != nil { + close(state.changed) + state.changed = make(chan struct{}) + } +} + +func (n *Notifications) Release(collectionID int64) { + n.mu.Lock() + defer n.mu.Unlock() + if state := n.collections[collectionID]; state != nil { + state.released = true + close(state.changed) + delete(n.collections, collectionID) + } +} + +func (n *Notifications) Done() <-chan struct{} { return n.done } + +func (n *Notifications) Close() { + n.mu.Lock() + defer n.mu.Unlock() + if !n.closed { + n.closed = true + close(n.done) + clear(n.collections) + } +} diff --git a/internal/views/coord/readiness/notifications_test.go b/internal/views/coord/readiness/notifications_test.go new file mode 100644 index 00000000000..eee7bbcaedb --- /dev/null +++ b/internal/views/coord/readiness/notifications_test.go @@ -0,0 +1,107 @@ +// Licensed to the LF AI & Data foundation under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you 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. + +package readiness + +import ( + "sync" + "testing" + + "github.com/stretchr/testify/require" +) + +func TestNotificationBeforeBlockingIsNotLost(t *testing.T) { + n := NewNotifications() + s := n.Subscribe(1) + defer s.Close() + changed, released := s.Observe() + require.False(t, released) + n.Notify(2) + select { + case <-changed: + t.Fatal("another collection woke this waiter") + default: + } + n.Notify(1) + select { + case <-changed: + default: + t.Fatal("notification between checking state and blocking was lost") + } + next, _ := s.Observe() + require.NotEqual(t, changed, next) +} + +func TestReleasePermanentlyInvalidatesExistingWaiters(t *testing.T) { + n := NewNotifications() + old := n.Subscribe(1) + other := n.Subscribe(1) + oldSignal, _ := old.Observe() + otherSignal, _ := other.Observe() + require.Equal(t, oldSignal, otherSignal) + n.Release(1) + fresh := n.Subscribe(1) + defer fresh.Close() + n.Notify(1) + _, released := old.Observe() + require.True(t, released, "reload must not erase the release observed by old waiters") + _, released = fresh.Observe() + require.False(t, released) + old.Close() + old.Close() + other.Close() + require.Len(t, n.collections, 1, "old waiters must not remove a new subscription") + fresh.Close() + require.Empty(t, n.collections) +} + +func TestNotificationsRetainOnlyActiveCollections(t *testing.T) { + n := NewNotifications() + for id := int64(0); id < 10000; id++ { + n.Notify(id) + n.Release(id) + s := n.Subscribe(id) + s.Close() + } + require.Empty(t, n.collections) + n.Close() + n.Close() + select { + case <-n.Done(): + default: + t.Fatal("shutdown did not wake waiters") + } + n.Subscribe(1).Close() + require.Empty(t, n.collections) +} + +func TestConcurrentNotificationReleaseAndUnsubscribe(t *testing.T) { + n := NewNotifications() + var workers sync.WaitGroup + for i := 0; i < 8; i++ { + workers.Go(func() { + for j := 0; j < 1000; j++ { + s := n.Subscribe(1) + s.Observe() + n.Notify(1) + n.Release(1) + s.Close() + } + }) + } + workers.Wait() + require.Empty(t, n.collections) +} diff --git a/pkg/proto/query_coord.proto b/pkg/proto/query_coord.proto index 71c2bedef2b..e536ba8031c 100644 --- a/pkg/proto/query_coord.proto +++ b/pkg/proto/query_coord.proto @@ -115,6 +115,8 @@ service QueryCoord { rpc RunAnalyzer(RunAnalyzerRequest) returns(milvus.RunAnalyzerResponse){} rpc ComputePhraseMatchSlop(ComputePhraseMatchSlopRequest) returns(ComputePhraseMatchSlopResponse){} rpc ValidateAnalyzer(ValidateAnalyzerRequest) returns(ValidateAnalyzerResponse){} + // Waits for all expected shards to become queryable. Does not initiate load. + rpc WaitCollectionReady(WaitCollectionReadyRequest) returns (common.Status) {} } service QueryNode { @@ -1272,3 +1274,11 @@ message ListLoadedSegmentsResponse { common.Status status = 1; repeated int64 segmentIDs = 2; } + +message WaitCollectionReadyRequest { + common.MsgBase base = 1; + int64 collectionID = 2; + repeated string expected_vchannels = 3; + // Perform the same readiness check without waiting for state changes. + bool check_only = 4; +} diff --git a/pkg/proto/querypb/query_coord.pb.go b/pkg/proto/querypb/query_coord.pb.go index 462fd781ae2..498d9a7d1e6 100644 --- a/pkg/proto/querypb/query_coord.pb.go +++ b/pkg/proto/querypb/query_coord.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.33.0 -// protoc v5.27.0 +// protoc v7.34.1 // source: query_coord.proto package querypb @@ -9795,6 +9795,78 @@ func (x *ListLoadedSegmentsResponse) GetSegmentIDs() []int64 { return nil } +type WaitCollectionReadyRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Base *commonpb.MsgBase `protobuf:"bytes,1,opt,name=base,proto3" json:"base,omitempty"` + CollectionID int64 `protobuf:"varint,2,opt,name=collectionID,proto3" json:"collectionID,omitempty"` + ExpectedVchannels []string `protobuf:"bytes,3,rep,name=expected_vchannels,json=expectedVchannels,proto3" json:"expected_vchannels,omitempty"` + // Perform the same readiness check without waiting for state changes. + CheckOnly bool `protobuf:"varint,4,opt,name=check_only,json=checkOnly,proto3" json:"check_only,omitempty"` +} + +func (x *WaitCollectionReadyRequest) Reset() { + *x = WaitCollectionReadyRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_query_coord_proto_msgTypes[118] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *WaitCollectionReadyRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*WaitCollectionReadyRequest) ProtoMessage() {} + +func (x *WaitCollectionReadyRequest) ProtoReflect() protoreflect.Message { + mi := &file_query_coord_proto_msgTypes[118] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use WaitCollectionReadyRequest.ProtoReflect.Descriptor instead. +func (*WaitCollectionReadyRequest) Descriptor() ([]byte, []int) { + return file_query_coord_proto_rawDescGZIP(), []int{118} +} + +func (x *WaitCollectionReadyRequest) GetBase() *commonpb.MsgBase { + if x != nil { + return x.Base + } + return nil +} + +func (x *WaitCollectionReadyRequest) GetCollectionID() int64 { + if x != nil { + return x.CollectionID + } + return 0 +} + +func (x *WaitCollectionReadyRequest) GetExpectedVchannels() []string { + if x != nil { + return x.ExpectedVchannels + } + return nil +} + +func (x *WaitCollectionReadyRequest) GetCheckOnly() bool { + if x != nil { + return x.CheckOnly + } + return false +} + type UpdateIndexRequest_AddIndex struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -9806,7 +9878,7 @@ type UpdateIndexRequest_AddIndex struct { func (x *UpdateIndexRequest_AddIndex) Reset() { *x = UpdateIndexRequest_AddIndex{} if protoimpl.UnsafeEnabled { - mi := &file_query_coord_proto_msgTypes[139] + mi := &file_query_coord_proto_msgTypes[140] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -9819,7 +9891,7 @@ func (x *UpdateIndexRequest_AddIndex) String() string { func (*UpdateIndexRequest_AddIndex) ProtoMessage() {} func (x *UpdateIndexRequest_AddIndex) ProtoReflect() protoreflect.Message { - mi := &file_query_coord_proto_msgTypes[139] + mi := &file_query_coord_proto_msgTypes[140] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -9853,7 +9925,7 @@ type UpdateIndexRequest_DropIndex struct { func (x *UpdateIndexRequest_DropIndex) Reset() { *x = UpdateIndexRequest_DropIndex{} if protoimpl.UnsafeEnabled { - mi := &file_query_coord_proto_msgTypes[140] + mi := &file_query_coord_proto_msgTypes[141] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -9866,7 +9938,7 @@ func (x *UpdateIndexRequest_DropIndex) String() string { func (*UpdateIndexRequest_DropIndex) ProtoMessage() {} func (x *UpdateIndexRequest_DropIndex) ProtoReflect() protoreflect.Message { - mi := &file_query_coord_proto_msgTypes[140] + mi := &file_query_coord_proto_msgTypes[141] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -9904,7 +9976,7 @@ type UpdateIndexRequest_Action struct { func (x *UpdateIndexRequest_Action) Reset() { *x = UpdateIndexRequest_Action{} if protoimpl.UnsafeEnabled { - mi := &file_query_coord_proto_msgTypes[141] + mi := &file_query_coord_proto_msgTypes[142] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -9917,7 +9989,7 @@ func (x *UpdateIndexRequest_Action) String() string { func (*UpdateIndexRequest_Action) ProtoMessage() {} func (x *UpdateIndexRequest_Action) ProtoReflect() protoreflect.Message { - mi := &file_query_coord_proto_msgTypes[141] + mi := &file_query_coord_proto_msgTypes[142] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -11939,550 +12011,330 @@ var file_query_coord_proto_rawDesc = []byte{ 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x1e, 0x0a, 0x0a, 0x73, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x44, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x03, - 0x52, 0x0a, 0x73, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x44, 0x73, 0x2a, 0xa4, 0x01, 0x0a, - 0x10, 0x50, 0x72, 0x65, 0x77, 0x61, 0x72, 0x6d, 0x54, 0x61, 0x73, 0x6b, 0x53, 0x74, 0x61, 0x74, - 0x65, 0x12, 0x1b, 0x0a, 0x17, 0x50, 0x72, 0x65, 0x77, 0x61, 0x72, 0x6d, 0x54, 0x61, 0x73, 0x6b, - 0x53, 0x74, 0x61, 0x74, 0x65, 0x55, 0x6e, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x10, 0x00, 0x12, 0x1b, - 0x0a, 0x17, 0x50, 0x72, 0x65, 0x77, 0x61, 0x72, 0x6d, 0x54, 0x61, 0x73, 0x6b, 0x53, 0x74, 0x61, - 0x74, 0x65, 0x50, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x10, 0x01, 0x12, 0x1b, 0x0a, 0x17, 0x50, - 0x72, 0x65, 0x77, 0x61, 0x72, 0x6d, 0x54, 0x61, 0x73, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x65, 0x57, - 0x61, 0x72, 0x6d, 0x69, 0x6e, 0x67, 0x10, 0x02, 0x12, 0x1d, 0x0a, 0x19, 0x50, 0x72, 0x65, 0x77, - 0x61, 0x72, 0x6d, 0x54, 0x61, 0x73, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6d, 0x70, - 0x6c, 0x65, 0x74, 0x65, 0x64, 0x10, 0x03, 0x12, 0x1a, 0x0a, 0x16, 0x50, 0x72, 0x65, 0x77, 0x61, - 0x72, 0x6d, 0x54, 0x61, 0x73, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x65, 0x46, 0x61, 0x69, 0x6c, 0x65, - 0x64, 0x10, 0x04, 0x2a, 0x3d, 0x0a, 0x09, 0x4c, 0x6f, 0x61, 0x64, 0x53, 0x63, 0x6f, 0x70, 0x65, - 0x12, 0x08, 0x0a, 0x04, 0x46, 0x75, 0x6c, 0x6c, 0x10, 0x00, 0x12, 0x09, 0x0a, 0x05, 0x44, 0x65, - 0x6c, 0x74, 0x61, 0x10, 0x01, 0x12, 0x09, 0x0a, 0x05, 0x53, 0x74, 0x61, 0x74, 0x73, 0x10, 0x03, - 0x12, 0x0a, 0x0a, 0x06, 0x52, 0x65, 0x6f, 0x70, 0x65, 0x6e, 0x10, 0x04, 0x22, 0x04, 0x08, 0x02, - 0x10, 0x02, 0x2a, 0x40, 0x0a, 0x09, 0x44, 0x61, 0x74, 0x61, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x12, - 0x0b, 0x0a, 0x07, 0x55, 0x6e, 0x4b, 0x6e, 0x6f, 0x77, 0x6e, 0x10, 0x00, 0x12, 0x07, 0x0a, 0x03, - 0x41, 0x6c, 0x6c, 0x10, 0x01, 0x12, 0x0d, 0x0a, 0x09, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x69, - 0x6e, 0x67, 0x10, 0x02, 0x12, 0x0e, 0x0a, 0x0a, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x69, 0x63, - 0x61, 0x6c, 0x10, 0x03, 0x2a, 0x7a, 0x0a, 0x0e, 0x50, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, - 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x0c, 0x0a, 0x08, 0x4e, 0x6f, 0x74, 0x45, 0x78, 0x69, - 0x73, 0x74, 0x10, 0x00, 0x12, 0x0e, 0x0a, 0x0a, 0x4e, 0x6f, 0x74, 0x50, 0x72, 0x65, 0x73, 0x65, - 0x6e, 0x74, 0x10, 0x01, 0x12, 0x0a, 0x0a, 0x06, 0x4f, 0x6e, 0x44, 0x69, 0x73, 0x6b, 0x10, 0x02, - 0x12, 0x13, 0x0a, 0x0f, 0x50, 0x61, 0x72, 0x74, 0x69, 0x61, 0x6c, 0x49, 0x6e, 0x4d, 0x65, 0x6d, - 0x6f, 0x72, 0x79, 0x10, 0x03, 0x12, 0x0c, 0x0a, 0x08, 0x49, 0x6e, 0x4d, 0x65, 0x6d, 0x6f, 0x72, - 0x79, 0x10, 0x04, 0x12, 0x10, 0x0a, 0x0c, 0x50, 0x61, 0x72, 0x74, 0x69, 0x61, 0x6c, 0x49, 0x6e, - 0x47, 0x50, 0x55, 0x10, 0x05, 0x12, 0x09, 0x0a, 0x05, 0x49, 0x6e, 0x47, 0x50, 0x55, 0x10, 0x06, - 0x2a, 0x64, 0x0a, 0x10, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x64, 0x69, - 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x13, 0x0a, 0x0f, 0x55, 0x6e, 0x4b, 0x6e, 0x6f, 0x77, 0x43, 0x6f, - 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x10, 0x00, 0x12, 0x0b, 0x0a, 0x07, 0x48, 0x61, 0x6e, - 0x64, 0x6f, 0x66, 0x66, 0x10, 0x01, 0x12, 0x0f, 0x0a, 0x0b, 0x4c, 0x6f, 0x61, 0x64, 0x42, 0x61, - 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x10, 0x02, 0x12, 0x0f, 0x0a, 0x0b, 0x47, 0x72, 0x70, 0x63, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x10, 0x03, 0x12, 0x0c, 0x0a, 0x08, 0x4e, 0x6f, 0x64, 0x65, - 0x44, 0x6f, 0x77, 0x6e, 0x10, 0x04, 0x2a, 0x42, 0x0a, 0x08, 0x4c, 0x6f, 0x61, 0x64, 0x54, 0x79, - 0x70, 0x65, 0x12, 0x0f, 0x0a, 0x0b, 0x55, 0x6e, 0x4b, 0x6e, 0x6f, 0x77, 0x6e, 0x54, 0x79, 0x70, - 0x65, 0x10, 0x00, 0x12, 0x11, 0x0a, 0x0d, 0x4c, 0x6f, 0x61, 0x64, 0x50, 0x61, 0x72, 0x74, 0x69, - 0x74, 0x69, 0x6f, 0x6e, 0x10, 0x01, 0x12, 0x12, 0x0a, 0x0e, 0x4c, 0x6f, 0x61, 0x64, 0x43, 0x6f, - 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x10, 0x02, 0x2a, 0x32, 0x0a, 0x0a, 0x4c, 0x6f, - 0x61, 0x64, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x0b, 0x0a, 0x07, 0x49, 0x6e, 0x76, 0x61, - 0x6c, 0x69, 0x64, 0x10, 0x00, 0x12, 0x0b, 0x0a, 0x07, 0x4c, 0x6f, 0x61, 0x64, 0x69, 0x6e, 0x67, - 0x10, 0x01, 0x12, 0x0a, 0x0a, 0x06, 0x4c, 0x6f, 0x61, 0x64, 0x65, 0x64, 0x10, 0x02, 0x2a, 0x57, - 0x0a, 0x08, 0x53, 0x79, 0x6e, 0x63, 0x54, 0x79, 0x70, 0x65, 0x12, 0x0a, 0x0a, 0x06, 0x52, 0x65, - 0x6d, 0x6f, 0x76, 0x65, 0x10, 0x00, 0x12, 0x07, 0x0a, 0x03, 0x53, 0x65, 0x74, 0x10, 0x01, 0x12, - 0x09, 0x0a, 0x05, 0x41, 0x6d, 0x65, 0x6e, 0x64, 0x10, 0x02, 0x12, 0x11, 0x0a, 0x0d, 0x55, 0x70, - 0x64, 0x61, 0x74, 0x65, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x10, 0x03, 0x12, 0x18, 0x0a, - 0x14, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, - 0x53, 0x74, 0x61, 0x74, 0x73, 0x10, 0x04, 0x2a, 0x23, 0x0a, 0x12, 0x48, 0x69, 0x67, 0x68, 0x6c, - 0x69, 0x67, 0x68, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x54, 0x79, 0x70, 0x65, 0x12, 0x0d, 0x0a, - 0x09, 0x54, 0x65, 0x78, 0x74, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x10, 0x00, 0x32, 0xc0, 0x25, 0x0a, - 0x0a, 0x51, 0x75, 0x65, 0x72, 0x79, 0x43, 0x6f, 0x6f, 0x72, 0x64, 0x12, 0x70, 0x0a, 0x13, 0x53, - 0x68, 0x6f, 0x77, 0x4c, 0x6f, 0x61, 0x64, 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x12, 0x2a, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x53, 0x68, 0x6f, 0x77, 0x43, 0x6f, 0x6c, 0x6c, - 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2b, - 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x71, 0x75, - 0x65, 0x72, 0x79, 0x2e, 0x53, 0x68, 0x6f, 0x77, 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x6d, 0x0a, - 0x12, 0x53, 0x68, 0x6f, 0x77, 0x4c, 0x6f, 0x61, 0x64, 0x50, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, - 0x6f, 0x6e, 0x73, 0x12, 0x29, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x53, 0x68, 0x6f, 0x77, 0x50, 0x61, 0x72, - 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, - 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x71, 0x75, - 0x65, 0x72, 0x79, 0x2e, 0x53, 0x68, 0x6f, 0x77, 0x50, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x5a, 0x0a, 0x0e, - 0x4c, 0x6f, 0x61, 0x64, 0x50, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x29, - 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x71, 0x75, - 0x65, 0x72, 0x79, 0x2e, 0x4c, 0x6f, 0x61, 0x64, 0x50, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x6d, 0x69, 0x6c, 0x76, - 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, - 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x00, 0x12, 0x54, 0x0a, 0x07, 0x50, 0x72, 0x65, 0x77, - 0x61, 0x72, 0x6d, 0x12, 0x22, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x50, 0x72, 0x65, 0x77, 0x61, 0x72, 0x6d, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x50, 0x72, 0x65, - 0x77, 0x61, 0x72, 0x6d, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x78, - 0x0a, 0x13, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x50, 0x72, 0x65, 0x77, 0x61, 0x72, - 0x6d, 0x54, 0x61, 0x73, 0x6b, 0x12, 0x2e, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x44, 0x65, 0x73, 0x63, 0x72, - 0x69, 0x62, 0x65, 0x50, 0x72, 0x65, 0x77, 0x61, 0x72, 0x6d, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2f, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x44, 0x65, 0x73, 0x63, 0x72, - 0x69, 0x62, 0x65, 0x50, 0x72, 0x65, 0x77, 0x61, 0x72, 0x6d, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x60, 0x0a, 0x11, 0x52, 0x65, 0x6c, 0x65, - 0x61, 0x73, 0x65, 0x50, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x2c, 0x2e, - 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x71, 0x75, 0x65, - 0x72, 0x79, 0x2e, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x50, 0x61, 0x72, 0x74, 0x69, 0x74, - 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x6d, 0x69, - 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, - 0x6e, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x00, 0x12, 0x5a, 0x0a, 0x0e, 0x4c, 0x6f, - 0x61, 0x64, 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x29, 0x2e, 0x6d, - 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x71, 0x75, 0x65, 0x72, - 0x79, 0x2e, 0x4c, 0x6f, 0x61, 0x64, 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x53, 0x74, - 0x61, 0x74, 0x75, 0x73, 0x22, 0x00, 0x12, 0x60, 0x0a, 0x11, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, - 0x65, 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2c, 0x2e, 0x6d, 0x69, - 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, - 0x2e, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x6d, 0x69, 0x6c, 0x76, - 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, - 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x00, 0x12, 0x6c, 0x0a, 0x17, 0x53, 0x79, 0x6e, 0x63, - 0x4e, 0x65, 0x77, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x50, 0x61, 0x72, 0x74, 0x69, 0x74, - 0x69, 0x6f, 0x6e, 0x12, 0x32, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x53, 0x79, 0x6e, 0x63, 0x4e, 0x65, 0x77, - 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x50, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x53, 0x74, - 0x61, 0x74, 0x75, 0x73, 0x22, 0x00, 0x12, 0x75, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x50, 0x61, 0x72, - 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x73, 0x12, 0x2d, 0x2e, 0x6d, - 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x71, 0x75, 0x65, 0x72, - 0x79, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, - 0x61, 0x74, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x6d, 0x69, - 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, - 0x2e, 0x47, 0x65, 0x74, 0x50, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, - 0x74, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x6d, 0x0a, - 0x12, 0x47, 0x65, 0x74, 0x4c, 0x6f, 0x61, 0x64, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x49, - 0x6e, 0x66, 0x6f, 0x12, 0x29, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x65, 0x67, 0x6d, - 0x65, 0x6e, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, - 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x71, 0x75, - 0x65, 0x72, 0x79, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x6e, - 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x7b, 0x0a, 0x14, - 0x47, 0x65, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x56, 0x69, 0x65, 0x77, 0x4c, 0x6f, 0x61, 0x64, - 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x2f, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x47, 0x65, 0x74, 0x51, 0x75, 0x65, - 0x72, 0x79, 0x56, 0x69, 0x65, 0x77, 0x4c, 0x6f, 0x61, 0x64, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x30, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x47, 0x65, 0x74, 0x51, 0x75, - 0x65, 0x72, 0x79, 0x56, 0x69, 0x65, 0x77, 0x4c, 0x6f, 0x61, 0x64, 0x49, 0x6e, 0x66, 0x6f, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x9a, 0x01, 0x0a, 0x1d, 0x57, 0x61, - 0x74, 0x63, 0x68, 0x51, 0x75, 0x65, 0x72, 0x79, 0x56, 0x69, 0x65, 0x77, 0x53, 0x65, 0x67, 0x6d, - 0x65, 0x6e, 0x74, 0x4c, 0x6f, 0x61, 0x64, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x38, 0x2e, 0x6d, 0x69, - 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, - 0x2e, 0x57, 0x61, 0x74, 0x63, 0x68, 0x51, 0x75, 0x65, 0x72, 0x79, 0x56, 0x69, 0x65, 0x77, 0x53, - 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x4c, 0x6f, 0x61, 0x64, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x39, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x57, 0x61, 0x74, 0x63, 0x68, - 0x51, 0x75, 0x65, 0x72, 0x79, 0x56, 0x69, 0x65, 0x77, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, - 0x4c, 0x6f, 0x61, 0x64, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x22, 0x00, 0x28, 0x01, 0x30, 0x01, 0x12, 0x54, 0x0a, 0x0b, 0x4c, 0x6f, 0x61, 0x64, 0x42, 0x61, - 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x12, 0x26, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x4c, 0x6f, 0x61, 0x64, 0x42, - 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, - 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x63, 0x6f, 0x6d, - 0x6d, 0x6f, 0x6e, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x00, 0x12, 0x7b, 0x0a, 0x12, - 0x53, 0x68, 0x6f, 0x77, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x12, 0x30, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x53, 0x68, 0x6f, 0x77, 0x43, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x31, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x53, 0x68, 0x6f, - 0x77, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x5f, 0x0a, 0x0a, 0x47, 0x65, 0x74, - 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x12, 0x26, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x47, 0x65, - 0x74, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x27, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x6d, - 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x62, 0x0a, 0x0b, 0x47, 0x65, - 0x74, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x73, 0x12, 0x27, 0x2e, 0x6d, 0x69, 0x6c, 0x76, - 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, - 0x47, 0x65, 0x74, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x70, 0x6c, - 0x69, 0x63, 0x61, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x6c, - 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x53, 0x68, 0x61, 0x72, 0x64, 0x4c, 0x65, 0x61, 0x64, 0x65, 0x72, - 0x73, 0x12, 0x2a, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x68, 0x61, 0x72, 0x64, 0x4c, - 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2b, 0x2e, - 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x71, 0x75, 0x65, - 0x72, 0x79, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x68, 0x61, 0x72, 0x64, 0x4c, 0x65, 0x61, 0x64, 0x65, - 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x62, 0x0a, 0x0b, - 0x43, 0x68, 0x65, 0x63, 0x6b, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x12, 0x27, 0x2e, 0x6d, 0x69, - 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, - 0x73, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, - 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, - 0x12, 0x65, 0x0a, 0x13, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x2f, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x43, 0x72, - 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x47, 0x72, 0x6f, 0x75, - 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, - 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x53, - 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x00, 0x12, 0x66, 0x0a, 0x14, 0x55, 0x70, 0x64, 0x61, 0x74, - 0x65, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x12, - 0x2f, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x71, - 0x75, 0x65, 0x72, 0x79, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x6f, 0x75, - 0x72, 0x63, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x1b, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, - 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x00, 0x12, - 0x61, 0x0a, 0x11, 0x44, 0x72, 0x6f, 0x70, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x47, - 0x72, 0x6f, 0x75, 0x70, 0x12, 0x2d, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x44, 0x72, 0x6f, 0x70, 0x52, - 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, - 0x22, 0x00, 0x12, 0x5a, 0x0a, 0x0c, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x4e, 0x6f, - 0x64, 0x65, 0x12, 0x28, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, - 0x72, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x6d, - 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, - 0x6f, 0x6e, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x03, 0x88, 0x02, 0x01, 0x12, 0x5c, - 0x0a, 0x0f, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, - 0x61, 0x12, 0x2a, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x52, - 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, - 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x63, 0x6f, 0x6d, - 0x6d, 0x6f, 0x6e, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x00, 0x12, 0x77, 0x0a, 0x12, - 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x47, 0x72, 0x6f, 0x75, - 0x70, 0x73, 0x12, 0x2e, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x2f, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x7e, 0x0a, 0x15, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x62, - 0x65, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x30, - 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x71, 0x75, - 0x65, 0x72, 0x79, 0x2e, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x52, 0x65, 0x73, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x31, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, - 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x52, 0x65, - 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x75, 0x0a, 0x12, 0x4c, 0x69, 0x73, 0x74, 0x4c, 0x6f, 0x61, - 0x64, 0x65, 0x64, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x2d, 0x2e, 0x6d, 0x69, - 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, - 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x4c, 0x6f, 0x61, 0x64, 0x65, 0x64, 0x53, 0x65, 0x67, 0x6d, 0x65, - 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x6d, 0x69, 0x6c, - 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, - 0x4c, 0x69, 0x73, 0x74, 0x4c, 0x6f, 0x61, 0x64, 0x65, 0x64, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, - 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x63, 0x0a, 0x0c, - 0x4c, 0x69, 0x73, 0x74, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x65, 0x72, 0x73, 0x12, 0x27, 0x2e, 0x6d, - 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x71, 0x75, 0x65, 0x72, - 0x79, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x65, 0x72, 0x73, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x43, - 0x68, 0x65, 0x63, 0x6b, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, - 0x00, 0x12, 0x5c, 0x0a, 0x0f, 0x41, 0x63, 0x74, 0x69, 0x76, 0x61, 0x74, 0x65, 0x43, 0x68, 0x65, - 0x63, 0x6b, 0x65, 0x72, 0x12, 0x2a, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x76, 0x61, - 0x74, 0x65, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x1b, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, - 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x00, 0x12, - 0x60, 0x0a, 0x11, 0x44, 0x65, 0x61, 0x63, 0x74, 0x69, 0x76, 0x61, 0x74, 0x65, 0x43, 0x68, 0x65, - 0x63, 0x6b, 0x65, 0x72, 0x12, 0x2c, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x44, 0x65, 0x61, 0x63, 0x74, 0x69, - 0x76, 0x61, 0x74, 0x65, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, - 0x00, 0x12, 0x66, 0x0a, 0x0d, 0x4c, 0x69, 0x73, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x4e, 0x6f, - 0x64, 0x65, 0x12, 0x28, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x51, 0x75, 0x65, 0x72, - 0x79, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x6d, - 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x71, 0x75, 0x65, 0x72, - 0x79, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x4e, 0x6f, 0x64, 0x65, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x87, 0x01, 0x0a, 0x18, 0x47, 0x65, - 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x4e, 0x6f, 0x64, 0x65, 0x44, 0x69, 0x73, 0x74, 0x72, 0x69, - 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x33, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x47, 0x65, 0x74, 0x51, - 0x75, 0x65, 0x72, 0x79, 0x4e, 0x6f, 0x64, 0x65, 0x44, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, - 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x34, 0x2e, 0x6d, 0x69, - 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, - 0x2e, 0x47, 0x65, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x4e, 0x6f, 0x64, 0x65, 0x44, 0x69, 0x73, - 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x22, 0x00, 0x12, 0x5a, 0x0a, 0x0e, 0x53, 0x75, 0x73, 0x70, 0x65, 0x6e, 0x64, 0x42, 0x61, - 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x12, 0x29, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x53, 0x75, 0x73, 0x70, 0x65, - 0x6e, 0x64, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x1b, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, - 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x00, 0x12, - 0x58, 0x0a, 0x0d, 0x52, 0x65, 0x73, 0x75, 0x6d, 0x65, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, - 0x12, 0x28, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, - 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x52, 0x65, 0x73, 0x75, 0x6d, 0x65, 0x42, 0x61, 0x6c, 0x61, - 0x6e, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x6d, 0x69, 0x6c, - 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, - 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x00, 0x12, 0x75, 0x0a, 0x12, 0x43, 0x68, 0x65, - 0x63, 0x6b, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, - 0x2d, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x71, - 0x75, 0x65, 0x72, 0x79, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, - 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, - 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x71, 0x75, - 0x65, 0x72, 0x79, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, - 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, - 0x12, 0x54, 0x0a, 0x0b, 0x53, 0x75, 0x73, 0x70, 0x65, 0x6e, 0x64, 0x4e, 0x6f, 0x64, 0x65, 0x12, - 0x26, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x71, - 0x75, 0x65, 0x72, 0x79, 0x2e, 0x53, 0x75, 0x73, 0x70, 0x65, 0x6e, 0x64, 0x4e, 0x6f, 0x64, 0x65, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x53, 0x74, - 0x61, 0x74, 0x75, 0x73, 0x22, 0x00, 0x12, 0x52, 0x0a, 0x0a, 0x52, 0x65, 0x73, 0x75, 0x6d, 0x65, - 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x25, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x52, 0x65, 0x73, 0x75, 0x6d, 0x65, - 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x6d, 0x69, - 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, - 0x6e, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x00, 0x12, 0x5c, 0x0a, 0x0f, 0x54, 0x72, - 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x2a, 0x2e, - 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x71, 0x75, 0x65, - 0x72, 0x79, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x53, 0x65, 0x67, 0x6d, 0x65, - 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x6d, 0x69, 0x6c, 0x76, + 0x52, 0x0a, 0x73, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x44, 0x73, 0x22, 0xc0, 0x01, 0x0a, + 0x1a, 0x57, 0x61, 0x69, 0x74, 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, + 0x65, 0x61, 0x64, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x30, 0x0a, 0x04, 0x62, + 0x61, 0x73, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, - 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x00, 0x12, 0x5c, 0x0a, 0x0f, 0x54, 0x72, 0x61, 0x6e, - 0x73, 0x66, 0x65, 0x72, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x12, 0x2a, 0x2e, 0x6d, 0x69, - 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, - 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x53, 0x74, - 0x61, 0x74, 0x75, 0x73, 0x22, 0x00, 0x12, 0x72, 0x0a, 0x1a, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x51, - 0x75, 0x65, 0x72, 0x79, 0x4e, 0x6f, 0x64, 0x65, 0x44, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, - 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x35, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x51, - 0x75, 0x65, 0x72, 0x79, 0x4e, 0x6f, 0x64, 0x65, 0x44, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, - 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x6d, 0x69, - 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, - 0x6e, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x00, 0x12, 0x7b, 0x0a, 0x12, 0x43, 0x6c, - 0x65, 0x61, 0x72, 0x52, 0x65, 0x61, 0x64, 0x54, 0x61, 0x73, 0x6b, 0x51, 0x75, 0x65, 0x75, 0x65, - 0x12, 0x30, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, - 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x43, 0x6c, 0x65, 0x61, 0x72, 0x52, 0x65, - 0x61, 0x64, 0x54, 0x61, 0x73, 0x6b, 0x51, 0x75, 0x65, 0x75, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x31, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x43, 0x6c, 0x65, 0x61, 0x72, - 0x52, 0x65, 0x61, 0x64, 0x54, 0x61, 0x73, 0x6b, 0x51, 0x75, 0x65, 0x75, 0x65, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x5e, 0x0a, 0x10, 0x55, 0x70, 0x64, 0x61, 0x74, - 0x65, 0x4c, 0x6f, 0x61, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x2b, 0x2e, 0x6d, 0x69, - 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, - 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4c, 0x6f, 0x61, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, - 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x53, - 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x00, 0x12, 0x61, 0x0a, 0x0b, 0x52, 0x75, 0x6e, 0x41, 0x6e, - 0x61, 0x6c, 0x79, 0x7a, 0x65, 0x72, 0x12, 0x26, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x52, 0x75, 0x6e, 0x41, - 0x6e, 0x61, 0x6c, 0x79, 0x7a, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, - 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x6d, 0x69, - 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x52, 0x75, 0x6e, 0x41, 0x6e, 0x61, 0x6c, 0x79, 0x7a, 0x65, 0x72, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x81, 0x01, 0x0a, 0x16, 0x43, - 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x65, 0x50, 0x68, 0x72, 0x61, 0x73, 0x65, 0x4d, 0x61, 0x74, 0x63, - 0x68, 0x53, 0x6c, 0x6f, 0x70, 0x12, 0x31, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x75, - 0x74, 0x65, 0x50, 0x68, 0x72, 0x61, 0x73, 0x65, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x53, 0x6c, 0x6f, - 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x32, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, - 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x43, 0x6f, - 0x6d, 0x70, 0x75, 0x74, 0x65, 0x50, 0x68, 0x72, 0x61, 0x73, 0x65, 0x4d, 0x61, 0x74, 0x63, 0x68, - 0x53, 0x6c, 0x6f, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x6f, - 0x0a, 0x10, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x41, 0x6e, 0x61, 0x6c, 0x79, 0x7a, - 0x65, 0x72, 0x12, 0x2b, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, - 0x41, 0x6e, 0x61, 0x6c, 0x79, 0x7a, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x2c, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x71, - 0x75, 0x65, 0x72, 0x79, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x41, 0x6e, 0x61, - 0x6c, 0x79, 0x7a, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x32, - 0xcc, 0x1a, 0x0a, 0x09, 0x51, 0x75, 0x65, 0x72, 0x79, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x6c, 0x0a, - 0x12, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x53, 0x74, 0x61, - 0x74, 0x65, 0x73, 0x12, 0x2e, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6d, - 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x53, 0x74, 0x61, 0x74, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, - 0x65, 0x6e, 0x74, 0x53, 0x74, 0x61, 0x74, 0x65, 0x73, 0x22, 0x00, 0x12, 0x6d, 0x0a, 0x12, 0x47, - 0x65, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x54, 0x69, 0x63, 0x6b, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, - 0x6c, 0x12, 0x30, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x69, 0x6d, - 0x65, 0x54, 0x69, 0x63, 0x6b, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x71, 0x0a, 0x14, 0x47, 0x65, - 0x74, 0x53, 0x74, 0x61, 0x74, 0x69, 0x73, 0x74, 0x69, 0x63, 0x73, 0x43, 0x68, 0x61, 0x6e, 0x6e, - 0x65, 0x6c, 0x12, 0x32, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x74, - 0x61, 0x74, 0x69, 0x73, 0x74, 0x69, 0x63, 0x73, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x53, 0x74, 0x72, - 0x69, 0x6e, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x5c, 0x0a, - 0x0f, 0x57, 0x61, 0x74, 0x63, 0x68, 0x44, 0x6d, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x73, - 0x12, 0x2a, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, - 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x57, 0x61, 0x74, 0x63, 0x68, 0x44, 0x6d, 0x43, 0x68, 0x61, - 0x6e, 0x6e, 0x65, 0x6c, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x6d, - 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, - 0x6f, 0x6e, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x00, 0x12, 0x5a, 0x0a, 0x0e, 0x55, - 0x6e, 0x73, 0x75, 0x62, 0x44, 0x6d, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x12, 0x29, 0x2e, - 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x71, 0x75, 0x65, - 0x72, 0x79, 0x2e, 0x55, 0x6e, 0x73, 0x75, 0x62, 0x44, 0x6d, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, - 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, - 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x53, - 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x00, 0x12, 0x56, 0x0a, 0x0c, 0x4c, 0x6f, 0x61, 0x64, 0x53, - 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x27, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x4c, 0x6f, 0x61, - 0x64, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x1b, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, - 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x00, 0x12, - 0x4c, 0x0a, 0x07, 0x50, 0x72, 0x65, 0x77, 0x61, 0x72, 0x6d, 0x12, 0x22, 0x2e, 0x6d, 0x69, 0x6c, - 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, - 0x50, 0x72, 0x65, 0x77, 0x61, 0x72, 0x6d, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, - 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x63, 0x6f, - 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x00, 0x12, 0x60, 0x0a, - 0x11, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x12, 0x2c, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x43, - 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x1b, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, - 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x00, 0x12, + 0x4d, 0x73, 0x67, 0x42, 0x61, 0x73, 0x65, 0x52, 0x04, 0x62, 0x61, 0x73, 0x65, 0x12, 0x22, 0x0a, + 0x0c, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x03, 0x52, 0x0c, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, + 0x44, 0x12, 0x2d, 0x0a, 0x12, 0x65, 0x78, 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 0x5f, 0x76, 0x63, + 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x11, 0x65, + 0x78, 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 0x56, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x73, + 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x5f, 0x6f, 0x6e, 0x6c, 0x79, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x4f, 0x6e, 0x6c, 0x79, 0x2a, + 0xa4, 0x01, 0x0a, 0x10, 0x50, 0x72, 0x65, 0x77, 0x61, 0x72, 0x6d, 0x54, 0x61, 0x73, 0x6b, 0x53, + 0x74, 0x61, 0x74, 0x65, 0x12, 0x1b, 0x0a, 0x17, 0x50, 0x72, 0x65, 0x77, 0x61, 0x72, 0x6d, 0x54, + 0x61, 0x73, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x65, 0x55, 0x6e, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x10, + 0x00, 0x12, 0x1b, 0x0a, 0x17, 0x50, 0x72, 0x65, 0x77, 0x61, 0x72, 0x6d, 0x54, 0x61, 0x73, 0x6b, + 0x53, 0x74, 0x61, 0x74, 0x65, 0x50, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x10, 0x01, 0x12, 0x1b, + 0x0a, 0x17, 0x50, 0x72, 0x65, 0x77, 0x61, 0x72, 0x6d, 0x54, 0x61, 0x73, 0x6b, 0x53, 0x74, 0x61, + 0x74, 0x65, 0x57, 0x61, 0x72, 0x6d, 0x69, 0x6e, 0x67, 0x10, 0x02, 0x12, 0x1d, 0x0a, 0x19, 0x50, + 0x72, 0x65, 0x77, 0x61, 0x72, 0x6d, 0x54, 0x61, 0x73, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x65, 0x43, + 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x10, 0x03, 0x12, 0x1a, 0x0a, 0x16, 0x50, 0x72, + 0x65, 0x77, 0x61, 0x72, 0x6d, 0x54, 0x61, 0x73, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x65, 0x46, 0x61, + 0x69, 0x6c, 0x65, 0x64, 0x10, 0x04, 0x2a, 0x3d, 0x0a, 0x09, 0x4c, 0x6f, 0x61, 0x64, 0x53, 0x63, + 0x6f, 0x70, 0x65, 0x12, 0x08, 0x0a, 0x04, 0x46, 0x75, 0x6c, 0x6c, 0x10, 0x00, 0x12, 0x09, 0x0a, + 0x05, 0x44, 0x65, 0x6c, 0x74, 0x61, 0x10, 0x01, 0x12, 0x09, 0x0a, 0x05, 0x53, 0x74, 0x61, 0x74, + 0x73, 0x10, 0x03, 0x12, 0x0a, 0x0a, 0x06, 0x52, 0x65, 0x6f, 0x70, 0x65, 0x6e, 0x10, 0x04, 0x22, + 0x04, 0x08, 0x02, 0x10, 0x02, 0x2a, 0x40, 0x0a, 0x09, 0x44, 0x61, 0x74, 0x61, 0x53, 0x63, 0x6f, + 0x70, 0x65, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x6e, 0x4b, 0x6e, 0x6f, 0x77, 0x6e, 0x10, 0x00, 0x12, + 0x07, 0x0a, 0x03, 0x41, 0x6c, 0x6c, 0x10, 0x01, 0x12, 0x0d, 0x0a, 0x09, 0x53, 0x74, 0x72, 0x65, + 0x61, 0x6d, 0x69, 0x6e, 0x67, 0x10, 0x02, 0x12, 0x0e, 0x0a, 0x0a, 0x48, 0x69, 0x73, 0x74, 0x6f, + 0x72, 0x69, 0x63, 0x61, 0x6c, 0x10, 0x03, 0x2a, 0x7a, 0x0a, 0x0e, 0x50, 0x61, 0x72, 0x74, 0x69, + 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x0c, 0x0a, 0x08, 0x4e, 0x6f, 0x74, + 0x45, 0x78, 0x69, 0x73, 0x74, 0x10, 0x00, 0x12, 0x0e, 0x0a, 0x0a, 0x4e, 0x6f, 0x74, 0x50, 0x72, + 0x65, 0x73, 0x65, 0x6e, 0x74, 0x10, 0x01, 0x12, 0x0a, 0x0a, 0x06, 0x4f, 0x6e, 0x44, 0x69, 0x73, + 0x6b, 0x10, 0x02, 0x12, 0x13, 0x0a, 0x0f, 0x50, 0x61, 0x72, 0x74, 0x69, 0x61, 0x6c, 0x49, 0x6e, + 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x10, 0x03, 0x12, 0x0c, 0x0a, 0x08, 0x49, 0x6e, 0x4d, 0x65, + 0x6d, 0x6f, 0x72, 0x79, 0x10, 0x04, 0x12, 0x10, 0x0a, 0x0c, 0x50, 0x61, 0x72, 0x74, 0x69, 0x61, + 0x6c, 0x49, 0x6e, 0x47, 0x50, 0x55, 0x10, 0x05, 0x12, 0x09, 0x0a, 0x05, 0x49, 0x6e, 0x47, 0x50, + 0x55, 0x10, 0x06, 0x2a, 0x64, 0x0a, 0x10, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x43, 0x6f, + 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x13, 0x0a, 0x0f, 0x55, 0x6e, 0x4b, 0x6e, 0x6f, + 0x77, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x10, 0x00, 0x12, 0x0b, 0x0a, 0x07, + 0x48, 0x61, 0x6e, 0x64, 0x6f, 0x66, 0x66, 0x10, 0x01, 0x12, 0x0f, 0x0a, 0x0b, 0x4c, 0x6f, 0x61, + 0x64, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x10, 0x02, 0x12, 0x0f, 0x0a, 0x0b, 0x47, 0x72, + 0x70, 0x63, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x10, 0x03, 0x12, 0x0c, 0x0a, 0x08, 0x4e, + 0x6f, 0x64, 0x65, 0x44, 0x6f, 0x77, 0x6e, 0x10, 0x04, 0x2a, 0x42, 0x0a, 0x08, 0x4c, 0x6f, 0x61, + 0x64, 0x54, 0x79, 0x70, 0x65, 0x12, 0x0f, 0x0a, 0x0b, 0x55, 0x6e, 0x4b, 0x6e, 0x6f, 0x77, 0x6e, + 0x54, 0x79, 0x70, 0x65, 0x10, 0x00, 0x12, 0x11, 0x0a, 0x0d, 0x4c, 0x6f, 0x61, 0x64, 0x50, 0x61, + 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x10, 0x01, 0x12, 0x12, 0x0a, 0x0e, 0x4c, 0x6f, 0x61, + 0x64, 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x10, 0x02, 0x2a, 0x32, 0x0a, + 0x0a, 0x4c, 0x6f, 0x61, 0x64, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x0b, 0x0a, 0x07, 0x49, + 0x6e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x10, 0x00, 0x12, 0x0b, 0x0a, 0x07, 0x4c, 0x6f, 0x61, 0x64, + 0x69, 0x6e, 0x67, 0x10, 0x01, 0x12, 0x0a, 0x0a, 0x06, 0x4c, 0x6f, 0x61, 0x64, 0x65, 0x64, 0x10, + 0x02, 0x2a, 0x57, 0x0a, 0x08, 0x53, 0x79, 0x6e, 0x63, 0x54, 0x79, 0x70, 0x65, 0x12, 0x0a, 0x0a, + 0x06, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x10, 0x00, 0x12, 0x07, 0x0a, 0x03, 0x53, 0x65, 0x74, + 0x10, 0x01, 0x12, 0x09, 0x0a, 0x05, 0x41, 0x6d, 0x65, 0x6e, 0x64, 0x10, 0x02, 0x12, 0x11, 0x0a, + 0x0d, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x10, 0x03, + 0x12, 0x18, 0x0a, 0x14, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x61, 0x72, 0x74, 0x69, 0x74, + 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x73, 0x10, 0x04, 0x2a, 0x23, 0x0a, 0x12, 0x48, 0x69, + 0x67, 0x68, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x54, 0x79, 0x70, 0x65, + 0x12, 0x0d, 0x0a, 0x09, 0x54, 0x65, 0x78, 0x74, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x10, 0x00, 0x32, + 0xa6, 0x26, 0x0a, 0x0a, 0x51, 0x75, 0x65, 0x72, 0x79, 0x43, 0x6f, 0x6f, 0x72, 0x64, 0x12, 0x70, + 0x0a, 0x13, 0x53, 0x68, 0x6f, 0x77, 0x4c, 0x6f, 0x61, 0x64, 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x2a, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x53, 0x68, 0x6f, 0x77, 0x43, + 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x2b, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x53, 0x68, 0x6f, 0x77, 0x43, 0x6f, 0x6c, 0x6c, 0x65, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, + 0x12, 0x6d, 0x0a, 0x12, 0x53, 0x68, 0x6f, 0x77, 0x4c, 0x6f, 0x61, 0x64, 0x50, 0x61, 0x72, 0x74, + 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x29, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x53, 0x68, 0x6f, 0x77, + 0x50, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x2a, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x53, 0x68, 0x6f, 0x77, 0x50, 0x61, 0x72, 0x74, 0x69, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x5a, 0x0a, 0x0e, 0x4c, 0x6f, 0x61, 0x64, 0x50, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x29, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x4c, 0x6f, 0x61, 0x64, 0x50, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, - 0x6f, 0x6e, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x00, 0x12, 0x60, 0x0a, 0x11, 0x52, + 0x6f, 0x6e, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x00, 0x12, 0x54, 0x0a, 0x07, 0x50, + 0x72, 0x65, 0x77, 0x61, 0x72, 0x6d, 0x12, 0x22, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x50, 0x72, 0x65, 0x77, + 0x61, 0x72, 0x6d, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x6d, 0x69, 0x6c, + 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, + 0x50, 0x72, 0x65, 0x77, 0x61, 0x72, 0x6d, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, + 0x00, 0x12, 0x78, 0x0a, 0x13, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x50, 0x72, 0x65, + 0x77, 0x61, 0x72, 0x6d, 0x54, 0x61, 0x73, 0x6b, 0x12, 0x2e, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, + 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x44, 0x65, + 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x50, 0x72, 0x65, 0x77, 0x61, 0x72, 0x6d, 0x54, 0x61, 0x73, + 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2f, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, + 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x44, 0x65, + 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x50, 0x72, 0x65, 0x77, 0x61, 0x72, 0x6d, 0x54, 0x61, 0x73, + 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x60, 0x0a, 0x11, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x50, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x2c, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x50, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x63, 0x6f, - 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x00, 0x12, 0x5c, 0x0a, - 0x0f, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, - 0x12, 0x2a, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, - 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x53, 0x65, 0x67, - 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x6d, + 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x00, 0x12, 0x5a, 0x0a, + 0x0e, 0x4c, 0x6f, 0x61, 0x64, 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, + 0x29, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x71, + 0x75, 0x65, 0x72, 0x79, 0x2e, 0x4c, 0x6f, 0x61, 0x64, 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x6d, 0x69, 0x6c, + 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, + 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x00, 0x12, 0x60, 0x0a, 0x11, 0x52, 0x65, 0x6c, + 0x65, 0x61, 0x73, 0x65, 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2c, + 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x71, 0x75, + 0x65, 0x72, 0x79, 0x2e, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x43, 0x6f, 0x6c, 0x6c, 0x65, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, - 0x6f, 0x6e, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x00, 0x12, 0x69, 0x0a, 0x0e, 0x47, - 0x65, 0x74, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x29, 0x2e, - 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x71, 0x75, 0x65, - 0x72, 0x79, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x6e, 0x66, - 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, + 0x6f, 0x6e, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x00, 0x12, 0x6c, 0x0a, 0x17, 0x53, + 0x79, 0x6e, 0x63, 0x4e, 0x65, 0x77, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x50, 0x61, 0x72, + 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x32, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x53, 0x79, 0x6e, 0x63, + 0x4e, 0x65, 0x77, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x50, 0x61, 0x72, 0x74, 0x69, 0x74, + 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x6d, 0x69, 0x6c, + 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, + 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x00, 0x12, 0x75, 0x0a, 0x12, 0x47, 0x65, 0x74, + 0x50, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x73, 0x12, + 0x2d, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x71, + 0x75, 0x65, 0x72, 0x79, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, + 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, + 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x71, 0x75, + 0x65, 0x72, 0x79, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, + 0x53, 0x74, 0x61, 0x74, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, + 0x12, 0x6d, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x4c, 0x6f, 0x61, 0x64, 0x53, 0x65, 0x67, 0x6d, 0x65, + 0x6e, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x29, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x47, 0x65, 0x74, 0x53, + 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x2a, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, + 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, + 0x7b, 0x0a, 0x14, 0x47, 0x65, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x56, 0x69, 0x65, 0x77, 0x4c, + 0x6f, 0x61, 0x64, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x2f, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x47, 0x65, 0x74, + 0x51, 0x75, 0x65, 0x72, 0x79, 0x56, 0x69, 0x65, 0x77, 0x4c, 0x6f, 0x61, 0x64, 0x49, 0x6e, 0x66, + 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x30, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x47, 0x65, - 0x74, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x64, 0x0a, 0x13, 0x53, 0x79, 0x6e, 0x63, 0x52, 0x65, - 0x70, 0x6c, 0x69, 0x63, 0x61, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x2e, 0x2e, - 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x71, 0x75, 0x65, - 0x72, 0x79, 0x2e, 0x53, 0x79, 0x6e, 0x63, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x53, 0x65, - 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, - 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x63, 0x6f, 0x6d, - 0x6d, 0x6f, 0x6e, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x00, 0x12, 0x69, 0x0a, 0x0d, - 0x47, 0x65, 0x74, 0x53, 0x74, 0x61, 0x74, 0x69, 0x73, 0x74, 0x69, 0x63, 0x73, 0x12, 0x28, 0x2e, - 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x71, 0x75, 0x65, - 0x72, 0x79, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x74, 0x61, 0x74, 0x69, 0x73, 0x74, 0x69, 0x63, 0x73, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2c, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, - 0x47, 0x65, 0x74, 0x53, 0x74, 0x61, 0x74, 0x69, 0x73, 0x74, 0x69, 0x63, 0x73, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x53, 0x0a, 0x06, 0x53, 0x65, 0x61, 0x72, 0x63, - 0x68, 0x12, 0x21, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x53, 0x65, 0x61, - 0x72, 0x63, 0x68, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x22, 0x00, 0x12, 0x5b, 0x0a, 0x0e, - 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x21, + 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x56, 0x69, 0x65, 0x77, 0x4c, 0x6f, 0x61, 0x64, 0x49, 0x6e, + 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x9a, 0x01, 0x0a, + 0x1d, 0x57, 0x61, 0x74, 0x63, 0x68, 0x51, 0x75, 0x65, 0x72, 0x79, 0x56, 0x69, 0x65, 0x77, 0x53, + 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x4c, 0x6f, 0x61, 0x64, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x38, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x71, 0x75, - 0x65, 0x72, 0x79, 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x24, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, - 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x22, 0x00, 0x12, 0x53, 0x0a, 0x05, 0x51, 0x75, 0x65, - 0x72, 0x79, 0x12, 0x20, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x52, 0x65, 0x74, - 0x72, 0x69, 0x65, 0x76, 0x65, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x22, 0x00, 0x12, 0x5b, - 0x0a, 0x0b, 0x51, 0x75, 0x65, 0x72, 0x79, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x12, 0x20, 0x2e, - 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x71, 0x75, 0x65, - 0x72, 0x79, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x26, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x69, - 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x52, 0x65, 0x74, 0x72, 0x69, 0x65, 0x76, 0x65, - 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x22, 0x00, 0x30, 0x01, 0x12, 0x5b, 0x0a, 0x0d, 0x51, - 0x75, 0x65, 0x72, 0x79, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x20, 0x2e, 0x6d, - 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x71, 0x75, 0x65, 0x72, - 0x79, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, - 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x69, 0x6e, - 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x52, 0x65, 0x74, 0x72, 0x69, 0x65, 0x76, 0x65, 0x52, - 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x22, 0x00, 0x12, 0x63, 0x0a, 0x13, 0x51, 0x75, 0x65, 0x72, - 0x79, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x12, - 0x20, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x71, - 0x75, 0x65, 0x72, 0x79, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x26, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x52, 0x65, 0x74, 0x72, 0x69, 0x65, - 0x76, 0x65, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x22, 0x00, 0x30, 0x01, 0x12, 0x7b, 0x0a, - 0x12, 0x53, 0x68, 0x6f, 0x77, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x73, 0x12, 0x30, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x53, 0x68, 0x6f, 0x77, - 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x31, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, + 0x65, 0x72, 0x79, 0x2e, 0x57, 0x61, 0x74, 0x63, 0x68, 0x51, 0x75, 0x65, 0x72, 0x79, 0x56, 0x69, + 0x65, 0x77, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x4c, 0x6f, 0x61, 0x64, 0x49, 0x6e, 0x66, + 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x39, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, + 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x57, 0x61, + 0x74, 0x63, 0x68, 0x51, 0x75, 0x65, 0x72, 0x79, 0x56, 0x69, 0x65, 0x77, 0x53, 0x65, 0x67, 0x6d, + 0x65, 0x6e, 0x74, 0x4c, 0x6f, 0x61, 0x64, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x22, 0x00, 0x28, 0x01, 0x30, 0x01, 0x12, 0x54, 0x0a, 0x0b, 0x4c, 0x6f, 0x61, + 0x64, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x12, 0x26, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, + 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x4c, 0x6f, + 0x61, 0x64, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x1b, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, + 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x00, 0x12, + 0x7b, 0x0a, 0x12, 0x53, 0x68, 0x6f, 0x77, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x30, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x53, 0x68, 0x6f, 0x77, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x5f, 0x0a, 0x0a, 0x47, 0x65, - 0x74, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x12, 0x26, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, - 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x47, - 0x65, 0x74, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x27, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, - 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, - 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x78, 0x0a, 0x13, 0x47, - 0x65, 0x74, 0x44, 0x61, 0x74, 0x61, 0x44, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, - 0x6f, 0x6e, 0x12, 0x2e, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x61, 0x74, 0x61, 0x44, - 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x2f, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x61, 0x74, 0x61, 0x44, - 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x5e, 0x0a, 0x10, 0x53, 0x79, 0x6e, 0x63, 0x44, 0x69, 0x73, - 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2b, 0x2e, 0x6d, 0x69, 0x6c, 0x76, - 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x53, - 0x79, 0x6e, 0x63, 0x44, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x52, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x31, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, + 0x53, 0x68, 0x6f, 0x77, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x5f, 0x0a, 0x0a, + 0x47, 0x65, 0x74, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x12, 0x26, 0x2e, 0x6d, 0x69, 0x6c, + 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, + 0x2e, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x74, 0x72, + 0x69, 0x63, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x62, 0x0a, + 0x0b, 0x47, 0x65, 0x74, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x73, 0x12, 0x27, 0x2e, 0x6d, + 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x6d, 0x69, 0x6c, 0x76, + 0x75, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x73, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x52, + 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, + 0x00, 0x12, 0x6c, 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x53, 0x68, 0x61, 0x72, 0x64, 0x4c, 0x65, 0x61, + 0x64, 0x65, 0x72, 0x73, 0x12, 0x2a, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x68, 0x61, + 0x72, 0x64, 0x4c, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x2b, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, + 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x68, 0x61, 0x72, 0x64, 0x4c, 0x65, + 0x61, 0x64, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, + 0x62, 0x0a, 0x0b, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x12, 0x27, + 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x6d, 0x69, + 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x43, 0x68, + 0x65, 0x63, 0x6b, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x22, 0x00, 0x12, 0x65, 0x0a, 0x13, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, + 0x6f, 0x75, 0x72, 0x63, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x2f, 0x2e, 0x6d, 0x69, 0x6c, + 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, + 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x47, + 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x6d, 0x69, + 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, + 0x6e, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x00, 0x12, 0x66, 0x0a, 0x14, 0x55, 0x70, + 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x47, 0x72, 0x6f, 0x75, + 0x70, 0x73, 0x12, 0x2f, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, + 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, + 0x22, 0x00, 0x12, 0x61, 0x0a, 0x11, 0x44, 0x72, 0x6f, 0x70, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, + 0x63, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x2d, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x44, 0x72, + 0x6f, 0x70, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x53, 0x74, 0x61, - 0x74, 0x75, 0x73, 0x22, 0x00, 0x12, 0x4a, 0x0a, 0x06, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, - 0x21, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x71, - 0x75, 0x65, 0x72, 0x79, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, - 0x00, 0x12, 0x60, 0x0a, 0x0b, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x42, 0x61, 0x74, 0x63, 0x68, - 0x12, 0x26, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, - 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x42, 0x61, 0x74, 0x63, - 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, - 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x44, 0x65, - 0x6c, 0x65, 0x74, 0x65, 0x42, 0x61, 0x74, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x22, 0x00, 0x12, 0x56, 0x0a, 0x0c, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x53, 0x63, 0x68, - 0x65, 0x6d, 0x61, 0x12, 0x27, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x53, - 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x6d, - 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, - 0x6f, 0x6e, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x00, 0x12, 0x54, 0x0a, 0x0b, 0x55, - 0x70, 0x64, 0x61, 0x74, 0x65, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x26, 0x2e, 0x6d, 0x69, 0x6c, - 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, - 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, - 0x00, 0x12, 0x61, 0x0a, 0x0b, 0x52, 0x75, 0x6e, 0x41, 0x6e, 0x61, 0x6c, 0x79, 0x7a, 0x65, 0x72, - 0x12, 0x26, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, - 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x52, 0x75, 0x6e, 0x41, 0x6e, 0x61, 0x6c, 0x79, 0x7a, 0x65, - 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, - 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x52, - 0x75, 0x6e, 0x41, 0x6e, 0x61, 0x6c, 0x79, 0x7a, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x22, 0x00, 0x12, 0x63, 0x0a, 0x0c, 0x47, 0x65, 0x74, 0x48, 0x69, 0x67, 0x68, 0x6c, - 0x69, 0x67, 0x68, 0x74, 0x12, 0x27, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x47, 0x65, 0x74, 0x48, 0x69, 0x67, - 0x68, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, - 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x71, 0x75, 0x65, - 0x72, 0x79, 0x2e, 0x47, 0x65, 0x74, 0x48, 0x69, 0x67, 0x68, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x6f, 0x0a, 0x10, 0x56, 0x61, 0x6c, - 0x69, 0x64, 0x61, 0x74, 0x65, 0x41, 0x6e, 0x61, 0x6c, 0x79, 0x7a, 0x65, 0x72, 0x12, 0x2b, 0x2e, + 0x74, 0x75, 0x73, 0x22, 0x00, 0x12, 0x5a, 0x0a, 0x0c, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, + 0x72, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x28, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x54, 0x72, 0x61, 0x6e, + 0x73, 0x66, 0x65, 0x72, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x1b, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x63, + 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x03, 0x88, 0x02, + 0x01, 0x12, 0x5c, 0x0a, 0x0f, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x52, 0x65, 0x70, + 0x6c, 0x69, 0x63, 0x61, 0x12, 0x2a, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, + 0x65, 0x72, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x1b, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, + 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x00, 0x12, + 0x77, 0x0a, 0x12, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x47, + 0x72, 0x6f, 0x75, 0x70, 0x73, 0x12, 0x2e, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, + 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2f, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, + 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x7e, 0x0a, 0x15, 0x44, 0x65, 0x73, 0x63, + 0x72, 0x69, 0x62, 0x65, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x47, 0x72, 0x6f, 0x75, + 0x70, 0x12, 0x30, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x52, + 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x31, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x62, + 0x65, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x75, 0x0a, 0x12, 0x4c, 0x69, 0x73, 0x74, + 0x4c, 0x6f, 0x61, 0x64, 0x65, 0x64, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x2d, + 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x71, 0x75, + 0x65, 0x72, 0x79, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x4c, 0x6f, 0x61, 0x64, 0x65, 0x64, 0x53, 0x65, + 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x71, 0x75, 0x65, - 0x72, 0x79, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x41, 0x6e, 0x61, 0x6c, 0x79, - 0x7a, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2c, 0x2e, 0x6d, 0x69, 0x6c, - 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, - 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x41, 0x6e, 0x61, 0x6c, 0x79, 0x7a, 0x65, 0x72, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x61, 0x0a, 0x10, 0x53, 0x79, - 0x6e, 0x63, 0x46, 0x69, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x2e, - 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x69, 0x6e, - 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x53, 0x79, 0x6e, 0x63, 0x46, 0x69, 0x6c, 0x65, 0x52, - 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, + 0x72, 0x79, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x4c, 0x6f, 0x61, 0x64, 0x65, 0x64, 0x53, 0x65, 0x67, + 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, + 0x63, 0x0a, 0x0c, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x65, 0x72, 0x73, 0x12, + 0x27, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x71, + 0x75, 0x65, 0x72, 0x79, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x65, 0x72, + 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, + 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x4c, 0x69, + 0x73, 0x74, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x22, 0x00, 0x12, 0x5c, 0x0a, 0x0f, 0x41, 0x63, 0x74, 0x69, 0x76, 0x61, 0x74, 0x65, + 0x43, 0x68, 0x65, 0x63, 0x6b, 0x65, 0x72, 0x12, 0x2a, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x41, 0x63, 0x74, + 0x69, 0x76, 0x61, 0x74, 0x65, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, + 0x22, 0x00, 0x12, 0x60, 0x0a, 0x11, 0x44, 0x65, 0x61, 0x63, 0x74, 0x69, 0x76, 0x61, 0x74, 0x65, + 0x43, 0x68, 0x65, 0x63, 0x6b, 0x65, 0x72, 0x12, 0x2c, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x44, 0x65, 0x61, + 0x63, 0x74, 0x69, 0x76, 0x61, 0x74, 0x65, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x65, 0x72, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x53, 0x74, 0x61, 0x74, + 0x75, 0x73, 0x22, 0x00, 0x12, 0x66, 0x0a, 0x0d, 0x4c, 0x69, 0x73, 0x74, 0x51, 0x75, 0x65, 0x72, + 0x79, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x28, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x51, + 0x75, 0x65, 0x72, 0x79, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x29, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x71, + 0x75, 0x65, 0x72, 0x79, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x4e, 0x6f, + 0x64, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x87, 0x01, 0x0a, + 0x18, 0x47, 0x65, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x4e, 0x6f, 0x64, 0x65, 0x44, 0x69, 0x73, + 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x33, 0x2e, 0x6d, 0x69, 0x6c, 0x76, + 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x47, + 0x65, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x4e, 0x6f, 0x64, 0x65, 0x44, 0x69, 0x73, 0x74, 0x72, + 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x34, + 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x71, 0x75, + 0x65, 0x72, 0x79, 0x2e, 0x47, 0x65, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x4e, 0x6f, 0x64, 0x65, + 0x44, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x5a, 0x0a, 0x0e, 0x53, 0x75, 0x73, 0x70, 0x65, 0x6e, + 0x64, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x12, 0x29, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, + 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x53, 0x75, + 0x73, 0x70, 0x65, 0x6e, 0x64, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, + 0x22, 0x00, 0x12, 0x58, 0x0a, 0x0d, 0x52, 0x65, 0x73, 0x75, 0x6d, 0x65, 0x42, 0x61, 0x6c, 0x61, + 0x6e, 0x63, 0x65, 0x12, 0x28, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x52, 0x65, 0x73, 0x75, 0x6d, 0x65, 0x42, + 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, + 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x63, 0x6f, 0x6d, + 0x6d, 0x6f, 0x6e, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x00, 0x12, 0x75, 0x0a, 0x12, + 0x43, 0x68, 0x65, 0x63, 0x6b, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, + 0x75, 0x73, 0x12, 0x2d, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x42, 0x61, 0x6c, + 0x61, 0x6e, 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x2e, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x42, 0x61, 0x6c, 0x61, + 0x6e, 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x22, 0x00, 0x12, 0x54, 0x0a, 0x0b, 0x53, 0x75, 0x73, 0x70, 0x65, 0x6e, 0x64, 0x4e, 0x6f, + 0x64, 0x65, 0x12, 0x26, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x53, 0x75, 0x73, 0x70, 0x65, 0x6e, 0x64, 0x4e, + 0x6f, 0x64, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x6d, 0x69, 0x6c, + 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, + 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x00, 0x12, 0x52, 0x0a, 0x0a, 0x52, 0x65, 0x73, + 0x75, 0x6d, 0x65, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x25, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x52, 0x65, 0x73, + 0x75, 0x6d, 0x65, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, + 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x63, 0x6f, + 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x00, 0x12, 0x5c, 0x0a, + 0x0f, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, + 0x12, 0x2a, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, + 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x53, 0x65, + 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x6d, + 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, + 0x6f, 0x6e, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x00, 0x12, 0x5c, 0x0a, 0x0f, 0x54, + 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x12, 0x2a, + 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x71, 0x75, + 0x65, 0x72, 0x79, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x43, 0x68, 0x61, 0x6e, + 0x6e, 0x65, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x6d, 0x69, 0x6c, + 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, + 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x00, 0x12, 0x72, 0x0a, 0x1a, 0x43, 0x68, 0x65, + 0x63, 0x6b, 0x51, 0x75, 0x65, 0x72, 0x79, 0x4e, 0x6f, 0x64, 0x65, 0x44, 0x69, 0x73, 0x74, 0x72, + 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x35, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x43, 0x68, 0x65, + 0x63, 0x6b, 0x51, 0x75, 0x65, 0x72, 0x79, 0x4e, 0x6f, 0x64, 0x65, 0x44, 0x69, 0x73, 0x74, 0x72, + 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x00, 0x12, 0x7b, 0x0a, 0x12, 0x43, 0x6c, 0x65, 0x61, 0x72, 0x52, 0x65, 0x61, 0x64, 0x54, 0x61, 0x73, 0x6b, 0x51, 0x75, @@ -12492,19 +12344,258 @@ var file_query_coord_proto_rawDesc = []byte{ 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x31, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x43, 0x6c, 0x65, 0x61, 0x72, 0x52, 0x65, 0x61, 0x64, 0x54, 0x61, 0x73, 0x6b, 0x51, 0x75, 0x65, 0x75, 0x65, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x81, 0x01, 0x0a, 0x16, 0x43, - 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x65, 0x50, 0x68, 0x72, 0x61, 0x73, 0x65, 0x4d, 0x61, 0x74, 0x63, - 0x68, 0x53, 0x6c, 0x6f, 0x70, 0x12, 0x31, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x75, - 0x74, 0x65, 0x50, 0x68, 0x72, 0x61, 0x73, 0x65, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x53, 0x6c, 0x6f, - 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x32, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x5e, 0x0a, 0x10, 0x55, 0x70, + 0x64, 0x61, 0x74, 0x65, 0x4c, 0x6f, 0x61, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x2b, + 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x71, 0x75, + 0x65, 0x72, 0x79, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4c, 0x6f, 0x61, 0x64, 0x43, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x6d, 0x69, + 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, + 0x6e, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x00, 0x12, 0x61, 0x0a, 0x0b, 0x52, 0x75, + 0x6e, 0x41, 0x6e, 0x61, 0x6c, 0x79, 0x7a, 0x65, 0x72, 0x12, 0x26, 0x2e, 0x6d, 0x69, 0x6c, 0x76, + 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x52, + 0x75, 0x6e, 0x41, 0x6e, 0x61, 0x6c, 0x79, 0x7a, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x28, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x52, 0x75, 0x6e, 0x41, 0x6e, 0x61, 0x6c, 0x79, + 0x7a, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x81, 0x01, + 0x0a, 0x16, 0x43, 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x65, 0x50, 0x68, 0x72, 0x61, 0x73, 0x65, 0x4d, + 0x61, 0x74, 0x63, 0x68, 0x53, 0x6c, 0x6f, 0x70, 0x12, 0x31, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x65, 0x50, 0x68, 0x72, 0x61, 0x73, 0x65, 0x4d, 0x61, 0x74, 0x63, 0x68, - 0x53, 0x6c, 0x6f, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x42, 0x32, - 0x5a, 0x30, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6d, 0x69, 0x6c, - 0x76, 0x75, 0x73, 0x2d, 0x69, 0x6f, 0x2f, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2f, 0x70, 0x6b, - 0x67, 0x2f, 0x76, 0x33, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x71, 0x75, 0x65, 0x72, 0x79, - 0x70, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x53, 0x6c, 0x6f, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x32, 0x2e, 0x6d, 0x69, + 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, + 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x65, 0x50, 0x68, 0x72, 0x61, 0x73, 0x65, 0x4d, 0x61, + 0x74, 0x63, 0x68, 0x53, 0x6c, 0x6f, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, + 0x00, 0x12, 0x6f, 0x0a, 0x10, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x41, 0x6e, 0x61, + 0x6c, 0x79, 0x7a, 0x65, 0x72, 0x12, 0x2b, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, + 0x61, 0x74, 0x65, 0x41, 0x6e, 0x61, 0x6c, 0x79, 0x7a, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x2c, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, + 0x41, 0x6e, 0x61, 0x6c, 0x79, 0x7a, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x22, 0x00, 0x12, 0x64, 0x0a, 0x13, 0x57, 0x61, 0x69, 0x74, 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x61, 0x64, 0x79, 0x12, 0x2e, 0x2e, 0x6d, 0x69, 0x6c, 0x76, + 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x57, + 0x61, 0x69, 0x74, 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x61, + 0x64, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x6d, 0x69, 0x6c, 0x76, + 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, + 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x00, 0x32, 0xcc, 0x1a, 0x0a, 0x09, 0x51, 0x75, 0x65, + 0x72, 0x79, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x6c, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6d, + 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x53, 0x74, 0x61, 0x74, 0x65, 0x73, 0x12, 0x2e, 0x2e, 0x6d, + 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x6d, 0x69, 0x6c, 0x76, + 0x75, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x53, + 0x74, 0x61, 0x74, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x6d, + 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x6d, 0x69, 0x6c, 0x76, + 0x75, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x53, 0x74, 0x61, 0x74, + 0x65, 0x73, 0x22, 0x00, 0x12, 0x6d, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x54, + 0x69, 0x63, 0x6b, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x12, 0x30, 0x2e, 0x6d, 0x69, 0x6c, + 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, + 0x61, 0x6c, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x54, 0x69, 0x63, 0x6b, 0x43, 0x68, + 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x6d, + 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x6d, 0x69, 0x6c, 0x76, + 0x75, 0x73, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x22, 0x00, 0x12, 0x71, 0x0a, 0x14, 0x47, 0x65, 0x74, 0x53, 0x74, 0x61, 0x74, 0x69, 0x73, + 0x74, 0x69, 0x63, 0x73, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x12, 0x32, 0x2e, 0x6d, 0x69, + 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, + 0x6e, 0x61, 0x6c, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x74, 0x61, 0x74, 0x69, 0x73, 0x74, 0x69, 0x63, + 0x73, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x23, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x6d, + 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x5c, 0x0a, 0x0f, 0x57, 0x61, 0x74, 0x63, 0x68, 0x44, + 0x6d, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x73, 0x12, 0x2a, 0x2e, 0x6d, 0x69, 0x6c, 0x76, + 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x57, + 0x61, 0x74, 0x63, 0x68, 0x44, 0x6d, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x73, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x53, 0x74, 0x61, 0x74, + 0x75, 0x73, 0x22, 0x00, 0x12, 0x5a, 0x0a, 0x0e, 0x55, 0x6e, 0x73, 0x75, 0x62, 0x44, 0x6d, 0x43, + 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x12, 0x29, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x55, 0x6e, 0x73, 0x75, + 0x62, 0x44, 0x6d, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x1b, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x00, + 0x12, 0x56, 0x0a, 0x0c, 0x4c, 0x6f, 0x61, 0x64, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, + 0x12, 0x27, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, + 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x4c, 0x6f, 0x61, 0x64, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, + 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x6d, 0x69, 0x6c, 0x76, + 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, + 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x00, 0x12, 0x4c, 0x0a, 0x07, 0x50, 0x72, 0x65, 0x77, + 0x61, 0x72, 0x6d, 0x12, 0x22, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x50, 0x72, 0x65, 0x77, 0x61, 0x72, 0x6d, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x53, 0x74, + 0x61, 0x74, 0x75, 0x73, 0x22, 0x00, 0x12, 0x60, 0x0a, 0x11, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, + 0x65, 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2c, 0x2e, 0x6d, 0x69, + 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, + 0x2e, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x6d, 0x69, 0x6c, 0x76, + 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, + 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x00, 0x12, 0x5a, 0x0a, 0x0e, 0x4c, 0x6f, 0x61, 0x64, + 0x50, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x29, 0x2e, 0x6d, 0x69, 0x6c, + 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, + 0x4c, 0x6f, 0x61, 0x64, 0x50, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x53, 0x74, 0x61, 0x74, + 0x75, 0x73, 0x22, 0x00, 0x12, 0x60, 0x0a, 0x11, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x50, + 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x2c, 0x2e, 0x6d, 0x69, 0x6c, 0x76, + 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x52, + 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x50, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x53, 0x74, + 0x61, 0x74, 0x75, 0x73, 0x22, 0x00, 0x12, 0x5c, 0x0a, 0x0f, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, + 0x65, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x2a, 0x2e, 0x6d, 0x69, 0x6c, 0x76, + 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x52, + 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x53, 0x74, 0x61, 0x74, + 0x75, 0x73, 0x22, 0x00, 0x12, 0x69, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x53, 0x65, 0x67, 0x6d, 0x65, + 0x6e, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x29, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x47, 0x65, 0x74, 0x53, + 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x2a, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, + 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, + 0x64, 0x0a, 0x13, 0x53, 0x79, 0x6e, 0x63, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x53, 0x65, + 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x2e, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x53, 0x79, 0x6e, 0x63, + 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x53, 0x74, 0x61, + 0x74, 0x75, 0x73, 0x22, 0x00, 0x12, 0x69, 0x0a, 0x0d, 0x47, 0x65, 0x74, 0x53, 0x74, 0x61, 0x74, + 0x69, 0x73, 0x74, 0x69, 0x63, 0x73, 0x12, 0x28, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x47, 0x65, 0x74, 0x53, + 0x74, 0x61, 0x74, 0x69, 0x73, 0x74, 0x69, 0x63, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x2c, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, + 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x74, 0x61, 0x74, + 0x69, 0x73, 0x74, 0x69, 0x63, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, + 0x12, 0x53, 0x0a, 0x06, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x12, 0x21, 0x2e, 0x6d, 0x69, 0x6c, + 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, + 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, + 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x69, 0x6e, 0x74, + 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x73, 0x75, + 0x6c, 0x74, 0x73, 0x22, 0x00, 0x12, 0x5b, 0x0a, 0x0e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x53, + 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x21, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x53, 0x65, 0x61, + 0x72, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x6d, 0x69, 0x6c, + 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, + 0x61, 0x6c, 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, + 0x22, 0x00, 0x12, 0x53, 0x0a, 0x05, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x20, 0x2e, 0x6d, 0x69, + 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, + 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, + 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x69, 0x6e, 0x74, + 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x52, 0x65, 0x74, 0x72, 0x69, 0x65, 0x76, 0x65, 0x52, 0x65, + 0x73, 0x75, 0x6c, 0x74, 0x73, 0x22, 0x00, 0x12, 0x5b, 0x0a, 0x0b, 0x51, 0x75, 0x65, 0x72, 0x79, + 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x12, 0x20, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x51, 0x75, 0x65, 0x72, + 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, + 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, + 0x2e, 0x52, 0x65, 0x74, 0x72, 0x69, 0x65, 0x76, 0x65, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, + 0x22, 0x00, 0x30, 0x01, 0x12, 0x5b, 0x0a, 0x0d, 0x51, 0x75, 0x65, 0x72, 0x79, 0x53, 0x65, 0x67, + 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x20, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, + 0x52, 0x65, 0x74, 0x72, 0x69, 0x65, 0x76, 0x65, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x22, + 0x00, 0x12, 0x63, 0x0a, 0x13, 0x51, 0x75, 0x65, 0x72, 0x79, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, + 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x20, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, + 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x51, 0x75, + 0x65, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x6d, 0x69, 0x6c, + 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, + 0x61, 0x6c, 0x2e, 0x52, 0x65, 0x74, 0x72, 0x69, 0x65, 0x76, 0x65, 0x52, 0x65, 0x73, 0x75, 0x6c, + 0x74, 0x73, 0x22, 0x00, 0x30, 0x01, 0x12, 0x7b, 0x0a, 0x12, 0x53, 0x68, 0x6f, 0x77, 0x43, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x30, 0x2e, 0x6d, + 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x69, 0x6e, 0x74, 0x65, + 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x53, 0x68, 0x6f, 0x77, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, + 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x31, + 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x69, 0x6e, + 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x53, 0x68, 0x6f, 0x77, 0x43, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x22, 0x00, 0x12, 0x5f, 0x0a, 0x0a, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, + 0x73, 0x12, 0x26, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x74, 0x72, 0x69, + 0x63, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x6d, 0x69, 0x6c, 0x76, + 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, + 0x47, 0x65, 0x74, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x22, 0x00, 0x12, 0x78, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x44, 0x61, 0x74, 0x61, 0x44, + 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2e, 0x2e, 0x6d, 0x69, + 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, + 0x2e, 0x47, 0x65, 0x74, 0x44, 0x61, 0x74, 0x61, 0x44, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, + 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2f, 0x2e, 0x6d, 0x69, + 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, + 0x2e, 0x47, 0x65, 0x74, 0x44, 0x61, 0x74, 0x61, 0x44, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, + 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x5e, + 0x0a, 0x10, 0x53, 0x79, 0x6e, 0x63, 0x44, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, + 0x6f, 0x6e, 0x12, 0x2b, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x53, 0x79, 0x6e, 0x63, 0x44, 0x69, 0x73, 0x74, + 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x1b, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x63, + 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x00, 0x12, 0x4a, + 0x0a, 0x06, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x21, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, + 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x44, 0x65, + 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x6d, 0x69, + 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, + 0x6e, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x00, 0x12, 0x60, 0x0a, 0x0b, 0x44, 0x65, + 0x6c, 0x65, 0x74, 0x65, 0x42, 0x61, 0x74, 0x63, 0x68, 0x12, 0x26, 0x2e, 0x6d, 0x69, 0x6c, 0x76, + 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x44, + 0x65, 0x6c, 0x65, 0x74, 0x65, 0x42, 0x61, 0x74, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x27, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x42, 0x61, 0x74, + 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x56, 0x0a, 0x0c, + 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x12, 0x27, 0x2e, 0x6d, + 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x71, 0x75, 0x65, 0x72, + 0x79, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x53, 0x74, 0x61, 0x74, + 0x75, 0x73, 0x22, 0x00, 0x12, 0x54, 0x0a, 0x0b, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x49, 0x6e, + 0x64, 0x65, 0x78, 0x12, 0x26, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x49, + 0x6e, 0x64, 0x65, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x6d, 0x69, + 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, + 0x6e, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x00, 0x12, 0x61, 0x0a, 0x0b, 0x52, 0x75, + 0x6e, 0x41, 0x6e, 0x61, 0x6c, 0x79, 0x7a, 0x65, 0x72, 0x12, 0x26, 0x2e, 0x6d, 0x69, 0x6c, 0x76, + 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x52, + 0x75, 0x6e, 0x41, 0x6e, 0x61, 0x6c, 0x79, 0x7a, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x28, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x52, 0x75, 0x6e, 0x41, 0x6e, 0x61, 0x6c, 0x79, + 0x7a, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x63, 0x0a, + 0x0c, 0x47, 0x65, 0x74, 0x48, 0x69, 0x67, 0x68, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x12, 0x27, 0x2e, + 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x71, 0x75, 0x65, + 0x72, 0x79, 0x2e, 0x47, 0x65, 0x74, 0x48, 0x69, 0x67, 0x68, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x47, 0x65, 0x74, 0x48, + 0x69, 0x67, 0x68, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x22, 0x00, 0x12, 0x6f, 0x0a, 0x10, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x41, 0x6e, + 0x61, 0x6c, 0x79, 0x7a, 0x65, 0x72, 0x12, 0x2b, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x56, 0x61, 0x6c, 0x69, + 0x64, 0x61, 0x74, 0x65, 0x41, 0x6e, 0x61, 0x6c, 0x79, 0x7a, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x2c, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, + 0x65, 0x41, 0x6e, 0x61, 0x6c, 0x79, 0x7a, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x22, 0x00, 0x12, 0x61, 0x0a, 0x10, 0x53, 0x79, 0x6e, 0x63, 0x46, 0x69, 0x6c, 0x65, 0x52, + 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x2e, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, + 0x53, 0x79, 0x6e, 0x63, 0x46, 0x69, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x53, 0x74, + 0x61, 0x74, 0x75, 0x73, 0x22, 0x00, 0x12, 0x7b, 0x0a, 0x12, 0x43, 0x6c, 0x65, 0x61, 0x72, 0x52, + 0x65, 0x61, 0x64, 0x54, 0x61, 0x73, 0x6b, 0x51, 0x75, 0x65, 0x75, 0x65, 0x12, 0x30, 0x2e, 0x6d, + 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x69, 0x6e, 0x74, 0x65, + 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x43, 0x6c, 0x65, 0x61, 0x72, 0x52, 0x65, 0x61, 0x64, 0x54, 0x61, + 0x73, 0x6b, 0x51, 0x75, 0x65, 0x75, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x31, + 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x69, 0x6e, + 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x43, 0x6c, 0x65, 0x61, 0x72, 0x52, 0x65, 0x61, 0x64, + 0x54, 0x61, 0x73, 0x6b, 0x51, 0x75, 0x65, 0x75, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x22, 0x00, 0x12, 0x81, 0x01, 0x0a, 0x16, 0x43, 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x65, 0x50, + 0x68, 0x72, 0x61, 0x73, 0x65, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x53, 0x6c, 0x6f, 0x70, 0x12, 0x31, + 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x71, 0x75, + 0x65, 0x72, 0x79, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x65, 0x50, 0x68, 0x72, 0x61, 0x73, + 0x65, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x53, 0x6c, 0x6f, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x32, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x65, 0x50, 0x68, + 0x72, 0x61, 0x73, 0x65, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x53, 0x6c, 0x6f, 0x70, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x42, 0x32, 0x5a, 0x30, 0x67, 0x69, 0x74, 0x68, 0x75, + 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2d, 0x69, 0x6f, 0x2f, + 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2f, 0x70, 0x6b, 0x67, 0x2f, 0x76, 0x33, 0x2f, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x2f, 0x71, 0x75, 0x65, 0x72, 0x79, 0x70, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x33, } var ( @@ -12520,7 +12611,7 @@ func file_query_coord_proto_rawDescGZIP() []byte { } var file_query_coord_proto_enumTypes = make([]protoimpl.EnumInfo, 9) -var file_query_coord_proto_msgTypes = make([]protoimpl.MessageInfo, 142) +var file_query_coord_proto_msgTypes = make([]protoimpl.MessageInfo, 143) var file_query_coord_proto_goTypes = []interface{}{ (PrewarmTaskState)(0), // 0: milvus.proto.query.PrewarmTaskState (LoadScope)(0), // 1: milvus.proto.query.LoadScope @@ -12649,465 +12740,469 @@ var file_query_coord_proto_goTypes = []interface{}{ (*GetHighlightResponse)(nil), // 124: milvus.proto.query.GetHighlightResponse (*ListLoadedSegmentsRequest)(nil), // 125: milvus.proto.query.ListLoadedSegmentsRequest (*ListLoadedSegmentsResponse)(nil), // 126: milvus.proto.query.ListLoadedSegmentsResponse - nil, // 127: milvus.proto.query.LoadCollectionRequest.FieldIndexIDEntry - nil, // 128: milvus.proto.query.LoadPartitionsRequest.FieldIndexIDEntry - nil, // 129: milvus.proto.query.UpdateResourceGroupsRequest.ResourceGroupsEntry - nil, // 130: milvus.proto.query.WatchDmChannelsRequest.SegmentInfosEntry - nil, // 131: milvus.proto.query.WatchDmChannelsRequest.SealedSegmentRowCountEntry - nil, // 132: milvus.proto.query.SegmentLoadInfo.TextStatsLogsEntry - nil, // 133: milvus.proto.query.SegmentLoadInfo.JsonKeyStatsLogsEntry - nil, // 134: milvus.proto.query.GetDataDistributionRequest.CheckpointsEntry - nil, // 135: milvus.proto.query.LeaderView.SegmentDistEntry - nil, // 136: milvus.proto.query.LeaderView.GrowingSegmentsEntry - nil, // 137: milvus.proto.query.LeaderView.PartitionStatsVersionsEntry - nil, // 138: milvus.proto.query.SegmentVersionInfo.IndexInfoEntry - nil, // 139: milvus.proto.query.SegmentVersionInfo.JsonStatsInfoEntry - nil, // 140: milvus.proto.query.CollectionLoadInfo.FieldIndexIDEntry - nil, // 141: milvus.proto.query.PartitionLoadInfo.FieldIndexIDEntry - nil, // 142: milvus.proto.query.Replica.ChannelNodeInfosEntry - nil, // 143: milvus.proto.query.SyncAction.PartitionStatsVersionsEntry - nil, // 144: milvus.proto.query.SyncAction.SealedSegmentRowCountEntry - nil, // 145: milvus.proto.query.ResourceGroupInfo.NumLoadedReplicaEntry - nil, // 146: milvus.proto.query.ResourceGroupInfo.NumOutgoingNodeEntry - nil, // 147: milvus.proto.query.ResourceGroupInfo.NumIncomingNodeEntry - (*UpdateIndexRequest_AddIndex)(nil), // 148: milvus.proto.query.UpdateIndexRequest.AddIndex - (*UpdateIndexRequest_DropIndex)(nil), // 149: milvus.proto.query.UpdateIndexRequest.DropIndex - (*UpdateIndexRequest_Action)(nil), // 150: milvus.proto.query.UpdateIndexRequest.Action - (*commonpb.MsgBase)(nil), // 151: milvus.proto.common.MsgBase - (*commonpb.Status)(nil), // 152: milvus.proto.common.Status - (*schemapb.LongArray)(nil), // 153: milvus.proto.schema.LongArray - (*schemapb.CollectionSchema)(nil), // 154: milvus.proto.schema.CollectionSchema - (commonpb.LoadPriority)(0), // 155: milvus.proto.common.LoadPriority - (*internalpb.GetStatisticsRequest)(nil), // 156: milvus.proto.internal.GetStatisticsRequest - (*indexpb.IndexInfo)(nil), // 157: milvus.proto.index.IndexInfo - (*messagespb.LoadFieldConfig)(nil), // 158: milvus.proto.messages.LoadFieldConfig - (*commonpb.KeyValuePair)(nil), // 159: milvus.proto.common.KeyValuePair - (*datapb.VchannelInfo)(nil), // 160: milvus.proto.data.VchannelInfo - (*datapb.SegmentInfo)(nil), // 161: milvus.proto.data.SegmentInfo - (*datapb.FieldBinlog)(nil), // 162: milvus.proto.data.FieldBinlog - (*msgpb.MsgPosition)(nil), // 163: milvus.proto.msg.MsgPosition - (datapb.SegmentLevel)(0), // 164: milvus.proto.data.SegmentLevel - (*datapb.Statistics)(nil), // 165: milvus.proto.data.Statistics - (indexpb.IndexStorePathVersion)(0), // 166: milvus.proto.index.IndexStorePathVersion - (*internalpb.SearchRequest)(nil), // 167: milvus.proto.internal.SearchRequest - (*internalpb.RetrieveRequest)(nil), // 168: milvus.proto.internal.RetrieveRequest - (commonpb.SegmentState)(0), // 169: milvus.proto.common.SegmentState - (*rgpb.ResourceGroupConfig)(nil), // 170: milvus.proto.rg.ResourceGroupConfig - (*commonpb.NodeInfo)(nil), // 171: milvus.proto.common.NodeInfo - (*schemapb.IDs)(nil), // 172: milvus.proto.schema.IDs - (*datapb.TextIndexStats)(nil), // 173: milvus.proto.data.TextIndexStats - (*datapb.JsonKeyStats)(nil), // 174: milvus.proto.data.JsonKeyStats - (*internalpb.ShowConfigurationsRequest)(nil), // 175: milvus.proto.internal.ShowConfigurationsRequest - (*milvuspb.GetMetricsRequest)(nil), // 176: milvus.proto.milvus.GetMetricsRequest - (*milvuspb.GetReplicasRequest)(nil), // 177: milvus.proto.milvus.GetReplicasRequest - (*milvuspb.CheckHealthRequest)(nil), // 178: milvus.proto.milvus.CheckHealthRequest - (*milvuspb.CreateResourceGroupRequest)(nil), // 179: milvus.proto.milvus.CreateResourceGroupRequest - (*milvuspb.DropResourceGroupRequest)(nil), // 180: milvus.proto.milvus.DropResourceGroupRequest - (*milvuspb.TransferNodeRequest)(nil), // 181: milvus.proto.milvus.TransferNodeRequest - (*milvuspb.ListResourceGroupsRequest)(nil), // 182: milvus.proto.milvus.ListResourceGroupsRequest - (*internalpb.ClearReadTaskQueueRequest)(nil), // 183: milvus.proto.internal.ClearReadTaskQueueRequest - (*milvuspb.GetComponentStatesRequest)(nil), // 184: milvus.proto.milvus.GetComponentStatesRequest - (*internalpb.GetTimeTickChannelRequest)(nil), // 185: milvus.proto.internal.GetTimeTickChannelRequest - (*internalpb.GetStatisticsChannelRequest)(nil), // 186: milvus.proto.internal.GetStatisticsChannelRequest - (*internalpb.SyncFileResourceRequest)(nil), // 187: milvus.proto.internal.SyncFileResourceRequest - (*internalpb.ShowConfigurationsResponse)(nil), // 188: milvus.proto.internal.ShowConfigurationsResponse - (*milvuspb.GetMetricsResponse)(nil), // 189: milvus.proto.milvus.GetMetricsResponse - (*milvuspb.GetReplicasResponse)(nil), // 190: milvus.proto.milvus.GetReplicasResponse - (*milvuspb.CheckHealthResponse)(nil), // 191: milvus.proto.milvus.CheckHealthResponse - (*milvuspb.ListResourceGroupsResponse)(nil), // 192: milvus.proto.milvus.ListResourceGroupsResponse - (*internalpb.ClearReadTaskQueueResponse)(nil), // 193: milvus.proto.internal.ClearReadTaskQueueResponse - (*milvuspb.RunAnalyzerResponse)(nil), // 194: milvus.proto.milvus.RunAnalyzerResponse - (*milvuspb.ComponentStates)(nil), // 195: milvus.proto.milvus.ComponentStates - (*milvuspb.StringResponse)(nil), // 196: milvus.proto.milvus.StringResponse - (*internalpb.GetStatisticsResponse)(nil), // 197: milvus.proto.internal.GetStatisticsResponse - (*internalpb.SearchResults)(nil), // 198: milvus.proto.internal.SearchResults - (*internalpb.RetrieveResults)(nil), // 199: milvus.proto.internal.RetrieveResults + (*WaitCollectionReadyRequest)(nil), // 127: milvus.proto.query.WaitCollectionReadyRequest + nil, // 128: milvus.proto.query.LoadCollectionRequest.FieldIndexIDEntry + nil, // 129: milvus.proto.query.LoadPartitionsRequest.FieldIndexIDEntry + nil, // 130: milvus.proto.query.UpdateResourceGroupsRequest.ResourceGroupsEntry + nil, // 131: milvus.proto.query.WatchDmChannelsRequest.SegmentInfosEntry + nil, // 132: milvus.proto.query.WatchDmChannelsRequest.SealedSegmentRowCountEntry + nil, // 133: milvus.proto.query.SegmentLoadInfo.TextStatsLogsEntry + nil, // 134: milvus.proto.query.SegmentLoadInfo.JsonKeyStatsLogsEntry + nil, // 135: milvus.proto.query.GetDataDistributionRequest.CheckpointsEntry + nil, // 136: milvus.proto.query.LeaderView.SegmentDistEntry + nil, // 137: milvus.proto.query.LeaderView.GrowingSegmentsEntry + nil, // 138: milvus.proto.query.LeaderView.PartitionStatsVersionsEntry + nil, // 139: milvus.proto.query.SegmentVersionInfo.IndexInfoEntry + nil, // 140: milvus.proto.query.SegmentVersionInfo.JsonStatsInfoEntry + nil, // 141: milvus.proto.query.CollectionLoadInfo.FieldIndexIDEntry + nil, // 142: milvus.proto.query.PartitionLoadInfo.FieldIndexIDEntry + nil, // 143: milvus.proto.query.Replica.ChannelNodeInfosEntry + nil, // 144: milvus.proto.query.SyncAction.PartitionStatsVersionsEntry + nil, // 145: milvus.proto.query.SyncAction.SealedSegmentRowCountEntry + nil, // 146: milvus.proto.query.ResourceGroupInfo.NumLoadedReplicaEntry + nil, // 147: milvus.proto.query.ResourceGroupInfo.NumOutgoingNodeEntry + nil, // 148: milvus.proto.query.ResourceGroupInfo.NumIncomingNodeEntry + (*UpdateIndexRequest_AddIndex)(nil), // 149: milvus.proto.query.UpdateIndexRequest.AddIndex + (*UpdateIndexRequest_DropIndex)(nil), // 150: milvus.proto.query.UpdateIndexRequest.DropIndex + (*UpdateIndexRequest_Action)(nil), // 151: milvus.proto.query.UpdateIndexRequest.Action + (*commonpb.MsgBase)(nil), // 152: milvus.proto.common.MsgBase + (*commonpb.Status)(nil), // 153: milvus.proto.common.Status + (*schemapb.LongArray)(nil), // 154: milvus.proto.schema.LongArray + (*schemapb.CollectionSchema)(nil), // 155: milvus.proto.schema.CollectionSchema + (commonpb.LoadPriority)(0), // 156: milvus.proto.common.LoadPriority + (*internalpb.GetStatisticsRequest)(nil), // 157: milvus.proto.internal.GetStatisticsRequest + (*indexpb.IndexInfo)(nil), // 158: milvus.proto.index.IndexInfo + (*messagespb.LoadFieldConfig)(nil), // 159: milvus.proto.messages.LoadFieldConfig + (*commonpb.KeyValuePair)(nil), // 160: milvus.proto.common.KeyValuePair + (*datapb.VchannelInfo)(nil), // 161: milvus.proto.data.VchannelInfo + (*datapb.SegmentInfo)(nil), // 162: milvus.proto.data.SegmentInfo + (*datapb.FieldBinlog)(nil), // 163: milvus.proto.data.FieldBinlog + (*msgpb.MsgPosition)(nil), // 164: milvus.proto.msg.MsgPosition + (datapb.SegmentLevel)(0), // 165: milvus.proto.data.SegmentLevel + (*datapb.Statistics)(nil), // 166: milvus.proto.data.Statistics + (indexpb.IndexStorePathVersion)(0), // 167: milvus.proto.index.IndexStorePathVersion + (*internalpb.SearchRequest)(nil), // 168: milvus.proto.internal.SearchRequest + (*internalpb.RetrieveRequest)(nil), // 169: milvus.proto.internal.RetrieveRequest + (commonpb.SegmentState)(0), // 170: milvus.proto.common.SegmentState + (*rgpb.ResourceGroupConfig)(nil), // 171: milvus.proto.rg.ResourceGroupConfig + (*commonpb.NodeInfo)(nil), // 172: milvus.proto.common.NodeInfo + (*schemapb.IDs)(nil), // 173: milvus.proto.schema.IDs + (*datapb.TextIndexStats)(nil), // 174: milvus.proto.data.TextIndexStats + (*datapb.JsonKeyStats)(nil), // 175: milvus.proto.data.JsonKeyStats + (*internalpb.ShowConfigurationsRequest)(nil), // 176: milvus.proto.internal.ShowConfigurationsRequest + (*milvuspb.GetMetricsRequest)(nil), // 177: milvus.proto.milvus.GetMetricsRequest + (*milvuspb.GetReplicasRequest)(nil), // 178: milvus.proto.milvus.GetReplicasRequest + (*milvuspb.CheckHealthRequest)(nil), // 179: milvus.proto.milvus.CheckHealthRequest + (*milvuspb.CreateResourceGroupRequest)(nil), // 180: milvus.proto.milvus.CreateResourceGroupRequest + (*milvuspb.DropResourceGroupRequest)(nil), // 181: milvus.proto.milvus.DropResourceGroupRequest + (*milvuspb.TransferNodeRequest)(nil), // 182: milvus.proto.milvus.TransferNodeRequest + (*milvuspb.ListResourceGroupsRequest)(nil), // 183: milvus.proto.milvus.ListResourceGroupsRequest + (*internalpb.ClearReadTaskQueueRequest)(nil), // 184: milvus.proto.internal.ClearReadTaskQueueRequest + (*milvuspb.GetComponentStatesRequest)(nil), // 185: milvus.proto.milvus.GetComponentStatesRequest + (*internalpb.GetTimeTickChannelRequest)(nil), // 186: milvus.proto.internal.GetTimeTickChannelRequest + (*internalpb.GetStatisticsChannelRequest)(nil), // 187: milvus.proto.internal.GetStatisticsChannelRequest + (*internalpb.SyncFileResourceRequest)(nil), // 188: milvus.proto.internal.SyncFileResourceRequest + (*internalpb.ShowConfigurationsResponse)(nil), // 189: milvus.proto.internal.ShowConfigurationsResponse + (*milvuspb.GetMetricsResponse)(nil), // 190: milvus.proto.milvus.GetMetricsResponse + (*milvuspb.GetReplicasResponse)(nil), // 191: milvus.proto.milvus.GetReplicasResponse + (*milvuspb.CheckHealthResponse)(nil), // 192: milvus.proto.milvus.CheckHealthResponse + (*milvuspb.ListResourceGroupsResponse)(nil), // 193: milvus.proto.milvus.ListResourceGroupsResponse + (*internalpb.ClearReadTaskQueueResponse)(nil), // 194: milvus.proto.internal.ClearReadTaskQueueResponse + (*milvuspb.RunAnalyzerResponse)(nil), // 195: milvus.proto.milvus.RunAnalyzerResponse + (*milvuspb.ComponentStates)(nil), // 196: milvus.proto.milvus.ComponentStates + (*milvuspb.StringResponse)(nil), // 197: milvus.proto.milvus.StringResponse + (*internalpb.GetStatisticsResponse)(nil), // 198: milvus.proto.internal.GetStatisticsResponse + (*internalpb.SearchResults)(nil), // 199: milvus.proto.internal.SearchResults + (*internalpb.RetrieveResults)(nil), // 200: milvus.proto.internal.RetrieveResults } var file_query_coord_proto_depIdxs = []int32{ - 151, // 0: milvus.proto.query.ComputePhraseMatchSlopRequest.base:type_name -> milvus.proto.common.MsgBase - 152, // 1: milvus.proto.query.ComputePhraseMatchSlopResponse.status:type_name -> milvus.proto.common.Status - 151, // 2: milvus.proto.query.ShowCollectionsRequest.base:type_name -> milvus.proto.common.MsgBase - 152, // 3: milvus.proto.query.ShowCollectionsResponse.status:type_name -> milvus.proto.common.Status - 153, // 4: milvus.proto.query.ShowCollectionsResponse.load_fields:type_name -> milvus.proto.schema.LongArray - 151, // 5: milvus.proto.query.ShowPartitionsRequest.base:type_name -> milvus.proto.common.MsgBase - 152, // 6: milvus.proto.query.ShowPartitionsResponse.status:type_name -> milvus.proto.common.Status - 151, // 7: milvus.proto.query.LoadCollectionRequest.base:type_name -> milvus.proto.common.MsgBase - 154, // 8: milvus.proto.query.LoadCollectionRequest.schema:type_name -> milvus.proto.schema.CollectionSchema - 127, // 9: milvus.proto.query.LoadCollectionRequest.field_indexID:type_name -> milvus.proto.query.LoadCollectionRequest.FieldIndexIDEntry - 155, // 10: milvus.proto.query.LoadCollectionRequest.priority:type_name -> milvus.proto.common.LoadPriority - 151, // 11: milvus.proto.query.ReleaseCollectionRequest.base:type_name -> milvus.proto.common.MsgBase - 156, // 12: milvus.proto.query.GetStatisticsRequest.req:type_name -> milvus.proto.internal.GetStatisticsRequest + 152, // 0: milvus.proto.query.ComputePhraseMatchSlopRequest.base:type_name -> milvus.proto.common.MsgBase + 153, // 1: milvus.proto.query.ComputePhraseMatchSlopResponse.status:type_name -> milvus.proto.common.Status + 152, // 2: milvus.proto.query.ShowCollectionsRequest.base:type_name -> milvus.proto.common.MsgBase + 153, // 3: milvus.proto.query.ShowCollectionsResponse.status:type_name -> milvus.proto.common.Status + 154, // 4: milvus.proto.query.ShowCollectionsResponse.load_fields:type_name -> milvus.proto.schema.LongArray + 152, // 5: milvus.proto.query.ShowPartitionsRequest.base:type_name -> milvus.proto.common.MsgBase + 153, // 6: milvus.proto.query.ShowPartitionsResponse.status:type_name -> milvus.proto.common.Status + 152, // 7: milvus.proto.query.LoadCollectionRequest.base:type_name -> milvus.proto.common.MsgBase + 155, // 8: milvus.proto.query.LoadCollectionRequest.schema:type_name -> milvus.proto.schema.CollectionSchema + 128, // 9: milvus.proto.query.LoadCollectionRequest.field_indexID:type_name -> milvus.proto.query.LoadCollectionRequest.FieldIndexIDEntry + 156, // 10: milvus.proto.query.LoadCollectionRequest.priority:type_name -> milvus.proto.common.LoadPriority + 152, // 11: milvus.proto.query.ReleaseCollectionRequest.base:type_name -> milvus.proto.common.MsgBase + 157, // 12: milvus.proto.query.GetStatisticsRequest.req:type_name -> milvus.proto.internal.GetStatisticsRequest 2, // 13: milvus.proto.query.GetStatisticsRequest.scope:type_name -> milvus.proto.query.DataScope - 151, // 14: milvus.proto.query.LoadPartitionsRequest.base:type_name -> milvus.proto.common.MsgBase - 154, // 15: milvus.proto.query.LoadPartitionsRequest.schema:type_name -> milvus.proto.schema.CollectionSchema - 128, // 16: milvus.proto.query.LoadPartitionsRequest.field_indexID:type_name -> milvus.proto.query.LoadPartitionsRequest.FieldIndexIDEntry - 157, // 17: milvus.proto.query.LoadPartitionsRequest.index_info_list:type_name -> milvus.proto.index.IndexInfo - 155, // 18: milvus.proto.query.LoadPartitionsRequest.priority:type_name -> milvus.proto.common.LoadPriority - 151, // 19: milvus.proto.query.PrewarmRequest.base:type_name -> milvus.proto.common.MsgBase - 154, // 20: milvus.proto.query.PrewarmRequest.schema:type_name -> milvus.proto.schema.CollectionSchema - 155, // 21: milvus.proto.query.PrewarmRequest.priority:type_name -> milvus.proto.common.LoadPriority - 152, // 22: milvus.proto.query.PrewarmResponse.status:type_name -> milvus.proto.common.Status - 151, // 23: milvus.proto.query.DescribePrewarmTaskRequest.base:type_name -> milvus.proto.common.MsgBase - 152, // 24: milvus.proto.query.DescribePrewarmTaskResponse.status:type_name -> milvus.proto.common.Status + 152, // 14: milvus.proto.query.LoadPartitionsRequest.base:type_name -> milvus.proto.common.MsgBase + 155, // 15: milvus.proto.query.LoadPartitionsRequest.schema:type_name -> milvus.proto.schema.CollectionSchema + 129, // 16: milvus.proto.query.LoadPartitionsRequest.field_indexID:type_name -> milvus.proto.query.LoadPartitionsRequest.FieldIndexIDEntry + 158, // 17: milvus.proto.query.LoadPartitionsRequest.index_info_list:type_name -> milvus.proto.index.IndexInfo + 156, // 18: milvus.proto.query.LoadPartitionsRequest.priority:type_name -> milvus.proto.common.LoadPriority + 152, // 19: milvus.proto.query.PrewarmRequest.base:type_name -> milvus.proto.common.MsgBase + 155, // 20: milvus.proto.query.PrewarmRequest.schema:type_name -> milvus.proto.schema.CollectionSchema + 156, // 21: milvus.proto.query.PrewarmRequest.priority:type_name -> milvus.proto.common.LoadPriority + 153, // 22: milvus.proto.query.PrewarmResponse.status:type_name -> milvus.proto.common.Status + 152, // 23: milvus.proto.query.DescribePrewarmTaskRequest.base:type_name -> milvus.proto.common.MsgBase + 153, // 24: milvus.proto.query.DescribePrewarmTaskResponse.status:type_name -> milvus.proto.common.Status 0, // 25: milvus.proto.query.DescribePrewarmTaskResponse.state:type_name -> milvus.proto.query.PrewarmTaskState - 151, // 26: milvus.proto.query.ReleasePartitionsRequest.base:type_name -> milvus.proto.common.MsgBase - 151, // 27: milvus.proto.query.GetPartitionStatesRequest.base:type_name -> milvus.proto.common.MsgBase - 152, // 28: milvus.proto.query.GetPartitionStatesResponse.status:type_name -> milvus.proto.common.Status + 152, // 26: milvus.proto.query.ReleasePartitionsRequest.base:type_name -> milvus.proto.common.MsgBase + 152, // 27: milvus.proto.query.GetPartitionStatesRequest.base:type_name -> milvus.proto.common.MsgBase + 153, // 28: milvus.proto.query.GetPartitionStatesResponse.status:type_name -> milvus.proto.common.Status 59, // 29: milvus.proto.query.GetPartitionStatesResponse.partition_descriptions:type_name -> milvus.proto.query.PartitionStates - 151, // 30: milvus.proto.query.GetSegmentInfoRequest.base:type_name -> milvus.proto.common.MsgBase - 152, // 31: milvus.proto.query.GetSegmentInfoResponse.status:type_name -> milvus.proto.common.Status + 152, // 30: milvus.proto.query.GetSegmentInfoRequest.base:type_name -> milvus.proto.common.MsgBase + 153, // 31: milvus.proto.query.GetSegmentInfoResponse.status:type_name -> milvus.proto.common.Status 60, // 32: milvus.proto.query.GetSegmentInfoResponse.infos:type_name -> milvus.proto.query.SegmentInfo - 151, // 33: milvus.proto.query.GetQueryViewLoadInfoRequest.base:type_name -> milvus.proto.common.MsgBase - 152, // 34: milvus.proto.query.GetQueryViewLoadInfoResponse.status:type_name -> milvus.proto.common.Status - 158, // 35: milvus.proto.query.GetQueryViewLoadInfoResponse.load_fields:type_name -> milvus.proto.messages.LoadFieldConfig - 157, // 36: milvus.proto.query.GetQueryViewLoadInfoResponse.index_info_list:type_name -> milvus.proto.index.IndexInfo + 152, // 33: milvus.proto.query.GetQueryViewLoadInfoRequest.base:type_name -> milvus.proto.common.MsgBase + 153, // 34: milvus.proto.query.GetQueryViewLoadInfoResponse.status:type_name -> milvus.proto.common.Status + 159, // 35: milvus.proto.query.GetQueryViewLoadInfoResponse.load_fields:type_name -> milvus.proto.messages.LoadFieldConfig + 158, // 36: milvus.proto.query.GetQueryViewLoadInfoResponse.index_info_list:type_name -> milvus.proto.index.IndexInfo 30, // 37: milvus.proto.query.WatchQueryViewSegmentLoadInfoSubscription.revision:type_name -> milvus.proto.query.QueryViewSegmentLoadInfoRevision - 151, // 38: milvus.proto.query.WatchQueryViewSegmentLoadInfoRequest.base:type_name -> milvus.proto.common.MsgBase + 152, // 38: milvus.proto.query.WatchQueryViewSegmentLoadInfoRequest.base:type_name -> milvus.proto.common.MsgBase 31, // 39: milvus.proto.query.WatchQueryViewSegmentLoadInfoRequest.subscribe:type_name -> milvus.proto.query.WatchQueryViewSegmentLoadInfoSubscription 32, // 40: milvus.proto.query.WatchQueryViewSegmentLoadInfoRequest.unsubscribe:type_name -> milvus.proto.query.WatchQueryViewSegmentLoadInfoUnsubscription 30, // 41: milvus.proto.query.QueryViewSegmentLoadInfoSnapshot.revision:type_name -> milvus.proto.query.QueryViewSegmentLoadInfoRevision 44, // 42: milvus.proto.query.QueryViewSegmentLoadInfoSnapshot.load_info:type_name -> milvus.proto.query.SegmentLoadInfo - 157, // 43: milvus.proto.query.QueryViewSegmentLoadInfoSnapshot.index_info_list:type_name -> milvus.proto.index.IndexInfo - 152, // 44: milvus.proto.query.WatchQueryViewSegmentLoadInfoResponse.status:type_name -> milvus.proto.common.Status + 158, // 43: milvus.proto.query.QueryViewSegmentLoadInfoSnapshot.index_info_list:type_name -> milvus.proto.index.IndexInfo + 153, // 44: milvus.proto.query.WatchQueryViewSegmentLoadInfoResponse.status:type_name -> milvus.proto.common.Status 34, // 45: milvus.proto.query.WatchQueryViewSegmentLoadInfoResponse.snapshots:type_name -> milvus.proto.query.QueryViewSegmentLoadInfoSnapshot - 151, // 46: milvus.proto.query.GetShardLeadersRequest.base:type_name -> milvus.proto.common.MsgBase - 152, // 47: milvus.proto.query.GetShardLeadersResponse.status:type_name -> milvus.proto.common.Status + 152, // 46: milvus.proto.query.GetShardLeadersRequest.base:type_name -> milvus.proto.common.MsgBase + 153, // 47: milvus.proto.query.GetShardLeadersResponse.status:type_name -> milvus.proto.common.Status 39, // 48: milvus.proto.query.GetShardLeadersResponse.shards:type_name -> milvus.proto.query.ShardLeadersList - 151, // 49: milvus.proto.query.UpdateResourceGroupsRequest.base:type_name -> milvus.proto.common.MsgBase - 129, // 50: milvus.proto.query.UpdateResourceGroupsRequest.resource_groups:type_name -> milvus.proto.query.UpdateResourceGroupsRequest.ResourceGroupsEntry - 151, // 51: milvus.proto.query.SyncNewCreatedPartitionRequest.base:type_name -> milvus.proto.common.MsgBase + 152, // 49: milvus.proto.query.UpdateResourceGroupsRequest.base:type_name -> milvus.proto.common.MsgBase + 130, // 50: milvus.proto.query.UpdateResourceGroupsRequest.resource_groups:type_name -> milvus.proto.query.UpdateResourceGroupsRequest.ResourceGroupsEntry + 152, // 51: milvus.proto.query.SyncNewCreatedPartitionRequest.base:type_name -> milvus.proto.common.MsgBase 5, // 52: milvus.proto.query.LoadMetaInfo.load_type:type_name -> milvus.proto.query.LoadType - 159, // 53: milvus.proto.query.LoadMetaInfo.db_properties:type_name -> milvus.proto.common.KeyValuePair - 151, // 54: milvus.proto.query.WatchDmChannelsRequest.base:type_name -> milvus.proto.common.MsgBase - 160, // 55: milvus.proto.query.WatchDmChannelsRequest.infos:type_name -> milvus.proto.data.VchannelInfo - 154, // 56: milvus.proto.query.WatchDmChannelsRequest.schema:type_name -> milvus.proto.schema.CollectionSchema - 161, // 57: milvus.proto.query.WatchDmChannelsRequest.exclude_infos:type_name -> milvus.proto.data.SegmentInfo + 160, // 53: milvus.proto.query.LoadMetaInfo.db_properties:type_name -> milvus.proto.common.KeyValuePair + 152, // 54: milvus.proto.query.WatchDmChannelsRequest.base:type_name -> milvus.proto.common.MsgBase + 161, // 55: milvus.proto.query.WatchDmChannelsRequest.infos:type_name -> milvus.proto.data.VchannelInfo + 155, // 56: milvus.proto.query.WatchDmChannelsRequest.schema:type_name -> milvus.proto.schema.CollectionSchema + 162, // 57: milvus.proto.query.WatchDmChannelsRequest.exclude_infos:type_name -> milvus.proto.data.SegmentInfo 41, // 58: milvus.proto.query.WatchDmChannelsRequest.load_meta:type_name -> milvus.proto.query.LoadMetaInfo - 130, // 59: milvus.proto.query.WatchDmChannelsRequest.segment_infos:type_name -> milvus.proto.query.WatchDmChannelsRequest.SegmentInfosEntry - 157, // 60: milvus.proto.query.WatchDmChannelsRequest.index_info_list:type_name -> milvus.proto.index.IndexInfo - 131, // 61: milvus.proto.query.WatchDmChannelsRequest.sealed_segment_row_count:type_name -> milvus.proto.query.WatchDmChannelsRequest.SealedSegmentRowCountEntry - 151, // 62: milvus.proto.query.UnsubDmChannelRequest.base:type_name -> milvus.proto.common.MsgBase - 162, // 63: milvus.proto.query.SegmentLoadInfo.binlog_paths:type_name -> milvus.proto.data.FieldBinlog - 162, // 64: milvus.proto.query.SegmentLoadInfo.statslogs:type_name -> milvus.proto.data.FieldBinlog - 162, // 65: milvus.proto.query.SegmentLoadInfo.deltalogs:type_name -> milvus.proto.data.FieldBinlog + 131, // 59: milvus.proto.query.WatchDmChannelsRequest.segment_infos:type_name -> milvus.proto.query.WatchDmChannelsRequest.SegmentInfosEntry + 158, // 60: milvus.proto.query.WatchDmChannelsRequest.index_info_list:type_name -> milvus.proto.index.IndexInfo + 132, // 61: milvus.proto.query.WatchDmChannelsRequest.sealed_segment_row_count:type_name -> milvus.proto.query.WatchDmChannelsRequest.SealedSegmentRowCountEntry + 152, // 62: milvus.proto.query.UnsubDmChannelRequest.base:type_name -> milvus.proto.common.MsgBase + 163, // 63: milvus.proto.query.SegmentLoadInfo.binlog_paths:type_name -> milvus.proto.data.FieldBinlog + 163, // 64: milvus.proto.query.SegmentLoadInfo.statslogs:type_name -> milvus.proto.data.FieldBinlog + 163, // 65: milvus.proto.query.SegmentLoadInfo.deltalogs:type_name -> milvus.proto.data.FieldBinlog 45, // 66: milvus.proto.query.SegmentLoadInfo.index_infos:type_name -> milvus.proto.query.FieldIndexInfo - 163, // 67: milvus.proto.query.SegmentLoadInfo.start_position:type_name -> milvus.proto.msg.MsgPosition - 163, // 68: milvus.proto.query.SegmentLoadInfo.delta_position:type_name -> milvus.proto.msg.MsgPosition - 164, // 69: milvus.proto.query.SegmentLoadInfo.level:type_name -> milvus.proto.data.SegmentLevel - 132, // 70: milvus.proto.query.SegmentLoadInfo.textStatsLogs:type_name -> milvus.proto.query.SegmentLoadInfo.TextStatsLogsEntry - 162, // 71: milvus.proto.query.SegmentLoadInfo.bm25logs:type_name -> milvus.proto.data.FieldBinlog - 133, // 72: milvus.proto.query.SegmentLoadInfo.jsonKeyStatsLogs:type_name -> milvus.proto.query.SegmentLoadInfo.JsonKeyStatsLogsEntry - 155, // 73: milvus.proto.query.SegmentLoadInfo.priority:type_name -> milvus.proto.common.LoadPriority - 165, // 74: milvus.proto.query.SegmentLoadInfo.stats:type_name -> milvus.proto.data.Statistics - 159, // 75: milvus.proto.query.FieldIndexInfo.index_params:type_name -> milvus.proto.common.KeyValuePair - 166, // 76: milvus.proto.query.FieldIndexInfo.index_store_path_version:type_name -> milvus.proto.index.IndexStorePathVersion - 151, // 77: milvus.proto.query.LoadSegmentsRequest.base:type_name -> milvus.proto.common.MsgBase + 164, // 67: milvus.proto.query.SegmentLoadInfo.start_position:type_name -> milvus.proto.msg.MsgPosition + 164, // 68: milvus.proto.query.SegmentLoadInfo.delta_position:type_name -> milvus.proto.msg.MsgPosition + 165, // 69: milvus.proto.query.SegmentLoadInfo.level:type_name -> milvus.proto.data.SegmentLevel + 133, // 70: milvus.proto.query.SegmentLoadInfo.textStatsLogs:type_name -> milvus.proto.query.SegmentLoadInfo.TextStatsLogsEntry + 163, // 71: milvus.proto.query.SegmentLoadInfo.bm25logs:type_name -> milvus.proto.data.FieldBinlog + 134, // 72: milvus.proto.query.SegmentLoadInfo.jsonKeyStatsLogs:type_name -> milvus.proto.query.SegmentLoadInfo.JsonKeyStatsLogsEntry + 156, // 73: milvus.proto.query.SegmentLoadInfo.priority:type_name -> milvus.proto.common.LoadPriority + 166, // 74: milvus.proto.query.SegmentLoadInfo.stats:type_name -> milvus.proto.data.Statistics + 160, // 75: milvus.proto.query.FieldIndexInfo.index_params:type_name -> milvus.proto.common.KeyValuePair + 167, // 76: milvus.proto.query.FieldIndexInfo.index_store_path_version:type_name -> milvus.proto.index.IndexStorePathVersion + 152, // 77: milvus.proto.query.LoadSegmentsRequest.base:type_name -> milvus.proto.common.MsgBase 44, // 78: milvus.proto.query.LoadSegmentsRequest.infos:type_name -> milvus.proto.query.SegmentLoadInfo - 154, // 79: milvus.proto.query.LoadSegmentsRequest.schema:type_name -> milvus.proto.schema.CollectionSchema + 155, // 79: milvus.proto.query.LoadSegmentsRequest.schema:type_name -> milvus.proto.schema.CollectionSchema 41, // 80: milvus.proto.query.LoadSegmentsRequest.load_meta:type_name -> milvus.proto.query.LoadMetaInfo - 163, // 81: milvus.proto.query.LoadSegmentsRequest.delta_positions:type_name -> milvus.proto.msg.MsgPosition + 164, // 81: milvus.proto.query.LoadSegmentsRequest.delta_positions:type_name -> milvus.proto.msg.MsgPosition 1, // 82: milvus.proto.query.LoadSegmentsRequest.load_scope:type_name -> milvus.proto.query.LoadScope - 157, // 83: milvus.proto.query.LoadSegmentsRequest.index_info_list:type_name -> milvus.proto.index.IndexInfo - 151, // 84: milvus.proto.query.ReleaseSegmentsRequest.base:type_name -> milvus.proto.common.MsgBase + 158, // 83: milvus.proto.query.LoadSegmentsRequest.index_info_list:type_name -> milvus.proto.index.IndexInfo + 152, // 84: milvus.proto.query.ReleaseSegmentsRequest.base:type_name -> milvus.proto.common.MsgBase 2, // 85: milvus.proto.query.ReleaseSegmentsRequest.scope:type_name -> milvus.proto.query.DataScope - 163, // 86: milvus.proto.query.ReleaseSegmentsRequest.checkpoint:type_name -> milvus.proto.msg.MsgPosition - 167, // 87: milvus.proto.query.SearchRequest.req:type_name -> milvus.proto.internal.SearchRequest + 164, // 86: milvus.proto.query.ReleaseSegmentsRequest.checkpoint:type_name -> milvus.proto.msg.MsgPosition + 168, // 87: milvus.proto.query.SearchRequest.req:type_name -> milvus.proto.internal.SearchRequest 2, // 88: milvus.proto.query.SearchRequest.scope:type_name -> milvus.proto.query.DataScope - 168, // 89: milvus.proto.query.QueryRequest.req:type_name -> milvus.proto.internal.RetrieveRequest + 169, // 89: milvus.proto.query.QueryRequest.req:type_name -> milvus.proto.internal.RetrieveRequest 2, // 90: milvus.proto.query.QueryRequest.scope:type_name -> milvus.proto.query.DataScope - 151, // 91: milvus.proto.query.SyncReplicaSegmentsRequest.base:type_name -> milvus.proto.common.MsgBase + 152, // 91: milvus.proto.query.SyncReplicaSegmentsRequest.base:type_name -> milvus.proto.common.MsgBase 52, // 92: milvus.proto.query.SyncReplicaSegmentsRequest.replica_segments:type_name -> milvus.proto.query.ReplicaSegmentsInfo - 151, // 93: milvus.proto.query.GetLoadInfoRequest.base:type_name -> milvus.proto.common.MsgBase - 152, // 94: milvus.proto.query.GetLoadInfoResponse.status:type_name -> milvus.proto.common.Status - 154, // 95: milvus.proto.query.GetLoadInfoResponse.schema:type_name -> milvus.proto.schema.CollectionSchema + 152, // 93: milvus.proto.query.GetLoadInfoRequest.base:type_name -> milvus.proto.common.MsgBase + 153, // 94: milvus.proto.query.GetLoadInfoResponse.status:type_name -> milvus.proto.common.Status + 155, // 95: milvus.proto.query.GetLoadInfoResponse.schema:type_name -> milvus.proto.schema.CollectionSchema 5, // 96: milvus.proto.query.GetLoadInfoResponse.load_type:type_name -> milvus.proto.query.LoadType - 151, // 97: milvus.proto.query.HandoffSegmentsRequest.base:type_name -> milvus.proto.common.MsgBase + 152, // 97: milvus.proto.query.HandoffSegmentsRequest.base:type_name -> milvus.proto.common.MsgBase 60, // 98: milvus.proto.query.HandoffSegmentsRequest.segmentInfos:type_name -> milvus.proto.query.SegmentInfo - 151, // 99: milvus.proto.query.LoadBalanceRequest.base:type_name -> milvus.proto.common.MsgBase + 152, // 99: milvus.proto.query.LoadBalanceRequest.base:type_name -> milvus.proto.common.MsgBase 4, // 100: milvus.proto.query.LoadBalanceRequest.balance_reason:type_name -> milvus.proto.query.TriggerCondition 60, // 101: milvus.proto.query.QueryChannelInfo.global_sealed_segments:type_name -> milvus.proto.query.SegmentInfo - 163, // 102: milvus.proto.query.QueryChannelInfo.seek_position:type_name -> milvus.proto.msg.MsgPosition + 164, // 102: milvus.proto.query.QueryChannelInfo.seek_position:type_name -> milvus.proto.msg.MsgPosition 3, // 103: milvus.proto.query.PartitionStates.state:type_name -> milvus.proto.query.PartitionState - 169, // 104: milvus.proto.query.SegmentInfo.segment_state:type_name -> milvus.proto.common.SegmentState + 170, // 104: milvus.proto.query.SegmentInfo.segment_state:type_name -> milvus.proto.common.SegmentState 45, // 105: milvus.proto.query.SegmentInfo.index_infos:type_name -> milvus.proto.query.FieldIndexInfo - 164, // 106: milvus.proto.query.SegmentInfo.level:type_name -> milvus.proto.data.SegmentLevel + 165, // 106: milvus.proto.query.SegmentInfo.level:type_name -> milvus.proto.data.SegmentLevel 59, // 107: milvus.proto.query.CollectionInfo.partition_states:type_name -> milvus.proto.query.PartitionStates 5, // 108: milvus.proto.query.CollectionInfo.load_type:type_name -> milvus.proto.query.LoadType - 154, // 109: milvus.proto.query.CollectionInfo.schema:type_name -> milvus.proto.schema.CollectionSchema + 155, // 109: milvus.proto.query.CollectionInfo.schema:type_name -> milvus.proto.schema.CollectionSchema 62, // 110: milvus.proto.query.UnsubscribeChannelInfo.collection_channels:type_name -> milvus.proto.query.UnsubscribeChannels 60, // 111: milvus.proto.query.SegmentChangeInfo.online_segments:type_name -> milvus.proto.query.SegmentInfo 60, // 112: milvus.proto.query.SegmentChangeInfo.offline_segments:type_name -> milvus.proto.query.SegmentInfo - 151, // 113: milvus.proto.query.SealedSegmentsChangeInfo.base:type_name -> milvus.proto.common.MsgBase + 152, // 113: milvus.proto.query.SealedSegmentsChangeInfo.base:type_name -> milvus.proto.common.MsgBase 64, // 114: milvus.proto.query.SealedSegmentsChangeInfo.infos:type_name -> milvus.proto.query.SegmentChangeInfo - 151, // 115: milvus.proto.query.GetDataDistributionRequest.base:type_name -> milvus.proto.common.MsgBase - 134, // 116: milvus.proto.query.GetDataDistributionRequest.checkpoints:type_name -> milvus.proto.query.GetDataDistributionRequest.CheckpointsEntry - 152, // 117: milvus.proto.query.GetDataDistributionResponse.status:type_name -> milvus.proto.common.Status + 152, // 115: milvus.proto.query.GetDataDistributionRequest.base:type_name -> milvus.proto.common.MsgBase + 135, // 116: milvus.proto.query.GetDataDistributionRequest.checkpoints:type_name -> milvus.proto.query.GetDataDistributionRequest.CheckpointsEntry + 153, // 117: milvus.proto.query.GetDataDistributionResponse.status:type_name -> milvus.proto.common.Status 72, // 118: milvus.proto.query.GetDataDistributionResponse.segments:type_name -> milvus.proto.query.SegmentVersionInfo 73, // 119: milvus.proto.query.GetDataDistributionResponse.channels:type_name -> milvus.proto.query.ChannelVersionInfo 69, // 120: milvus.proto.query.GetDataDistributionResponse.leader_views:type_name -> milvus.proto.query.LeaderView 67, // 121: milvus.proto.query.GetDataDistributionResponse.cache_shard_disk_usage_stats:type_name -> milvus.proto.query.CacheShardDiskUsageStats - 135, // 122: milvus.proto.query.LeaderView.segment_dist:type_name -> milvus.proto.query.LeaderView.SegmentDistEntry - 136, // 123: milvus.proto.query.LeaderView.growing_segments:type_name -> milvus.proto.query.LeaderView.GrowingSegmentsEntry - 137, // 124: milvus.proto.query.LeaderView.partition_stats_versions:type_name -> milvus.proto.query.LeaderView.PartitionStatsVersionsEntry + 136, // 122: milvus.proto.query.LeaderView.segment_dist:type_name -> milvus.proto.query.LeaderView.SegmentDistEntry + 137, // 123: milvus.proto.query.LeaderView.growing_segments:type_name -> milvus.proto.query.LeaderView.GrowingSegmentsEntry + 138, // 124: milvus.proto.query.LeaderView.partition_stats_versions:type_name -> milvus.proto.query.LeaderView.PartitionStatsVersionsEntry 70, // 125: milvus.proto.query.LeaderView.status:type_name -> milvus.proto.query.LeaderViewStatus - 138, // 126: milvus.proto.query.SegmentVersionInfo.index_info:type_name -> milvus.proto.query.SegmentVersionInfo.IndexInfoEntry - 164, // 127: milvus.proto.query.SegmentVersionInfo.level:type_name -> milvus.proto.data.SegmentLevel - 139, // 128: milvus.proto.query.SegmentVersionInfo.json_stats_info:type_name -> milvus.proto.query.SegmentVersionInfo.JsonStatsInfoEntry + 139, // 126: milvus.proto.query.SegmentVersionInfo.index_info:type_name -> milvus.proto.query.SegmentVersionInfo.IndexInfoEntry + 165, // 127: milvus.proto.query.SegmentVersionInfo.level:type_name -> milvus.proto.data.SegmentLevel + 140, // 128: milvus.proto.query.SegmentVersionInfo.json_stats_info:type_name -> milvus.proto.query.SegmentVersionInfo.JsonStatsInfoEntry 6, // 129: milvus.proto.query.CollectionLoadInfo.status:type_name -> milvus.proto.query.LoadStatus - 140, // 130: milvus.proto.query.CollectionLoadInfo.field_indexID:type_name -> milvus.proto.query.CollectionLoadInfo.FieldIndexIDEntry + 141, // 130: milvus.proto.query.CollectionLoadInfo.field_indexID:type_name -> milvus.proto.query.CollectionLoadInfo.FieldIndexIDEntry 5, // 131: milvus.proto.query.CollectionLoadInfo.load_type:type_name -> milvus.proto.query.LoadType 6, // 132: milvus.proto.query.PartitionLoadInfo.status:type_name -> milvus.proto.query.LoadStatus - 141, // 133: milvus.proto.query.PartitionLoadInfo.field_indexID:type_name -> milvus.proto.query.PartitionLoadInfo.FieldIndexIDEntry - 142, // 134: milvus.proto.query.Replica.channel_node_infos:type_name -> milvus.proto.query.Replica.ChannelNodeInfosEntry + 142, // 133: milvus.proto.query.PartitionLoadInfo.field_indexID:type_name -> milvus.proto.query.PartitionLoadInfo.FieldIndexIDEntry + 143, // 134: milvus.proto.query.Replica.channel_node_infos:type_name -> milvus.proto.query.Replica.ChannelNodeInfosEntry 7, // 135: milvus.proto.query.SyncAction.type:type_name -> milvus.proto.query.SyncType 44, // 136: milvus.proto.query.SyncAction.info:type_name -> milvus.proto.query.SegmentLoadInfo - 163, // 137: milvus.proto.query.SyncAction.checkpoint:type_name -> milvus.proto.msg.MsgPosition - 143, // 138: milvus.proto.query.SyncAction.partition_stats_versions:type_name -> milvus.proto.query.SyncAction.PartitionStatsVersionsEntry - 163, // 139: milvus.proto.query.SyncAction.deleteCP:type_name -> milvus.proto.msg.MsgPosition - 144, // 140: milvus.proto.query.SyncAction.sealed_segment_row_count:type_name -> milvus.proto.query.SyncAction.SealedSegmentRowCountEntry - 151, // 141: milvus.proto.query.SyncDistributionRequest.base:type_name -> milvus.proto.common.MsgBase + 164, // 137: milvus.proto.query.SyncAction.checkpoint:type_name -> milvus.proto.msg.MsgPosition + 144, // 138: milvus.proto.query.SyncAction.partition_stats_versions:type_name -> milvus.proto.query.SyncAction.PartitionStatsVersionsEntry + 164, // 139: milvus.proto.query.SyncAction.deleteCP:type_name -> milvus.proto.msg.MsgPosition + 145, // 140: milvus.proto.query.SyncAction.sealed_segment_row_count:type_name -> milvus.proto.query.SyncAction.SealedSegmentRowCountEntry + 152, // 141: milvus.proto.query.SyncDistributionRequest.base:type_name -> milvus.proto.common.MsgBase 78, // 142: milvus.proto.query.SyncDistributionRequest.actions:type_name -> milvus.proto.query.SyncAction - 154, // 143: milvus.proto.query.SyncDistributionRequest.schema:type_name -> milvus.proto.schema.CollectionSchema + 155, // 143: milvus.proto.query.SyncDistributionRequest.schema:type_name -> milvus.proto.schema.CollectionSchema 41, // 144: milvus.proto.query.SyncDistributionRequest.load_meta:type_name -> milvus.proto.query.LoadMetaInfo - 157, // 145: milvus.proto.query.SyncDistributionRequest.index_info_list:type_name -> milvus.proto.index.IndexInfo - 170, // 146: milvus.proto.query.ResourceGroup.config:type_name -> milvus.proto.rg.ResourceGroupConfig - 151, // 147: milvus.proto.query.TransferReplicaRequest.base:type_name -> milvus.proto.common.MsgBase - 151, // 148: milvus.proto.query.DescribeResourceGroupRequest.base:type_name -> milvus.proto.common.MsgBase - 152, // 149: milvus.proto.query.DescribeResourceGroupResponse.status:type_name -> milvus.proto.common.Status + 158, // 145: milvus.proto.query.SyncDistributionRequest.index_info_list:type_name -> milvus.proto.index.IndexInfo + 171, // 146: milvus.proto.query.ResourceGroup.config:type_name -> milvus.proto.rg.ResourceGroupConfig + 152, // 147: milvus.proto.query.TransferReplicaRequest.base:type_name -> milvus.proto.common.MsgBase + 152, // 148: milvus.proto.query.DescribeResourceGroupRequest.base:type_name -> milvus.proto.common.MsgBase + 153, // 149: milvus.proto.query.DescribeResourceGroupResponse.status:type_name -> milvus.proto.common.Status 84, // 150: milvus.proto.query.DescribeResourceGroupResponse.resource_group:type_name -> milvus.proto.query.ResourceGroupInfo - 145, // 151: milvus.proto.query.ResourceGroupInfo.num_loaded_replica:type_name -> milvus.proto.query.ResourceGroupInfo.NumLoadedReplicaEntry - 146, // 152: milvus.proto.query.ResourceGroupInfo.num_outgoing_node:type_name -> milvus.proto.query.ResourceGroupInfo.NumOutgoingNodeEntry - 147, // 153: milvus.proto.query.ResourceGroupInfo.num_incoming_node:type_name -> milvus.proto.query.ResourceGroupInfo.NumIncomingNodeEntry - 170, // 154: milvus.proto.query.ResourceGroupInfo.config:type_name -> milvus.proto.rg.ResourceGroupConfig - 171, // 155: milvus.proto.query.ResourceGroupInfo.nodes:type_name -> milvus.proto.common.NodeInfo - 151, // 156: milvus.proto.query.DeleteRequest.base:type_name -> milvus.proto.common.MsgBase - 172, // 157: milvus.proto.query.DeleteRequest.primary_keys:type_name -> milvus.proto.schema.IDs + 146, // 151: milvus.proto.query.ResourceGroupInfo.num_loaded_replica:type_name -> milvus.proto.query.ResourceGroupInfo.NumLoadedReplicaEntry + 147, // 152: milvus.proto.query.ResourceGroupInfo.num_outgoing_node:type_name -> milvus.proto.query.ResourceGroupInfo.NumOutgoingNodeEntry + 148, // 153: milvus.proto.query.ResourceGroupInfo.num_incoming_node:type_name -> milvus.proto.query.ResourceGroupInfo.NumIncomingNodeEntry + 171, // 154: milvus.proto.query.ResourceGroupInfo.config:type_name -> milvus.proto.rg.ResourceGroupConfig + 172, // 155: milvus.proto.query.ResourceGroupInfo.nodes:type_name -> milvus.proto.common.NodeInfo + 152, // 156: milvus.proto.query.DeleteRequest.base:type_name -> milvus.proto.common.MsgBase + 173, // 157: milvus.proto.query.DeleteRequest.primary_keys:type_name -> milvus.proto.schema.IDs 2, // 158: milvus.proto.query.DeleteRequest.scope:type_name -> milvus.proto.query.DataScope - 151, // 159: milvus.proto.query.DeleteBatchRequest.base:type_name -> milvus.proto.common.MsgBase - 172, // 160: milvus.proto.query.DeleteBatchRequest.primary_keys:type_name -> milvus.proto.schema.IDs + 152, // 159: milvus.proto.query.DeleteBatchRequest.base:type_name -> milvus.proto.common.MsgBase + 173, // 160: milvus.proto.query.DeleteBatchRequest.primary_keys:type_name -> milvus.proto.schema.IDs 2, // 161: milvus.proto.query.DeleteBatchRequest.scope:type_name -> milvus.proto.query.DataScope - 152, // 162: milvus.proto.query.DeleteBatchResponse.status:type_name -> milvus.proto.common.Status - 151, // 163: milvus.proto.query.ActivateCheckerRequest.base:type_name -> milvus.proto.common.MsgBase - 151, // 164: milvus.proto.query.DeactivateCheckerRequest.base:type_name -> milvus.proto.common.MsgBase - 151, // 165: milvus.proto.query.ListCheckersRequest.base:type_name -> milvus.proto.common.MsgBase - 152, // 166: milvus.proto.query.ListCheckersResponse.status:type_name -> milvus.proto.common.Status + 153, // 162: milvus.proto.query.DeleteBatchResponse.status:type_name -> milvus.proto.common.Status + 152, // 163: milvus.proto.query.ActivateCheckerRequest.base:type_name -> milvus.proto.common.MsgBase + 152, // 164: milvus.proto.query.DeactivateCheckerRequest.base:type_name -> milvus.proto.common.MsgBase + 152, // 165: milvus.proto.query.ListCheckersRequest.base:type_name -> milvus.proto.common.MsgBase + 153, // 166: milvus.proto.query.ListCheckersResponse.status:type_name -> milvus.proto.common.Status 92, // 167: milvus.proto.query.ListCheckersResponse.checkerInfos:type_name -> milvus.proto.query.CheckerInfo - 164, // 168: milvus.proto.query.SegmentTarget.level:type_name -> milvus.proto.data.SegmentLevel + 165, // 168: milvus.proto.query.SegmentTarget.level:type_name -> milvus.proto.data.SegmentLevel 93, // 169: milvus.proto.query.PartitionTarget.segments:type_name -> milvus.proto.query.SegmentTarget 94, // 170: milvus.proto.query.ChannelTarget.partition_targets:type_name -> milvus.proto.query.PartitionTarget - 163, // 171: milvus.proto.query.ChannelTarget.seek_position:type_name -> milvus.proto.msg.MsgPosition - 163, // 172: milvus.proto.query.ChannelTarget.delete_checkpoint:type_name -> milvus.proto.msg.MsgPosition + 164, // 171: milvus.proto.query.ChannelTarget.seek_position:type_name -> milvus.proto.msg.MsgPosition + 164, // 172: milvus.proto.query.ChannelTarget.delete_checkpoint:type_name -> milvus.proto.msg.MsgPosition 95, // 173: milvus.proto.query.CollectionTarget.Channel_targets:type_name -> milvus.proto.query.ChannelTarget - 151, // 174: milvus.proto.query.ListQueryNodeRequest.base:type_name -> milvus.proto.common.MsgBase - 152, // 175: milvus.proto.query.ListQueryNodeResponse.status:type_name -> milvus.proto.common.Status + 152, // 174: milvus.proto.query.ListQueryNodeRequest.base:type_name -> milvus.proto.common.MsgBase + 153, // 175: milvus.proto.query.ListQueryNodeResponse.status:type_name -> milvus.proto.common.Status 97, // 176: milvus.proto.query.ListQueryNodeResponse.nodeInfos:type_name -> milvus.proto.query.NodeInfo - 151, // 177: milvus.proto.query.GetQueryNodeDistributionRequest.base:type_name -> milvus.proto.common.MsgBase - 152, // 178: milvus.proto.query.GetQueryNodeDistributionResponse.status:type_name -> milvus.proto.common.Status + 152, // 177: milvus.proto.query.GetQueryNodeDistributionRequest.base:type_name -> milvus.proto.common.MsgBase + 153, // 178: milvus.proto.query.GetQueryNodeDistributionResponse.status:type_name -> milvus.proto.common.Status 67, // 179: milvus.proto.query.GetQueryNodeDistributionResponse.cache_shard_disk_usage_stats:type_name -> milvus.proto.query.CacheShardDiskUsageStats - 151, // 180: milvus.proto.query.SuspendBalanceRequest.base:type_name -> milvus.proto.common.MsgBase - 151, // 181: milvus.proto.query.ResumeBalanceRequest.base:type_name -> milvus.proto.common.MsgBase - 151, // 182: milvus.proto.query.CheckBalanceStatusRequest.base:type_name -> milvus.proto.common.MsgBase - 152, // 183: milvus.proto.query.CheckBalanceStatusResponse.status:type_name -> milvus.proto.common.Status - 151, // 184: milvus.proto.query.SuspendNodeRequest.base:type_name -> milvus.proto.common.MsgBase - 151, // 185: milvus.proto.query.ResumeNodeRequest.base:type_name -> milvus.proto.common.MsgBase - 151, // 186: milvus.proto.query.TransferSegmentRequest.base:type_name -> milvus.proto.common.MsgBase - 151, // 187: milvus.proto.query.TransferChannelRequest.base:type_name -> milvus.proto.common.MsgBase - 151, // 188: milvus.proto.query.CheckQueryNodeDistributionRequest.base:type_name -> milvus.proto.common.MsgBase - 151, // 189: milvus.proto.query.UpdateLoadConfigRequest.base:type_name -> milvus.proto.common.MsgBase - 151, // 190: milvus.proto.query.UpdateSchemaRequest.base:type_name -> milvus.proto.common.MsgBase - 154, // 191: milvus.proto.query.UpdateSchemaRequest.schema:type_name -> milvus.proto.schema.CollectionSchema - 151, // 192: milvus.proto.query.UpdateIndexRequest.base:type_name -> milvus.proto.common.MsgBase - 150, // 193: milvus.proto.query.UpdateIndexRequest.action:type_name -> milvus.proto.query.UpdateIndexRequest.Action - 151, // 194: milvus.proto.query.RunAnalyzerRequest.base:type_name -> milvus.proto.common.MsgBase - 151, // 195: milvus.proto.query.ValidateAnalyzerRequest.base:type_name -> milvus.proto.common.MsgBase + 152, // 180: milvus.proto.query.SuspendBalanceRequest.base:type_name -> milvus.proto.common.MsgBase + 152, // 181: milvus.proto.query.ResumeBalanceRequest.base:type_name -> milvus.proto.common.MsgBase + 152, // 182: milvus.proto.query.CheckBalanceStatusRequest.base:type_name -> milvus.proto.common.MsgBase + 153, // 183: milvus.proto.query.CheckBalanceStatusResponse.status:type_name -> milvus.proto.common.Status + 152, // 184: milvus.proto.query.SuspendNodeRequest.base:type_name -> milvus.proto.common.MsgBase + 152, // 185: milvus.proto.query.ResumeNodeRequest.base:type_name -> milvus.proto.common.MsgBase + 152, // 186: milvus.proto.query.TransferSegmentRequest.base:type_name -> milvus.proto.common.MsgBase + 152, // 187: milvus.proto.query.TransferChannelRequest.base:type_name -> milvus.proto.common.MsgBase + 152, // 188: milvus.proto.query.CheckQueryNodeDistributionRequest.base:type_name -> milvus.proto.common.MsgBase + 152, // 189: milvus.proto.query.UpdateLoadConfigRequest.base:type_name -> milvus.proto.common.MsgBase + 152, // 190: milvus.proto.query.UpdateSchemaRequest.base:type_name -> milvus.proto.common.MsgBase + 155, // 191: milvus.proto.query.UpdateSchemaRequest.schema:type_name -> milvus.proto.schema.CollectionSchema + 152, // 192: milvus.proto.query.UpdateIndexRequest.base:type_name -> milvus.proto.common.MsgBase + 151, // 193: milvus.proto.query.UpdateIndexRequest.action:type_name -> milvus.proto.query.UpdateIndexRequest.Action + 152, // 194: milvus.proto.query.RunAnalyzerRequest.base:type_name -> milvus.proto.common.MsgBase + 152, // 195: milvus.proto.query.ValidateAnalyzerRequest.base:type_name -> milvus.proto.common.MsgBase 115, // 196: milvus.proto.query.ValidateAnalyzerRequest.analyzer_infos:type_name -> milvus.proto.query.AnalyzerInfo - 152, // 197: milvus.proto.query.ValidateAnalyzerResponse.status:type_name -> milvus.proto.common.Status + 153, // 197: milvus.proto.query.ValidateAnalyzerResponse.status:type_name -> milvus.proto.common.Status 8, // 198: milvus.proto.query.HighlightQuery.type:type_name -> milvus.proto.query.HighlightQueryType 118, // 199: milvus.proto.query.HighlightTask.options:type_name -> milvus.proto.query.HighlightOptions 119, // 200: milvus.proto.query.HighlightTask.queries:type_name -> milvus.proto.query.HighlightQuery - 151, // 201: milvus.proto.query.GetHighlightRequest.base:type_name -> milvus.proto.common.MsgBase + 152, // 201: milvus.proto.query.GetHighlightRequest.base:type_name -> milvus.proto.common.MsgBase 120, // 202: milvus.proto.query.GetHighlightRequest.tasks:type_name -> milvus.proto.query.HighlightTask 122, // 203: milvus.proto.query.HighlightResult.fragments:type_name -> milvus.proto.query.HighlightFragment - 152, // 204: milvus.proto.query.GetHighlightResponse.status:type_name -> milvus.proto.common.Status + 153, // 204: milvus.proto.query.GetHighlightResponse.status:type_name -> milvus.proto.common.Status 123, // 205: milvus.proto.query.GetHighlightResponse.results:type_name -> milvus.proto.query.HighlightResult - 151, // 206: milvus.proto.query.ListLoadedSegmentsRequest.base:type_name -> milvus.proto.common.MsgBase - 152, // 207: milvus.proto.query.ListLoadedSegmentsResponse.status:type_name -> milvus.proto.common.Status - 170, // 208: milvus.proto.query.UpdateResourceGroupsRequest.ResourceGroupsEntry.value:type_name -> milvus.proto.rg.ResourceGroupConfig - 161, // 209: milvus.proto.query.WatchDmChannelsRequest.SegmentInfosEntry.value:type_name -> milvus.proto.data.SegmentInfo - 173, // 210: milvus.proto.query.SegmentLoadInfo.TextStatsLogsEntry.value:type_name -> milvus.proto.data.TextIndexStats - 174, // 211: milvus.proto.query.SegmentLoadInfo.JsonKeyStatsLogsEntry.value:type_name -> milvus.proto.data.JsonKeyStats - 163, // 212: milvus.proto.query.GetDataDistributionRequest.CheckpointsEntry.value:type_name -> milvus.proto.msg.MsgPosition - 71, // 213: milvus.proto.query.LeaderView.SegmentDistEntry.value:type_name -> milvus.proto.query.SegmentDist - 163, // 214: milvus.proto.query.LeaderView.GrowingSegmentsEntry.value:type_name -> milvus.proto.msg.MsgPosition - 45, // 215: milvus.proto.query.SegmentVersionInfo.IndexInfoEntry.value:type_name -> milvus.proto.query.FieldIndexInfo - 46, // 216: milvus.proto.query.SegmentVersionInfo.JsonStatsInfoEntry.value:type_name -> milvus.proto.query.JsonStatsInfo - 76, // 217: milvus.proto.query.Replica.ChannelNodeInfosEntry.value:type_name -> milvus.proto.query.ChannelNodeInfo - 157, // 218: milvus.proto.query.UpdateIndexRequest.AddIndex.index_info:type_name -> milvus.proto.index.IndexInfo - 148, // 219: milvus.proto.query.UpdateIndexRequest.Action.add_index_request:type_name -> milvus.proto.query.UpdateIndexRequest.AddIndex - 149, // 220: milvus.proto.query.UpdateIndexRequest.Action.drop_index_request:type_name -> milvus.proto.query.UpdateIndexRequest.DropIndex - 11, // 221: milvus.proto.query.QueryCoord.ShowLoadCollections:input_type -> milvus.proto.query.ShowCollectionsRequest - 13, // 222: milvus.proto.query.QueryCoord.ShowLoadPartitions:input_type -> milvus.proto.query.ShowPartitionsRequest - 18, // 223: milvus.proto.query.QueryCoord.LoadPartitions:input_type -> milvus.proto.query.LoadPartitionsRequest - 19, // 224: milvus.proto.query.QueryCoord.Prewarm:input_type -> milvus.proto.query.PrewarmRequest - 21, // 225: milvus.proto.query.QueryCoord.DescribePrewarmTask:input_type -> milvus.proto.query.DescribePrewarmTaskRequest - 23, // 226: milvus.proto.query.QueryCoord.ReleasePartitions:input_type -> milvus.proto.query.ReleasePartitionsRequest - 15, // 227: milvus.proto.query.QueryCoord.LoadCollection:input_type -> milvus.proto.query.LoadCollectionRequest - 16, // 228: milvus.proto.query.QueryCoord.ReleaseCollection:input_type -> milvus.proto.query.ReleaseCollectionRequest - 40, // 229: milvus.proto.query.QueryCoord.SyncNewCreatedPartition:input_type -> milvus.proto.query.SyncNewCreatedPartitionRequest - 24, // 230: milvus.proto.query.QueryCoord.GetPartitionStates:input_type -> milvus.proto.query.GetPartitionStatesRequest - 26, // 231: milvus.proto.query.QueryCoord.GetLoadSegmentInfo:input_type -> milvus.proto.query.GetSegmentInfoRequest - 28, // 232: milvus.proto.query.QueryCoord.GetQueryViewLoadInfo:input_type -> milvus.proto.query.GetQueryViewLoadInfoRequest - 33, // 233: milvus.proto.query.QueryCoord.WatchQueryViewSegmentLoadInfo:input_type -> milvus.proto.query.WatchQueryViewSegmentLoadInfoRequest - 56, // 234: milvus.proto.query.QueryCoord.LoadBalance:input_type -> milvus.proto.query.LoadBalanceRequest - 175, // 235: milvus.proto.query.QueryCoord.ShowConfigurations:input_type -> milvus.proto.internal.ShowConfigurationsRequest - 176, // 236: milvus.proto.query.QueryCoord.GetMetrics:input_type -> milvus.proto.milvus.GetMetricsRequest - 177, // 237: milvus.proto.query.QueryCoord.GetReplicas:input_type -> milvus.proto.milvus.GetReplicasRequest - 36, // 238: milvus.proto.query.QueryCoord.GetShardLeaders:input_type -> milvus.proto.query.GetShardLeadersRequest - 178, // 239: milvus.proto.query.QueryCoord.CheckHealth:input_type -> milvus.proto.milvus.CheckHealthRequest - 179, // 240: milvus.proto.query.QueryCoord.CreateResourceGroup:input_type -> milvus.proto.milvus.CreateResourceGroupRequest - 38, // 241: milvus.proto.query.QueryCoord.UpdateResourceGroups:input_type -> milvus.proto.query.UpdateResourceGroupsRequest - 180, // 242: milvus.proto.query.QueryCoord.DropResourceGroup:input_type -> milvus.proto.milvus.DropResourceGroupRequest - 181, // 243: milvus.proto.query.QueryCoord.TransferNode:input_type -> milvus.proto.milvus.TransferNodeRequest - 81, // 244: milvus.proto.query.QueryCoord.TransferReplica:input_type -> milvus.proto.query.TransferReplicaRequest - 182, // 245: milvus.proto.query.QueryCoord.ListResourceGroups:input_type -> milvus.proto.milvus.ListResourceGroupsRequest - 82, // 246: milvus.proto.query.QueryCoord.DescribeResourceGroup:input_type -> milvus.proto.query.DescribeResourceGroupRequest - 125, // 247: milvus.proto.query.QueryCoord.ListLoadedSegments:input_type -> milvus.proto.query.ListLoadedSegmentsRequest - 90, // 248: milvus.proto.query.QueryCoord.ListCheckers:input_type -> milvus.proto.query.ListCheckersRequest - 88, // 249: milvus.proto.query.QueryCoord.ActivateChecker:input_type -> milvus.proto.query.ActivateCheckerRequest - 89, // 250: milvus.proto.query.QueryCoord.DeactivateChecker:input_type -> milvus.proto.query.DeactivateCheckerRequest - 98, // 251: milvus.proto.query.QueryCoord.ListQueryNode:input_type -> milvus.proto.query.ListQueryNodeRequest - 100, // 252: milvus.proto.query.QueryCoord.GetQueryNodeDistribution:input_type -> milvus.proto.query.GetQueryNodeDistributionRequest - 102, // 253: milvus.proto.query.QueryCoord.SuspendBalance:input_type -> milvus.proto.query.SuspendBalanceRequest - 103, // 254: milvus.proto.query.QueryCoord.ResumeBalance:input_type -> milvus.proto.query.ResumeBalanceRequest - 104, // 255: milvus.proto.query.QueryCoord.CheckBalanceStatus:input_type -> milvus.proto.query.CheckBalanceStatusRequest - 106, // 256: milvus.proto.query.QueryCoord.SuspendNode:input_type -> milvus.proto.query.SuspendNodeRequest - 107, // 257: milvus.proto.query.QueryCoord.ResumeNode:input_type -> milvus.proto.query.ResumeNodeRequest - 108, // 258: milvus.proto.query.QueryCoord.TransferSegment:input_type -> milvus.proto.query.TransferSegmentRequest - 109, // 259: milvus.proto.query.QueryCoord.TransferChannel:input_type -> milvus.proto.query.TransferChannelRequest - 110, // 260: milvus.proto.query.QueryCoord.CheckQueryNodeDistribution:input_type -> milvus.proto.query.CheckQueryNodeDistributionRequest - 183, // 261: milvus.proto.query.QueryCoord.ClearReadTaskQueue:input_type -> milvus.proto.internal.ClearReadTaskQueueRequest - 111, // 262: milvus.proto.query.QueryCoord.UpdateLoadConfig:input_type -> milvus.proto.query.UpdateLoadConfigRequest - 114, // 263: milvus.proto.query.QueryCoord.RunAnalyzer:input_type -> milvus.proto.query.RunAnalyzerRequest - 9, // 264: milvus.proto.query.QueryCoord.ComputePhraseMatchSlop:input_type -> milvus.proto.query.ComputePhraseMatchSlopRequest - 116, // 265: milvus.proto.query.QueryCoord.ValidateAnalyzer:input_type -> milvus.proto.query.ValidateAnalyzerRequest - 184, // 266: milvus.proto.query.QueryNode.GetComponentStates:input_type -> milvus.proto.milvus.GetComponentStatesRequest - 185, // 267: milvus.proto.query.QueryNode.GetTimeTickChannel:input_type -> milvus.proto.internal.GetTimeTickChannelRequest - 186, // 268: milvus.proto.query.QueryNode.GetStatisticsChannel:input_type -> milvus.proto.internal.GetStatisticsChannelRequest - 42, // 269: milvus.proto.query.QueryNode.WatchDmChannels:input_type -> milvus.proto.query.WatchDmChannelsRequest - 43, // 270: milvus.proto.query.QueryNode.UnsubDmChannel:input_type -> milvus.proto.query.UnsubDmChannelRequest - 47, // 271: milvus.proto.query.QueryNode.LoadSegments:input_type -> milvus.proto.query.LoadSegmentsRequest - 19, // 272: milvus.proto.query.QueryNode.Prewarm:input_type -> milvus.proto.query.PrewarmRequest - 16, // 273: milvus.proto.query.QueryNode.ReleaseCollection:input_type -> milvus.proto.query.ReleaseCollectionRequest - 18, // 274: milvus.proto.query.QueryNode.LoadPartitions:input_type -> milvus.proto.query.LoadPartitionsRequest - 23, // 275: milvus.proto.query.QueryNode.ReleasePartitions:input_type -> milvus.proto.query.ReleasePartitionsRequest - 48, // 276: milvus.proto.query.QueryNode.ReleaseSegments:input_type -> milvus.proto.query.ReleaseSegmentsRequest - 26, // 277: milvus.proto.query.QueryNode.GetSegmentInfo:input_type -> milvus.proto.query.GetSegmentInfoRequest - 51, // 278: milvus.proto.query.QueryNode.SyncReplicaSegments:input_type -> milvus.proto.query.SyncReplicaSegmentsRequest - 17, // 279: milvus.proto.query.QueryNode.GetStatistics:input_type -> milvus.proto.query.GetStatisticsRequest - 49, // 280: milvus.proto.query.QueryNode.Search:input_type -> milvus.proto.query.SearchRequest - 49, // 281: milvus.proto.query.QueryNode.SearchSegments:input_type -> milvus.proto.query.SearchRequest - 50, // 282: milvus.proto.query.QueryNode.Query:input_type -> milvus.proto.query.QueryRequest - 50, // 283: milvus.proto.query.QueryNode.QueryStream:input_type -> milvus.proto.query.QueryRequest - 50, // 284: milvus.proto.query.QueryNode.QuerySegments:input_type -> milvus.proto.query.QueryRequest - 50, // 285: milvus.proto.query.QueryNode.QueryStreamSegments:input_type -> milvus.proto.query.QueryRequest - 175, // 286: milvus.proto.query.QueryNode.ShowConfigurations:input_type -> milvus.proto.internal.ShowConfigurationsRequest - 176, // 287: milvus.proto.query.QueryNode.GetMetrics:input_type -> milvus.proto.milvus.GetMetricsRequest - 66, // 288: milvus.proto.query.QueryNode.GetDataDistribution:input_type -> milvus.proto.query.GetDataDistributionRequest - 79, // 289: milvus.proto.query.QueryNode.SyncDistribution:input_type -> milvus.proto.query.SyncDistributionRequest - 85, // 290: milvus.proto.query.QueryNode.Delete:input_type -> milvus.proto.query.DeleteRequest - 86, // 291: milvus.proto.query.QueryNode.DeleteBatch:input_type -> milvus.proto.query.DeleteBatchRequest - 112, // 292: milvus.proto.query.QueryNode.UpdateSchema:input_type -> milvus.proto.query.UpdateSchemaRequest - 113, // 293: milvus.proto.query.QueryNode.UpdateIndex:input_type -> milvus.proto.query.UpdateIndexRequest - 114, // 294: milvus.proto.query.QueryNode.RunAnalyzer:input_type -> milvus.proto.query.RunAnalyzerRequest - 121, // 295: milvus.proto.query.QueryNode.GetHighlight:input_type -> milvus.proto.query.GetHighlightRequest - 116, // 296: milvus.proto.query.QueryNode.ValidateAnalyzer:input_type -> milvus.proto.query.ValidateAnalyzerRequest - 187, // 297: milvus.proto.query.QueryNode.SyncFileResource:input_type -> milvus.proto.internal.SyncFileResourceRequest - 183, // 298: milvus.proto.query.QueryNode.ClearReadTaskQueue:input_type -> milvus.proto.internal.ClearReadTaskQueueRequest - 9, // 299: milvus.proto.query.QueryNode.ComputePhraseMatchSlop:input_type -> milvus.proto.query.ComputePhraseMatchSlopRequest - 12, // 300: milvus.proto.query.QueryCoord.ShowLoadCollections:output_type -> milvus.proto.query.ShowCollectionsResponse - 14, // 301: milvus.proto.query.QueryCoord.ShowLoadPartitions:output_type -> milvus.proto.query.ShowPartitionsResponse - 152, // 302: milvus.proto.query.QueryCoord.LoadPartitions:output_type -> milvus.proto.common.Status - 20, // 303: milvus.proto.query.QueryCoord.Prewarm:output_type -> milvus.proto.query.PrewarmResponse - 22, // 304: milvus.proto.query.QueryCoord.DescribePrewarmTask:output_type -> milvus.proto.query.DescribePrewarmTaskResponse - 152, // 305: milvus.proto.query.QueryCoord.ReleasePartitions:output_type -> milvus.proto.common.Status - 152, // 306: milvus.proto.query.QueryCoord.LoadCollection:output_type -> milvus.proto.common.Status - 152, // 307: milvus.proto.query.QueryCoord.ReleaseCollection:output_type -> milvus.proto.common.Status - 152, // 308: milvus.proto.query.QueryCoord.SyncNewCreatedPartition:output_type -> milvus.proto.common.Status - 25, // 309: milvus.proto.query.QueryCoord.GetPartitionStates:output_type -> milvus.proto.query.GetPartitionStatesResponse - 27, // 310: milvus.proto.query.QueryCoord.GetLoadSegmentInfo:output_type -> milvus.proto.query.GetSegmentInfoResponse - 29, // 311: milvus.proto.query.QueryCoord.GetQueryViewLoadInfo:output_type -> milvus.proto.query.GetQueryViewLoadInfoResponse - 35, // 312: milvus.proto.query.QueryCoord.WatchQueryViewSegmentLoadInfo:output_type -> milvus.proto.query.WatchQueryViewSegmentLoadInfoResponse - 152, // 313: milvus.proto.query.QueryCoord.LoadBalance:output_type -> milvus.proto.common.Status - 188, // 314: milvus.proto.query.QueryCoord.ShowConfigurations:output_type -> milvus.proto.internal.ShowConfigurationsResponse - 189, // 315: milvus.proto.query.QueryCoord.GetMetrics:output_type -> milvus.proto.milvus.GetMetricsResponse - 190, // 316: milvus.proto.query.QueryCoord.GetReplicas:output_type -> milvus.proto.milvus.GetReplicasResponse - 37, // 317: milvus.proto.query.QueryCoord.GetShardLeaders:output_type -> milvus.proto.query.GetShardLeadersResponse - 191, // 318: milvus.proto.query.QueryCoord.CheckHealth:output_type -> milvus.proto.milvus.CheckHealthResponse - 152, // 319: milvus.proto.query.QueryCoord.CreateResourceGroup:output_type -> milvus.proto.common.Status - 152, // 320: milvus.proto.query.QueryCoord.UpdateResourceGroups:output_type -> milvus.proto.common.Status - 152, // 321: milvus.proto.query.QueryCoord.DropResourceGroup:output_type -> milvus.proto.common.Status - 152, // 322: milvus.proto.query.QueryCoord.TransferNode:output_type -> milvus.proto.common.Status - 152, // 323: milvus.proto.query.QueryCoord.TransferReplica:output_type -> milvus.proto.common.Status - 192, // 324: milvus.proto.query.QueryCoord.ListResourceGroups:output_type -> milvus.proto.milvus.ListResourceGroupsResponse - 83, // 325: milvus.proto.query.QueryCoord.DescribeResourceGroup:output_type -> milvus.proto.query.DescribeResourceGroupResponse - 126, // 326: milvus.proto.query.QueryCoord.ListLoadedSegments:output_type -> milvus.proto.query.ListLoadedSegmentsResponse - 91, // 327: milvus.proto.query.QueryCoord.ListCheckers:output_type -> milvus.proto.query.ListCheckersResponse - 152, // 328: milvus.proto.query.QueryCoord.ActivateChecker:output_type -> milvus.proto.common.Status - 152, // 329: milvus.proto.query.QueryCoord.DeactivateChecker:output_type -> milvus.proto.common.Status - 99, // 330: milvus.proto.query.QueryCoord.ListQueryNode:output_type -> milvus.proto.query.ListQueryNodeResponse - 101, // 331: milvus.proto.query.QueryCoord.GetQueryNodeDistribution:output_type -> milvus.proto.query.GetQueryNodeDistributionResponse - 152, // 332: milvus.proto.query.QueryCoord.SuspendBalance:output_type -> milvus.proto.common.Status - 152, // 333: milvus.proto.query.QueryCoord.ResumeBalance:output_type -> milvus.proto.common.Status - 105, // 334: milvus.proto.query.QueryCoord.CheckBalanceStatus:output_type -> milvus.proto.query.CheckBalanceStatusResponse - 152, // 335: milvus.proto.query.QueryCoord.SuspendNode:output_type -> milvus.proto.common.Status - 152, // 336: milvus.proto.query.QueryCoord.ResumeNode:output_type -> milvus.proto.common.Status - 152, // 337: milvus.proto.query.QueryCoord.TransferSegment:output_type -> milvus.proto.common.Status - 152, // 338: milvus.proto.query.QueryCoord.TransferChannel:output_type -> milvus.proto.common.Status - 152, // 339: milvus.proto.query.QueryCoord.CheckQueryNodeDistribution:output_type -> milvus.proto.common.Status - 193, // 340: milvus.proto.query.QueryCoord.ClearReadTaskQueue:output_type -> milvus.proto.internal.ClearReadTaskQueueResponse - 152, // 341: milvus.proto.query.QueryCoord.UpdateLoadConfig:output_type -> milvus.proto.common.Status - 194, // 342: milvus.proto.query.QueryCoord.RunAnalyzer:output_type -> milvus.proto.milvus.RunAnalyzerResponse - 10, // 343: milvus.proto.query.QueryCoord.ComputePhraseMatchSlop:output_type -> milvus.proto.query.ComputePhraseMatchSlopResponse - 117, // 344: milvus.proto.query.QueryCoord.ValidateAnalyzer:output_type -> milvus.proto.query.ValidateAnalyzerResponse - 195, // 345: milvus.proto.query.QueryNode.GetComponentStates:output_type -> milvus.proto.milvus.ComponentStates - 196, // 346: milvus.proto.query.QueryNode.GetTimeTickChannel:output_type -> milvus.proto.milvus.StringResponse - 196, // 347: milvus.proto.query.QueryNode.GetStatisticsChannel:output_type -> milvus.proto.milvus.StringResponse - 152, // 348: milvus.proto.query.QueryNode.WatchDmChannels:output_type -> milvus.proto.common.Status - 152, // 349: milvus.proto.query.QueryNode.UnsubDmChannel:output_type -> milvus.proto.common.Status - 152, // 350: milvus.proto.query.QueryNode.LoadSegments:output_type -> milvus.proto.common.Status - 152, // 351: milvus.proto.query.QueryNode.Prewarm:output_type -> milvus.proto.common.Status - 152, // 352: milvus.proto.query.QueryNode.ReleaseCollection:output_type -> milvus.proto.common.Status - 152, // 353: milvus.proto.query.QueryNode.LoadPartitions:output_type -> milvus.proto.common.Status - 152, // 354: milvus.proto.query.QueryNode.ReleasePartitions:output_type -> milvus.proto.common.Status - 152, // 355: milvus.proto.query.QueryNode.ReleaseSegments:output_type -> milvus.proto.common.Status - 27, // 356: milvus.proto.query.QueryNode.GetSegmentInfo:output_type -> milvus.proto.query.GetSegmentInfoResponse - 152, // 357: milvus.proto.query.QueryNode.SyncReplicaSegments:output_type -> milvus.proto.common.Status - 197, // 358: milvus.proto.query.QueryNode.GetStatistics:output_type -> milvus.proto.internal.GetStatisticsResponse - 198, // 359: milvus.proto.query.QueryNode.Search:output_type -> milvus.proto.internal.SearchResults - 198, // 360: milvus.proto.query.QueryNode.SearchSegments:output_type -> milvus.proto.internal.SearchResults - 199, // 361: milvus.proto.query.QueryNode.Query:output_type -> milvus.proto.internal.RetrieveResults - 199, // 362: milvus.proto.query.QueryNode.QueryStream:output_type -> milvus.proto.internal.RetrieveResults - 199, // 363: milvus.proto.query.QueryNode.QuerySegments:output_type -> milvus.proto.internal.RetrieveResults - 199, // 364: milvus.proto.query.QueryNode.QueryStreamSegments:output_type -> milvus.proto.internal.RetrieveResults - 188, // 365: milvus.proto.query.QueryNode.ShowConfigurations:output_type -> milvus.proto.internal.ShowConfigurationsResponse - 189, // 366: milvus.proto.query.QueryNode.GetMetrics:output_type -> milvus.proto.milvus.GetMetricsResponse - 68, // 367: milvus.proto.query.QueryNode.GetDataDistribution:output_type -> milvus.proto.query.GetDataDistributionResponse - 152, // 368: milvus.proto.query.QueryNode.SyncDistribution:output_type -> milvus.proto.common.Status - 152, // 369: milvus.proto.query.QueryNode.Delete:output_type -> milvus.proto.common.Status - 87, // 370: milvus.proto.query.QueryNode.DeleteBatch:output_type -> milvus.proto.query.DeleteBatchResponse - 152, // 371: milvus.proto.query.QueryNode.UpdateSchema:output_type -> milvus.proto.common.Status - 152, // 372: milvus.proto.query.QueryNode.UpdateIndex:output_type -> milvus.proto.common.Status - 194, // 373: milvus.proto.query.QueryNode.RunAnalyzer:output_type -> milvus.proto.milvus.RunAnalyzerResponse - 124, // 374: milvus.proto.query.QueryNode.GetHighlight:output_type -> milvus.proto.query.GetHighlightResponse - 117, // 375: milvus.proto.query.QueryNode.ValidateAnalyzer:output_type -> milvus.proto.query.ValidateAnalyzerResponse - 152, // 376: milvus.proto.query.QueryNode.SyncFileResource:output_type -> milvus.proto.common.Status - 193, // 377: milvus.proto.query.QueryNode.ClearReadTaskQueue:output_type -> milvus.proto.internal.ClearReadTaskQueueResponse - 10, // 378: milvus.proto.query.QueryNode.ComputePhraseMatchSlop:output_type -> milvus.proto.query.ComputePhraseMatchSlopResponse - 300, // [300:379] is the sub-list for method output_type - 221, // [221:300] is the sub-list for method input_type - 221, // [221:221] is the sub-list for extension type_name - 221, // [221:221] is the sub-list for extension extendee - 0, // [0:221] is the sub-list for field type_name + 152, // 206: milvus.proto.query.ListLoadedSegmentsRequest.base:type_name -> milvus.proto.common.MsgBase + 153, // 207: milvus.proto.query.ListLoadedSegmentsResponse.status:type_name -> milvus.proto.common.Status + 152, // 208: milvus.proto.query.WaitCollectionReadyRequest.base:type_name -> milvus.proto.common.MsgBase + 171, // 209: milvus.proto.query.UpdateResourceGroupsRequest.ResourceGroupsEntry.value:type_name -> milvus.proto.rg.ResourceGroupConfig + 162, // 210: milvus.proto.query.WatchDmChannelsRequest.SegmentInfosEntry.value:type_name -> milvus.proto.data.SegmentInfo + 174, // 211: milvus.proto.query.SegmentLoadInfo.TextStatsLogsEntry.value:type_name -> milvus.proto.data.TextIndexStats + 175, // 212: milvus.proto.query.SegmentLoadInfo.JsonKeyStatsLogsEntry.value:type_name -> milvus.proto.data.JsonKeyStats + 164, // 213: milvus.proto.query.GetDataDistributionRequest.CheckpointsEntry.value:type_name -> milvus.proto.msg.MsgPosition + 71, // 214: milvus.proto.query.LeaderView.SegmentDistEntry.value:type_name -> milvus.proto.query.SegmentDist + 164, // 215: milvus.proto.query.LeaderView.GrowingSegmentsEntry.value:type_name -> milvus.proto.msg.MsgPosition + 45, // 216: milvus.proto.query.SegmentVersionInfo.IndexInfoEntry.value:type_name -> milvus.proto.query.FieldIndexInfo + 46, // 217: milvus.proto.query.SegmentVersionInfo.JsonStatsInfoEntry.value:type_name -> milvus.proto.query.JsonStatsInfo + 76, // 218: milvus.proto.query.Replica.ChannelNodeInfosEntry.value:type_name -> milvus.proto.query.ChannelNodeInfo + 158, // 219: milvus.proto.query.UpdateIndexRequest.AddIndex.index_info:type_name -> milvus.proto.index.IndexInfo + 149, // 220: milvus.proto.query.UpdateIndexRequest.Action.add_index_request:type_name -> milvus.proto.query.UpdateIndexRequest.AddIndex + 150, // 221: milvus.proto.query.UpdateIndexRequest.Action.drop_index_request:type_name -> milvus.proto.query.UpdateIndexRequest.DropIndex + 11, // 222: milvus.proto.query.QueryCoord.ShowLoadCollections:input_type -> milvus.proto.query.ShowCollectionsRequest + 13, // 223: milvus.proto.query.QueryCoord.ShowLoadPartitions:input_type -> milvus.proto.query.ShowPartitionsRequest + 18, // 224: milvus.proto.query.QueryCoord.LoadPartitions:input_type -> milvus.proto.query.LoadPartitionsRequest + 19, // 225: milvus.proto.query.QueryCoord.Prewarm:input_type -> milvus.proto.query.PrewarmRequest + 21, // 226: milvus.proto.query.QueryCoord.DescribePrewarmTask:input_type -> milvus.proto.query.DescribePrewarmTaskRequest + 23, // 227: milvus.proto.query.QueryCoord.ReleasePartitions:input_type -> milvus.proto.query.ReleasePartitionsRequest + 15, // 228: milvus.proto.query.QueryCoord.LoadCollection:input_type -> milvus.proto.query.LoadCollectionRequest + 16, // 229: milvus.proto.query.QueryCoord.ReleaseCollection:input_type -> milvus.proto.query.ReleaseCollectionRequest + 40, // 230: milvus.proto.query.QueryCoord.SyncNewCreatedPartition:input_type -> milvus.proto.query.SyncNewCreatedPartitionRequest + 24, // 231: milvus.proto.query.QueryCoord.GetPartitionStates:input_type -> milvus.proto.query.GetPartitionStatesRequest + 26, // 232: milvus.proto.query.QueryCoord.GetLoadSegmentInfo:input_type -> milvus.proto.query.GetSegmentInfoRequest + 28, // 233: milvus.proto.query.QueryCoord.GetQueryViewLoadInfo:input_type -> milvus.proto.query.GetQueryViewLoadInfoRequest + 33, // 234: milvus.proto.query.QueryCoord.WatchQueryViewSegmentLoadInfo:input_type -> milvus.proto.query.WatchQueryViewSegmentLoadInfoRequest + 56, // 235: milvus.proto.query.QueryCoord.LoadBalance:input_type -> milvus.proto.query.LoadBalanceRequest + 176, // 236: milvus.proto.query.QueryCoord.ShowConfigurations:input_type -> milvus.proto.internal.ShowConfigurationsRequest + 177, // 237: milvus.proto.query.QueryCoord.GetMetrics:input_type -> milvus.proto.milvus.GetMetricsRequest + 178, // 238: milvus.proto.query.QueryCoord.GetReplicas:input_type -> milvus.proto.milvus.GetReplicasRequest + 36, // 239: milvus.proto.query.QueryCoord.GetShardLeaders:input_type -> milvus.proto.query.GetShardLeadersRequest + 179, // 240: milvus.proto.query.QueryCoord.CheckHealth:input_type -> milvus.proto.milvus.CheckHealthRequest + 180, // 241: milvus.proto.query.QueryCoord.CreateResourceGroup:input_type -> milvus.proto.milvus.CreateResourceGroupRequest + 38, // 242: milvus.proto.query.QueryCoord.UpdateResourceGroups:input_type -> milvus.proto.query.UpdateResourceGroupsRequest + 181, // 243: milvus.proto.query.QueryCoord.DropResourceGroup:input_type -> milvus.proto.milvus.DropResourceGroupRequest + 182, // 244: milvus.proto.query.QueryCoord.TransferNode:input_type -> milvus.proto.milvus.TransferNodeRequest + 81, // 245: milvus.proto.query.QueryCoord.TransferReplica:input_type -> milvus.proto.query.TransferReplicaRequest + 183, // 246: milvus.proto.query.QueryCoord.ListResourceGroups:input_type -> milvus.proto.milvus.ListResourceGroupsRequest + 82, // 247: milvus.proto.query.QueryCoord.DescribeResourceGroup:input_type -> milvus.proto.query.DescribeResourceGroupRequest + 125, // 248: milvus.proto.query.QueryCoord.ListLoadedSegments:input_type -> milvus.proto.query.ListLoadedSegmentsRequest + 90, // 249: milvus.proto.query.QueryCoord.ListCheckers:input_type -> milvus.proto.query.ListCheckersRequest + 88, // 250: milvus.proto.query.QueryCoord.ActivateChecker:input_type -> milvus.proto.query.ActivateCheckerRequest + 89, // 251: milvus.proto.query.QueryCoord.DeactivateChecker:input_type -> milvus.proto.query.DeactivateCheckerRequest + 98, // 252: milvus.proto.query.QueryCoord.ListQueryNode:input_type -> milvus.proto.query.ListQueryNodeRequest + 100, // 253: milvus.proto.query.QueryCoord.GetQueryNodeDistribution:input_type -> milvus.proto.query.GetQueryNodeDistributionRequest + 102, // 254: milvus.proto.query.QueryCoord.SuspendBalance:input_type -> milvus.proto.query.SuspendBalanceRequest + 103, // 255: milvus.proto.query.QueryCoord.ResumeBalance:input_type -> milvus.proto.query.ResumeBalanceRequest + 104, // 256: milvus.proto.query.QueryCoord.CheckBalanceStatus:input_type -> milvus.proto.query.CheckBalanceStatusRequest + 106, // 257: milvus.proto.query.QueryCoord.SuspendNode:input_type -> milvus.proto.query.SuspendNodeRequest + 107, // 258: milvus.proto.query.QueryCoord.ResumeNode:input_type -> milvus.proto.query.ResumeNodeRequest + 108, // 259: milvus.proto.query.QueryCoord.TransferSegment:input_type -> milvus.proto.query.TransferSegmentRequest + 109, // 260: milvus.proto.query.QueryCoord.TransferChannel:input_type -> milvus.proto.query.TransferChannelRequest + 110, // 261: milvus.proto.query.QueryCoord.CheckQueryNodeDistribution:input_type -> milvus.proto.query.CheckQueryNodeDistributionRequest + 184, // 262: milvus.proto.query.QueryCoord.ClearReadTaskQueue:input_type -> milvus.proto.internal.ClearReadTaskQueueRequest + 111, // 263: milvus.proto.query.QueryCoord.UpdateLoadConfig:input_type -> milvus.proto.query.UpdateLoadConfigRequest + 114, // 264: milvus.proto.query.QueryCoord.RunAnalyzer:input_type -> milvus.proto.query.RunAnalyzerRequest + 9, // 265: milvus.proto.query.QueryCoord.ComputePhraseMatchSlop:input_type -> milvus.proto.query.ComputePhraseMatchSlopRequest + 116, // 266: milvus.proto.query.QueryCoord.ValidateAnalyzer:input_type -> milvus.proto.query.ValidateAnalyzerRequest + 127, // 267: milvus.proto.query.QueryCoord.WaitCollectionReady:input_type -> milvus.proto.query.WaitCollectionReadyRequest + 185, // 268: milvus.proto.query.QueryNode.GetComponentStates:input_type -> milvus.proto.milvus.GetComponentStatesRequest + 186, // 269: milvus.proto.query.QueryNode.GetTimeTickChannel:input_type -> milvus.proto.internal.GetTimeTickChannelRequest + 187, // 270: milvus.proto.query.QueryNode.GetStatisticsChannel:input_type -> milvus.proto.internal.GetStatisticsChannelRequest + 42, // 271: milvus.proto.query.QueryNode.WatchDmChannels:input_type -> milvus.proto.query.WatchDmChannelsRequest + 43, // 272: milvus.proto.query.QueryNode.UnsubDmChannel:input_type -> milvus.proto.query.UnsubDmChannelRequest + 47, // 273: milvus.proto.query.QueryNode.LoadSegments:input_type -> milvus.proto.query.LoadSegmentsRequest + 19, // 274: milvus.proto.query.QueryNode.Prewarm:input_type -> milvus.proto.query.PrewarmRequest + 16, // 275: milvus.proto.query.QueryNode.ReleaseCollection:input_type -> milvus.proto.query.ReleaseCollectionRequest + 18, // 276: milvus.proto.query.QueryNode.LoadPartitions:input_type -> milvus.proto.query.LoadPartitionsRequest + 23, // 277: milvus.proto.query.QueryNode.ReleasePartitions:input_type -> milvus.proto.query.ReleasePartitionsRequest + 48, // 278: milvus.proto.query.QueryNode.ReleaseSegments:input_type -> milvus.proto.query.ReleaseSegmentsRequest + 26, // 279: milvus.proto.query.QueryNode.GetSegmentInfo:input_type -> milvus.proto.query.GetSegmentInfoRequest + 51, // 280: milvus.proto.query.QueryNode.SyncReplicaSegments:input_type -> milvus.proto.query.SyncReplicaSegmentsRequest + 17, // 281: milvus.proto.query.QueryNode.GetStatistics:input_type -> milvus.proto.query.GetStatisticsRequest + 49, // 282: milvus.proto.query.QueryNode.Search:input_type -> milvus.proto.query.SearchRequest + 49, // 283: milvus.proto.query.QueryNode.SearchSegments:input_type -> milvus.proto.query.SearchRequest + 50, // 284: milvus.proto.query.QueryNode.Query:input_type -> milvus.proto.query.QueryRequest + 50, // 285: milvus.proto.query.QueryNode.QueryStream:input_type -> milvus.proto.query.QueryRequest + 50, // 286: milvus.proto.query.QueryNode.QuerySegments:input_type -> milvus.proto.query.QueryRequest + 50, // 287: milvus.proto.query.QueryNode.QueryStreamSegments:input_type -> milvus.proto.query.QueryRequest + 176, // 288: milvus.proto.query.QueryNode.ShowConfigurations:input_type -> milvus.proto.internal.ShowConfigurationsRequest + 177, // 289: milvus.proto.query.QueryNode.GetMetrics:input_type -> milvus.proto.milvus.GetMetricsRequest + 66, // 290: milvus.proto.query.QueryNode.GetDataDistribution:input_type -> milvus.proto.query.GetDataDistributionRequest + 79, // 291: milvus.proto.query.QueryNode.SyncDistribution:input_type -> milvus.proto.query.SyncDistributionRequest + 85, // 292: milvus.proto.query.QueryNode.Delete:input_type -> milvus.proto.query.DeleteRequest + 86, // 293: milvus.proto.query.QueryNode.DeleteBatch:input_type -> milvus.proto.query.DeleteBatchRequest + 112, // 294: milvus.proto.query.QueryNode.UpdateSchema:input_type -> milvus.proto.query.UpdateSchemaRequest + 113, // 295: milvus.proto.query.QueryNode.UpdateIndex:input_type -> milvus.proto.query.UpdateIndexRequest + 114, // 296: milvus.proto.query.QueryNode.RunAnalyzer:input_type -> milvus.proto.query.RunAnalyzerRequest + 121, // 297: milvus.proto.query.QueryNode.GetHighlight:input_type -> milvus.proto.query.GetHighlightRequest + 116, // 298: milvus.proto.query.QueryNode.ValidateAnalyzer:input_type -> milvus.proto.query.ValidateAnalyzerRequest + 188, // 299: milvus.proto.query.QueryNode.SyncFileResource:input_type -> milvus.proto.internal.SyncFileResourceRequest + 184, // 300: milvus.proto.query.QueryNode.ClearReadTaskQueue:input_type -> milvus.proto.internal.ClearReadTaskQueueRequest + 9, // 301: milvus.proto.query.QueryNode.ComputePhraseMatchSlop:input_type -> milvus.proto.query.ComputePhraseMatchSlopRequest + 12, // 302: milvus.proto.query.QueryCoord.ShowLoadCollections:output_type -> milvus.proto.query.ShowCollectionsResponse + 14, // 303: milvus.proto.query.QueryCoord.ShowLoadPartitions:output_type -> milvus.proto.query.ShowPartitionsResponse + 153, // 304: milvus.proto.query.QueryCoord.LoadPartitions:output_type -> milvus.proto.common.Status + 20, // 305: milvus.proto.query.QueryCoord.Prewarm:output_type -> milvus.proto.query.PrewarmResponse + 22, // 306: milvus.proto.query.QueryCoord.DescribePrewarmTask:output_type -> milvus.proto.query.DescribePrewarmTaskResponse + 153, // 307: milvus.proto.query.QueryCoord.ReleasePartitions:output_type -> milvus.proto.common.Status + 153, // 308: milvus.proto.query.QueryCoord.LoadCollection:output_type -> milvus.proto.common.Status + 153, // 309: milvus.proto.query.QueryCoord.ReleaseCollection:output_type -> milvus.proto.common.Status + 153, // 310: milvus.proto.query.QueryCoord.SyncNewCreatedPartition:output_type -> milvus.proto.common.Status + 25, // 311: milvus.proto.query.QueryCoord.GetPartitionStates:output_type -> milvus.proto.query.GetPartitionStatesResponse + 27, // 312: milvus.proto.query.QueryCoord.GetLoadSegmentInfo:output_type -> milvus.proto.query.GetSegmentInfoResponse + 29, // 313: milvus.proto.query.QueryCoord.GetQueryViewLoadInfo:output_type -> milvus.proto.query.GetQueryViewLoadInfoResponse + 35, // 314: milvus.proto.query.QueryCoord.WatchQueryViewSegmentLoadInfo:output_type -> milvus.proto.query.WatchQueryViewSegmentLoadInfoResponse + 153, // 315: milvus.proto.query.QueryCoord.LoadBalance:output_type -> milvus.proto.common.Status + 189, // 316: milvus.proto.query.QueryCoord.ShowConfigurations:output_type -> milvus.proto.internal.ShowConfigurationsResponse + 190, // 317: milvus.proto.query.QueryCoord.GetMetrics:output_type -> milvus.proto.milvus.GetMetricsResponse + 191, // 318: milvus.proto.query.QueryCoord.GetReplicas:output_type -> milvus.proto.milvus.GetReplicasResponse + 37, // 319: milvus.proto.query.QueryCoord.GetShardLeaders:output_type -> milvus.proto.query.GetShardLeadersResponse + 192, // 320: milvus.proto.query.QueryCoord.CheckHealth:output_type -> milvus.proto.milvus.CheckHealthResponse + 153, // 321: milvus.proto.query.QueryCoord.CreateResourceGroup:output_type -> milvus.proto.common.Status + 153, // 322: milvus.proto.query.QueryCoord.UpdateResourceGroups:output_type -> milvus.proto.common.Status + 153, // 323: milvus.proto.query.QueryCoord.DropResourceGroup:output_type -> milvus.proto.common.Status + 153, // 324: milvus.proto.query.QueryCoord.TransferNode:output_type -> milvus.proto.common.Status + 153, // 325: milvus.proto.query.QueryCoord.TransferReplica:output_type -> milvus.proto.common.Status + 193, // 326: milvus.proto.query.QueryCoord.ListResourceGroups:output_type -> milvus.proto.milvus.ListResourceGroupsResponse + 83, // 327: milvus.proto.query.QueryCoord.DescribeResourceGroup:output_type -> milvus.proto.query.DescribeResourceGroupResponse + 126, // 328: milvus.proto.query.QueryCoord.ListLoadedSegments:output_type -> milvus.proto.query.ListLoadedSegmentsResponse + 91, // 329: milvus.proto.query.QueryCoord.ListCheckers:output_type -> milvus.proto.query.ListCheckersResponse + 153, // 330: milvus.proto.query.QueryCoord.ActivateChecker:output_type -> milvus.proto.common.Status + 153, // 331: milvus.proto.query.QueryCoord.DeactivateChecker:output_type -> milvus.proto.common.Status + 99, // 332: milvus.proto.query.QueryCoord.ListQueryNode:output_type -> milvus.proto.query.ListQueryNodeResponse + 101, // 333: milvus.proto.query.QueryCoord.GetQueryNodeDistribution:output_type -> milvus.proto.query.GetQueryNodeDistributionResponse + 153, // 334: milvus.proto.query.QueryCoord.SuspendBalance:output_type -> milvus.proto.common.Status + 153, // 335: milvus.proto.query.QueryCoord.ResumeBalance:output_type -> milvus.proto.common.Status + 105, // 336: milvus.proto.query.QueryCoord.CheckBalanceStatus:output_type -> milvus.proto.query.CheckBalanceStatusResponse + 153, // 337: milvus.proto.query.QueryCoord.SuspendNode:output_type -> milvus.proto.common.Status + 153, // 338: milvus.proto.query.QueryCoord.ResumeNode:output_type -> milvus.proto.common.Status + 153, // 339: milvus.proto.query.QueryCoord.TransferSegment:output_type -> milvus.proto.common.Status + 153, // 340: milvus.proto.query.QueryCoord.TransferChannel:output_type -> milvus.proto.common.Status + 153, // 341: milvus.proto.query.QueryCoord.CheckQueryNodeDistribution:output_type -> milvus.proto.common.Status + 194, // 342: milvus.proto.query.QueryCoord.ClearReadTaskQueue:output_type -> milvus.proto.internal.ClearReadTaskQueueResponse + 153, // 343: milvus.proto.query.QueryCoord.UpdateLoadConfig:output_type -> milvus.proto.common.Status + 195, // 344: milvus.proto.query.QueryCoord.RunAnalyzer:output_type -> milvus.proto.milvus.RunAnalyzerResponse + 10, // 345: milvus.proto.query.QueryCoord.ComputePhraseMatchSlop:output_type -> milvus.proto.query.ComputePhraseMatchSlopResponse + 117, // 346: milvus.proto.query.QueryCoord.ValidateAnalyzer:output_type -> milvus.proto.query.ValidateAnalyzerResponse + 153, // 347: milvus.proto.query.QueryCoord.WaitCollectionReady:output_type -> milvus.proto.common.Status + 196, // 348: milvus.proto.query.QueryNode.GetComponentStates:output_type -> milvus.proto.milvus.ComponentStates + 197, // 349: milvus.proto.query.QueryNode.GetTimeTickChannel:output_type -> milvus.proto.milvus.StringResponse + 197, // 350: milvus.proto.query.QueryNode.GetStatisticsChannel:output_type -> milvus.proto.milvus.StringResponse + 153, // 351: milvus.proto.query.QueryNode.WatchDmChannels:output_type -> milvus.proto.common.Status + 153, // 352: milvus.proto.query.QueryNode.UnsubDmChannel:output_type -> milvus.proto.common.Status + 153, // 353: milvus.proto.query.QueryNode.LoadSegments:output_type -> milvus.proto.common.Status + 153, // 354: milvus.proto.query.QueryNode.Prewarm:output_type -> milvus.proto.common.Status + 153, // 355: milvus.proto.query.QueryNode.ReleaseCollection:output_type -> milvus.proto.common.Status + 153, // 356: milvus.proto.query.QueryNode.LoadPartitions:output_type -> milvus.proto.common.Status + 153, // 357: milvus.proto.query.QueryNode.ReleasePartitions:output_type -> milvus.proto.common.Status + 153, // 358: milvus.proto.query.QueryNode.ReleaseSegments:output_type -> milvus.proto.common.Status + 27, // 359: milvus.proto.query.QueryNode.GetSegmentInfo:output_type -> milvus.proto.query.GetSegmentInfoResponse + 153, // 360: milvus.proto.query.QueryNode.SyncReplicaSegments:output_type -> milvus.proto.common.Status + 198, // 361: milvus.proto.query.QueryNode.GetStatistics:output_type -> milvus.proto.internal.GetStatisticsResponse + 199, // 362: milvus.proto.query.QueryNode.Search:output_type -> milvus.proto.internal.SearchResults + 199, // 363: milvus.proto.query.QueryNode.SearchSegments:output_type -> milvus.proto.internal.SearchResults + 200, // 364: milvus.proto.query.QueryNode.Query:output_type -> milvus.proto.internal.RetrieveResults + 200, // 365: milvus.proto.query.QueryNode.QueryStream:output_type -> milvus.proto.internal.RetrieveResults + 200, // 366: milvus.proto.query.QueryNode.QuerySegments:output_type -> milvus.proto.internal.RetrieveResults + 200, // 367: milvus.proto.query.QueryNode.QueryStreamSegments:output_type -> milvus.proto.internal.RetrieveResults + 189, // 368: milvus.proto.query.QueryNode.ShowConfigurations:output_type -> milvus.proto.internal.ShowConfigurationsResponse + 190, // 369: milvus.proto.query.QueryNode.GetMetrics:output_type -> milvus.proto.milvus.GetMetricsResponse + 68, // 370: milvus.proto.query.QueryNode.GetDataDistribution:output_type -> milvus.proto.query.GetDataDistributionResponse + 153, // 371: milvus.proto.query.QueryNode.SyncDistribution:output_type -> milvus.proto.common.Status + 153, // 372: milvus.proto.query.QueryNode.Delete:output_type -> milvus.proto.common.Status + 87, // 373: milvus.proto.query.QueryNode.DeleteBatch:output_type -> milvus.proto.query.DeleteBatchResponse + 153, // 374: milvus.proto.query.QueryNode.UpdateSchema:output_type -> milvus.proto.common.Status + 153, // 375: milvus.proto.query.QueryNode.UpdateIndex:output_type -> milvus.proto.common.Status + 195, // 376: milvus.proto.query.QueryNode.RunAnalyzer:output_type -> milvus.proto.milvus.RunAnalyzerResponse + 124, // 377: milvus.proto.query.QueryNode.GetHighlight:output_type -> milvus.proto.query.GetHighlightResponse + 117, // 378: milvus.proto.query.QueryNode.ValidateAnalyzer:output_type -> milvus.proto.query.ValidateAnalyzerResponse + 153, // 379: milvus.proto.query.QueryNode.SyncFileResource:output_type -> milvus.proto.common.Status + 194, // 380: milvus.proto.query.QueryNode.ClearReadTaskQueue:output_type -> milvus.proto.internal.ClearReadTaskQueueResponse + 10, // 381: milvus.proto.query.QueryNode.ComputePhraseMatchSlop:output_type -> milvus.proto.query.ComputePhraseMatchSlopResponse + 302, // [302:382] is the sub-list for method output_type + 222, // [222:302] is the sub-list for method input_type + 222, // [222:222] is the sub-list for extension type_name + 222, // [222:222] is the sub-list for extension extendee + 0, // [0:222] is the sub-list for field type_name } func init() { file_query_coord_proto_init() } @@ -14532,8 +14627,8 @@ func file_query_coord_proto_init() { return nil } } - file_query_coord_proto_msgTypes[139].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*UpdateIndexRequest_AddIndex); i { + file_query_coord_proto_msgTypes[118].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*WaitCollectionReadyRequest); i { case 0: return &v.state case 1: @@ -14545,7 +14640,7 @@ func file_query_coord_proto_init() { } } file_query_coord_proto_msgTypes[140].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*UpdateIndexRequest_DropIndex); i { + switch v := v.(*UpdateIndexRequest_AddIndex); i { case 0: return &v.state case 1: @@ -14557,6 +14652,18 @@ func file_query_coord_proto_init() { } } file_query_coord_proto_msgTypes[141].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*UpdateIndexRequest_DropIndex); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_query_coord_proto_msgTypes[142].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*UpdateIndexRequest_Action); i { case 0: return &v.state @@ -14572,7 +14679,7 @@ func file_query_coord_proto_init() { file_query_coord_proto_msgTypes[10].OneofWrappers = []interface{}{} file_query_coord_proto_msgTypes[11].OneofWrappers = []interface{}{} file_query_coord_proto_msgTypes[63].OneofWrappers = []interface{}{} - file_query_coord_proto_msgTypes[141].OneofWrappers = []interface{}{ + file_query_coord_proto_msgTypes[142].OneofWrappers = []interface{}{ (*UpdateIndexRequest_Action_AddIndexRequest)(nil), (*UpdateIndexRequest_Action_DropIndexRequest)(nil), } @@ -14582,7 +14689,7 @@ func file_query_coord_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_query_coord_proto_rawDesc, NumEnums: 9, - NumMessages: 142, + NumMessages: 143, NumExtensions: 0, NumServices: 2, }, diff --git a/pkg/proto/querypb/query_coord_grpc.pb.go b/pkg/proto/querypb/query_coord_grpc.pb.go index d251ab3b55b..34e95f48a17 100644 --- a/pkg/proto/querypb/query_coord_grpc.pb.go +++ b/pkg/proto/querypb/query_coord_grpc.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go-grpc. DO NOT EDIT. // versions: // - protoc-gen-go-grpc v1.3.0 -// - protoc v5.27.0 +// - protoc v7.34.1 // source: query_coord.proto package querypb @@ -67,6 +67,7 @@ const ( QueryCoord_RunAnalyzer_FullMethodName = "/milvus.proto.query.QueryCoord/RunAnalyzer" QueryCoord_ComputePhraseMatchSlop_FullMethodName = "/milvus.proto.query.QueryCoord/ComputePhraseMatchSlop" QueryCoord_ValidateAnalyzer_FullMethodName = "/milvus.proto.query.QueryCoord/ValidateAnalyzer" + QueryCoord_WaitCollectionReady_FullMethodName = "/milvus.proto.query.QueryCoord/WaitCollectionReady" ) // QueryCoordClient is the client API for QueryCoord service. @@ -122,6 +123,8 @@ type QueryCoordClient interface { RunAnalyzer(ctx context.Context, in *RunAnalyzerRequest, opts ...grpc.CallOption) (*milvuspb.RunAnalyzerResponse, error) ComputePhraseMatchSlop(ctx context.Context, in *ComputePhraseMatchSlopRequest, opts ...grpc.CallOption) (*ComputePhraseMatchSlopResponse, error) ValidateAnalyzer(ctx context.Context, in *ValidateAnalyzerRequest, opts ...grpc.CallOption) (*ValidateAnalyzerResponse, error) + // Waits for all expected shards to become queryable. Does not initiate load. + WaitCollectionReady(ctx context.Context, in *WaitCollectionReadyRequest, opts ...grpc.CallOption) (*commonpb.Status, error) } type queryCoordClient struct { @@ -560,6 +563,15 @@ func (c *queryCoordClient) ValidateAnalyzer(ctx context.Context, in *ValidateAna return out, nil } +func (c *queryCoordClient) WaitCollectionReady(ctx context.Context, in *WaitCollectionReadyRequest, opts ...grpc.CallOption) (*commonpb.Status, error) { + out := new(commonpb.Status) + err := c.cc.Invoke(ctx, QueryCoord_WaitCollectionReady_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + // QueryCoordServer is the server API for QueryCoord service. // All implementations should embed UnimplementedQueryCoordServer // for forward compatibility @@ -613,6 +625,8 @@ type QueryCoordServer interface { RunAnalyzer(context.Context, *RunAnalyzerRequest) (*milvuspb.RunAnalyzerResponse, error) ComputePhraseMatchSlop(context.Context, *ComputePhraseMatchSlopRequest) (*ComputePhraseMatchSlopResponse, error) ValidateAnalyzer(context.Context, *ValidateAnalyzerRequest) (*ValidateAnalyzerResponse, error) + // Waits for all expected shards to become queryable. Does not initiate load. + WaitCollectionReady(context.Context, *WaitCollectionReadyRequest) (*commonpb.Status, error) } // UnimplementedQueryCoordServer should be embedded to have forward compatible implementations. @@ -754,6 +768,9 @@ func (UnimplementedQueryCoordServer) ComputePhraseMatchSlop(context.Context, *Co func (UnimplementedQueryCoordServer) ValidateAnalyzer(context.Context, *ValidateAnalyzerRequest) (*ValidateAnalyzerResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method ValidateAnalyzer not implemented") } +func (UnimplementedQueryCoordServer) WaitCollectionReady(context.Context, *WaitCollectionReadyRequest) (*commonpb.Status, error) { + return nil, status.Errorf(codes.Unimplemented, "method WaitCollectionReady not implemented") +} // UnsafeQueryCoordServer may be embedded to opt out of forward compatibility for this service. // Use of this interface is not recommended, as added methods to QueryCoordServer will @@ -1584,6 +1601,24 @@ func _QueryCoord_ValidateAnalyzer_Handler(srv interface{}, ctx context.Context, return interceptor(ctx, in, info, handler) } +func _QueryCoord_WaitCollectionReady_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(WaitCollectionReadyRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(QueryCoordServer).WaitCollectionReady(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: QueryCoord_WaitCollectionReady_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryCoordServer).WaitCollectionReady(ctx, req.(*WaitCollectionReadyRequest)) + } + return interceptor(ctx, in, info, handler) +} + // QueryCoord_ServiceDesc is the grpc.ServiceDesc for QueryCoord service. // It's only intended for direct use with grpc.RegisterService, // and not to be introspected or modified (even as a copy) @@ -1767,6 +1802,10 @@ var QueryCoord_ServiceDesc = grpc.ServiceDesc{ MethodName: "ValidateAnalyzer", Handler: _QueryCoord_ValidateAnalyzer_Handler, }, + { + MethodName: "WaitCollectionReady", + Handler: _QueryCoord_WaitCollectionReady_Handler, + }, }, Streams: []grpc.StreamDesc{ {