add incremental mcp support (#620)

* add incremental mcp based on incremental xds

Extend the MCP to include support for incremental configuration
pushes. This is *heavily* derived from the new incremental xDS
protocol.

xref: https://github.com/envoyproxy/data-plane-api/blob/master/XDS_PROTOCOL.md#incremental-xds

* document initial_resource_versions should only be included in first request

* move resource version into metadata
This commit is contained in:
Jason Young 2018-08-27 11:50:57 -07:00 committed by istio-bot
parent fccf4189d6
commit 2198cccdc2
9 changed files with 1474 additions and 51 deletions

View File

@ -16,6 +16,8 @@
Client
MeshConfigRequest
MeshConfigResponse
IncrementalMeshConfigRequest
IncrementalMeshConfigResponse
Metadata
*/
package v1alpha1

View File

@ -27,7 +27,6 @@ option (gogoproto.equal_all) = true;
// Envelope for a configuration resource as transferred via the Mesh Configuration Protocol.
// Each envelope is made up of common metadata, and a type-specific resource payload.
message Envelope {
// Common metadata describing the resource.
istio.mcp.v1alpha1.Metadata metadata = 1;

View File

@ -2,7 +2,7 @@
title: istio.mcp.v1alpha1
layout: protoc-gen-docs
generator: protoc-gen-docs
number_of_entries: 7
number_of_entries: 9
---
<p>This package defines the common, core types used by the Mesh Configuration Protocol.</p>
@ -20,6 +20,12 @@ sequence updates across multiple resource types. A single stream
is used with multiple independent MeshConfigRequest /
MeshConfigResponses sequences multiplexed via the type URL.</p>
<pre id="AggregatedMeshConfigService-IncrementalAggregatedResources"><code class="language-proto">rpc IncrementalAggregatedResources(IncrementalMeshConfigRequest) returns (IncrementalMeshConfigResponse)
</code></pre>
<p>IncrementalAggregatedResources provides the ability to incrementally
update the resources on the client. This supports the goal of
scalability of MCP resources.</p>
</section>
<h2 id="Types">Types</h2>
<h3 id="Client">Client</h3>
@ -86,6 +92,145 @@ Each envelope is made up of common metadata, and a type-specific resource payloa
<td>
<p>The resource itself.</p>
</td>
</tr>
</tbody>
</table>
</section>
<h3 id="IncrementalMeshConfigRequest">IncrementalMeshConfigRequest</h3>
<section>
<p>IncrementalMeshConfigRequest are be sent in 2 situations:</p>
<ol>
<li><p>Initial message in a MCP bidirectional gRPC stream.</p></li>
<li><p>As a ACK or NACK response to a previous IncrementalMeshConfigResponse.
In this case the response<em>nonce is set to the nonce value in the Response.
ACK or NACK is determined by the absence or presence of error</em>detail.</p></li>
</ol>
<table class="message-fields">
<thead>
<tr>
<th>Field</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr id="IncrementalMeshConfigRequest-client">
<td><code>client</code></td>
<td><code><a href="#Client">Client</a></code></td>
<td>
<p>The client making the request.</p>
</td>
</tr>
<tr id="IncrementalMeshConfigRequest-type_url">
<td><code>typeUrl</code></td>
<td><code>string</code></td>
<td>
<p>Type of the resource that is being requested, e.g.
&ldquo;type.googleapis.com/istio.io.networking.v1alpha3.VirtualService&rdquo;.</p>
</td>
</tr>
<tr id="IncrementalMeshConfigRequest-initial_resource_versions">
<td><code>initialResourceVersions</code></td>
<td><code>map&lt;string,&nbsp;string&gt;</code></td>
<td>
<p>When the IncrementalMeshConfigRequest is the first in a stream,
the initial<em>resource</em>versions must be populated. Otherwise,
initial<em>resource</em>versions must be omitted. The keys are the
resources names of the MCP resources known to the MCP client. The
values in the map are the associated resource level version info.</p>
</td>
</tr>
<tr id="IncrementalMeshConfigRequest-response_nonce">
<td><code>responseNonce</code></td>
<td><code>string</code></td>
<td>
<p>When the IncrementalMeshConfigRequest is a ACK or NACK message in response
to a previous IncrementalMeshConfigResponse, the response<em>nonce must be the
nonce in the IncrementalMeshConfigResponse.
Otherwise response</em>nonce must be omitted.</p>
</td>
</tr>
<tr id="IncrementalMeshConfigRequest-error_detail">
<td><code>errorDetail</code></td>
<td><code><a href="#google-rpc-Status">google.rpc.Status</a></code></td>
<td>
<p>This is populated when the previous IncrementalMeshConfigResponses
failed to update configuration. The <em>message</em> field in <em>error_details</em>
provides the client internal exception related to the failure.</p>
</td>
</tr>
</tbody>
</table>
</section>
<h3 id="IncrementalMeshConfigResponse">IncrementalMeshConfigResponse</h3>
<section>
<p>IncrementalMeshConfigResponses do not need to include a full
snapshot of the tracked resources. Instead they are a diff to the
state of a MCP client. Per resource versions allow servers and
clients to track state at the resource granularity. An MCP
incremental session is always in the context of a gRPC
bidirectional stream. This allows the MCP server to keep track of
the state of MCP clients connected to it.</p>
<p>In Incremental MCP the nonce field is required and used to pair
IncrementalMeshConfigResponse to an IncrementalMeshConfigRequest
ACK or NACK. Optionally, a response message level
system<em>version</em>info is present for debugging purposes only.</p>
<table class="message-fields">
<thead>
<tr>
<th>Field</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr id="IncrementalMeshConfigResponse-system_version_info">
<td><code>systemVersionInfo</code></td>
<td><code>string</code></td>
<td>
<p>The version of the response data (used for debugging).</p>
</td>
</tr>
<tr id="IncrementalMeshConfigResponse-envelopes">
<td><code>envelopes</code></td>
<td><code><a href="#Envelope">Envelope[]</a></code></td>
<td>
<p>The response resources wrapped in the common MCP <em>Envelope</em>
message. These are typed resources that match the type url in the
IncrementalMeshConfigRequest.</p>
</td>
</tr>
<tr id="IncrementalMeshConfigResponse-removed_resources">
<td><code>removedResources</code></td>
<td><code>string[]</code></td>
<td>
<p>Resources names of resources that have be deleted and to be
removed from the MCP Client. Removed resources for missing
resources can be ignored.</p>
</td>
</tr>
<tr id="IncrementalMeshConfigResponse-nonce">
<td><code>nonce</code></td>
<td><code>string</code></td>
<td>
<p>The nonce provides a way for IncrementalMeshConfigRequests to
uniquely reference an IncrementalMeshConfigResponse. The nonce is
required.</p>
</td>
</tr>
</tbody>
@ -253,6 +398,15 @@ Envelope message.</p>
<td>
<p>The creation timestamp of the resource.</p>
</td>
</tr>
<tr id="Metadata-version">
<td><code>version</code></td>
<td><code>string</code></td>
<td>
<p>The resource level version. It allows MCP to track the state of
individual resources.</p>
</td>
</tr>
</tbody>

File diff suppressed because it is too large Load Diff

View File

@ -98,6 +98,73 @@ message MeshConfigResponse {
string nonce = 4;
}
// IncrementalMeshConfigRequest are be sent in 2 situations:
//
// 1. Initial message in a MCP bidirectional gRPC stream.
//
// 2. As a ACK or NACK response to a previous IncrementalMeshConfigResponse.
// In this case the response_nonce is set to the nonce value in the Response.
// ACK or NACK is determined by the absence or presence of error_detail.
message IncrementalMeshConfigRequest {
// The client making the request.
Client client = 1;
// Type of the resource that is being requested, e.g.
// "type.googleapis.com/istio.io.networking.v1alpha3.VirtualService".
string type_url = 2;
// When the IncrementalMeshConfigRequest is the first in a stream,
// the initial_resource_versions must be populated. Otherwise,
// initial_resource_versions must be omitted. The keys are the
// resources names of the MCP resources known to the MCP client. The
// values in the map are the associated resource level version info.
map<string, string> initial_resource_versions = 3;
// When the IncrementalMeshConfigRequest is a ACK or NACK message in response
// to a previous IncrementalMeshConfigResponse, the response_nonce must be the
// nonce in the IncrementalMeshConfigResponse.
// Otherwise response_nonce must be omitted.
string response_nonce = 4;
// This is populated when the previous IncrementalMeshConfigResponses
// failed to update configuration. The *message* field in *error_details*
// provides the client internal exception related to the failure.
google.rpc.Status error_detail = 5;
}
// IncrementalMeshConfigResponses do not need to include a full
// snapshot of the tracked resources. Instead they are a diff to the
// state of a MCP client. Per resource versions allow servers and
// clients to track state at the resource granularity. An MCP
// incremental session is always in the context of a gRPC
// bidirectional stream. This allows the MCP server to keep track of
// the state of MCP clients connected to it.
//
// In Incremental MCP the nonce field is required and used to pair
// IncrementalMeshConfigResponse to an IncrementalMeshConfigRequest
// ACK or NACK. Optionally, a response message level
// system_version_info is present for debugging purposes only.
message IncrementalMeshConfigResponse {
// The version of the response data (used for debugging).
string system_version_info = 1;
// The response resources wrapped in the common MCP *Envelope*
// message. These are typed resources that match the type url in the
// IncrementalMeshConfigRequest.
repeated Envelope envelopes = 2 [(gogoproto.nullable) = false];
// Resources names of resources that have be deleted and to be
// removed from the MCP Client. Removed resources for missing
// resources can be ignored.
repeated string removed_resources = 3;
// The nonce provides a way for IncrementalMeshConfigRequests to
// uniquely reference an IncrementalMeshConfigResponse. The nonce is
// required.
string nonce = 4;
}
// The aggregated mesh configuration services allow a single
// management server, via a single gRPC stream, to deliver all API
// updates.
@ -109,4 +176,11 @@ service AggregatedMeshConfigService {
rpc StreamAggregatedResources(stream MeshConfigRequest)
returns (stream MeshConfigResponse) {
}
// IncrementalAggregatedResources provides the ability to incrementally
// update the resources on the client. This supports the goal of
// scalability of MCP resources.
rpc IncrementalAggregatedResources(stream IncrementalMeshConfigRequest)
returns (stream IncrementalMeshConfigResponse) {
}
}

View File

@ -25,6 +25,9 @@ type Metadata struct {
Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
// The creation timestamp of the resource.
CreateTime *google_protobuf2.Timestamp `protobuf:"bytes,2,opt,name=create_time,json=createTime" json:"create_time,omitempty"`
// The resource level version. It allows MCP to track the state of
// individual resources.
Version string `protobuf:"bytes,3,opt,name=version,proto3" json:"version,omitempty"`
}
func (m *Metadata) Reset() { *m = Metadata{} }
@ -46,6 +49,13 @@ func (m *Metadata) GetCreateTime() *google_protobuf2.Timestamp {
return nil
}
func (m *Metadata) GetVersion() string {
if m != nil {
return m.Version
}
return ""
}
func init() {
proto.RegisterType((*Metadata)(nil), "istio.mcp.v1alpha1.Metadata")
}
@ -74,6 +84,9 @@ func (this *Metadata) Equal(that interface{}) bool {
if !this.CreateTime.Equal(that1.CreateTime) {
return false
}
if this.Version != that1.Version {
return false
}
return true
}
func (m *Metadata) Marshal() (dAtA []byte, err error) {
@ -107,6 +120,12 @@ func (m *Metadata) MarshalTo(dAtA []byte) (int, error) {
}
i += n1
}
if len(m.Version) > 0 {
dAtA[i] = 0x1a
i++
i = encodeVarintMetadata(dAtA, i, uint64(len(m.Version)))
i += copy(dAtA[i:], m.Version)
}
return i, nil
}
@ -130,6 +149,10 @@ func (m *Metadata) Size() (n int) {
l = m.CreateTime.Size()
n += 1 + l + sovMetadata(uint64(l))
}
l = len(m.Version)
if l > 0 {
n += 1 + l + sovMetadata(uint64(l))
}
return n
}
@ -237,6 +260,35 @@ func (m *Metadata) Unmarshal(dAtA []byte) error {
return err
}
iNdEx = postIndex
case 3:
if wireType != 2 {
return fmt.Errorf("proto: wrong wireType = %d for field Version", wireType)
}
var stringLen uint64
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return ErrIntOverflowMetadata
}
if iNdEx >= l {
return io.ErrUnexpectedEOF
}
b := dAtA[iNdEx]
iNdEx++
stringLen |= (uint64(b) & 0x7F) << shift
if b < 0x80 {
break
}
}
intStringLen := int(stringLen)
if intStringLen < 0 {
return ErrInvalidLengthMetadata
}
postIndex := iNdEx + intStringLen
if postIndex > l {
return io.ErrUnexpectedEOF
}
m.Version = string(dAtA[iNdEx:postIndex])
iNdEx = postIndex
default:
iNdEx = preIndex
skippy, err := skipMetadata(dAtA[iNdEx:])
@ -366,18 +418,19 @@ var (
func init() { proto.RegisterFile("mcp/v1alpha1/metadata.proto", fileDescriptorMetadata) }
var fileDescriptorMetadata = []byte{
// 204 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x92, 0xce, 0x4d, 0x2e, 0xd0,
0x2f, 0x33, 0x4c, 0xcc, 0x29, 0xc8, 0x48, 0x34, 0xd4, 0xcf, 0x4d, 0x2d, 0x49, 0x4c, 0x49, 0x2c,
0x49, 0xd4, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, 0x12, 0xca, 0x2c, 0x2e, 0xc9, 0xcc, 0xd7, 0xcb,
0x4d, 0x2e, 0xd0, 0x83, 0x29, 0x91, 0x12, 0x49, 0xcf, 0x4f, 0xcf, 0x07, 0x4b, 0xeb, 0x83, 0x58,
0x10, 0x95, 0x52, 0xf2, 0xe9, 0xf9, 0xf9, 0xe9, 0x39, 0xa9, 0xfa, 0x60, 0x5e, 0x52, 0x69, 0x9a,
0x7e, 0x49, 0x66, 0x6e, 0x6a, 0x71, 0x49, 0x62, 0x6e, 0x01, 0x44, 0x81, 0x52, 0x34, 0x17, 0x87,
0x2f, 0xd4, 0x70, 0x21, 0x21, 0x2e, 0x96, 0xbc, 0xc4, 0xdc, 0x54, 0x09, 0x46, 0x05, 0x46, 0x0d,
0xce, 0x20, 0x30, 0x5b, 0xc8, 0x9a, 0x8b, 0x3b, 0xb9, 0x28, 0x35, 0xb1, 0x24, 0x35, 0x1e, 0xa4,
0x53, 0x82, 0x49, 0x81, 0x51, 0x83, 0xdb, 0x48, 0x4a, 0x0f, 0x62, 0xac, 0x1e, 0xcc, 0x58, 0xbd,
0x10, 0x98, 0xb1, 0x41, 0x5c, 0x10, 0xe5, 0x20, 0x01, 0x27, 0xed, 0x15, 0x8f, 0xe4, 0x18, 0x4f,
0x3c, 0x92, 0x63, 0xbc, 0xf0, 0x48, 0x8e, 0xf1, 0xc1, 0x23, 0x39, 0xc6, 0x28, 0x49, 0x88, 0xcb,
0x33, 0xf3, 0xf5, 0x13, 0x0b, 0x32, 0xf5, 0x91, 0xfd, 0x98, 0xc4, 0x06, 0x36, 0xcc, 0x18, 0x10,
0x00, 0x00, 0xff, 0xff, 0x09, 0xde, 0xdc, 0x0e, 0xfa, 0x00, 0x00, 0x00,
// 220 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x4c, 0x8f, 0xbf, 0x4e, 0xc5, 0x20,
0x18, 0xc5, 0x83, 0x1a, 0xff, 0x70, 0x37, 0xe2, 0x80, 0x35, 0xc1, 0x1b, 0xa7, 0x26, 0x26, 0x90,
0xea, 0xe8, 0xe6, 0xee, 0xd2, 0x38, 0xb9, 0x98, 0xaf, 0x15, 0x91, 0xa4, 0xf4, 0x23, 0x2d, 0xed,
0x33, 0xf9, 0x28, 0x8e, 0x3e, 0x82, 0xe1, 0x49, 0x4c, 0x41, 0x92, 0xbb, 0x9d, 0x03, 0x3f, 0x7e,
0xe4, 0xd0, 0x6b, 0xd7, 0x7b, 0xb5, 0x36, 0x30, 0xf8, 0x4f, 0x68, 0x94, 0xd3, 0x01, 0xde, 0x21,
0x80, 0xf4, 0x13, 0x06, 0x64, 0xcc, 0xce, 0xc1, 0xa2, 0x74, 0xbd, 0x97, 0x05, 0xa9, 0x2e, 0x0d,
0x1a, 0x4c, 0xd7, 0x6a, 0x4b, 0x99, 0xac, 0x6e, 0x0c, 0xa2, 0x19, 0xb4, 0x4a, 0xad, 0x5b, 0x3e,
0x54, 0xb0, 0x4e, 0xcf, 0x01, 0x9c, 0xcf, 0xc0, 0xed, 0x42, 0xcf, 0x9f, 0xff, 0xe5, 0x8c, 0xd1,
0x93, 0x11, 0x9c, 0xe6, 0x64, 0x4f, 0xea, 0x8b, 0x36, 0x65, 0xf6, 0x48, 0x77, 0xfd, 0xa4, 0x21,
0xe8, 0xb7, 0xed, 0x25, 0x3f, 0xda, 0x93, 0x7a, 0x77, 0x5f, 0xc9, 0xac, 0x95, 0x45, 0x2b, 0x5f,
0x8a, 0xb6, 0xa5, 0x19, 0xdf, 0x0e, 0x18, 0xa7, 0x67, 0xab, 0x9e, 0x66, 0x8b, 0x23, 0x3f, 0x4e,
0xce, 0x52, 0x9f, 0xee, 0xbe, 0xa2, 0x20, 0xdf, 0x51, 0x90, 0x9f, 0x28, 0xc8, 0x6f, 0x14, 0xe4,
0xf5, 0x2a, 0x6f, 0xb2, 0xa8, 0xc0, 0x5b, 0x75, 0xb8, 0xbe, 0x3b, 0x4d, 0xdf, 0x3c, 0xfc, 0x05,
0x00, 0x00, 0xff, 0xff, 0x35, 0xb5, 0xd4, 0xb9, 0x14, 0x01, 0x00, 0x00,
}

View File

@ -32,4 +32,8 @@ message Metadata {
// The creation timestamp of the resource.
google.protobuf.Timestamp create_time = 2;
// The resource level version. It allows MCP to track the state of
// individual resources.
string version = 3;
}

View File

@ -23,7 +23,7 @@ DESCRIPTOR = _descriptor.FileDescriptor(
name='mcp/v1alpha1/mcp.proto',
package='istio.mcp.v1alpha1',
syntax='proto3',
serialized_pb=_b('\n\x16mcp/v1alpha1/mcp.proto\x12\x12istio.mcp.v1alpha1\x1a\x1cgoogle/protobuf/struct.proto\x1a\x17google/rpc/status.proto\x1a\x14gogoproto/gogo.proto\x1a\x1bmcp/v1alpha1/envelope.proto\"?\n\x06\x43lient\x12\n\n\x02id\x18\x01 \x01(\t\x12)\n\x08metadata\x18\x02 \x01(\x0b\x32\x17.google.protobuf.Struct\"\xa9\x01\n\x11MeshConfigRequest\x12\x14\n\x0cversion_info\x18\x01 \x01(\t\x12*\n\x06\x63lient\x18\x02 \x01(\x0b\x32\x1a.istio.mcp.v1alpha1.Client\x12\x10\n\x08type_url\x18\x03 \x01(\t\x12\x16\n\x0eresponse_nonce\x18\x04 \x01(\t\x12(\n\x0c\x65rror_detail\x18\x05 \x01(\x0b\x32\x12.google.rpc.Status\"\x82\x01\n\x12MeshConfigResponse\x12\x14\n\x0cversion_info\x18\x01 \x01(\t\x12\x35\n\tenvelopes\x18\x02 \x03(\x0b\x32\x1c.istio.mcp.v1alpha1.EnvelopeB\x04\xc8\xde\x1f\x00\x12\x10\n\x08type_url\x18\x03 \x01(\t\x12\r\n\x05nonce\x18\x04 \x01(\t2\x8f\x01\n\x1b\x41ggregatedMeshConfigService\x12p\n\x19StreamAggregatedResources\x12%.istio.mcp.v1alpha1.MeshConfigRequest\x1a&.istio.mcp.v1alpha1.MeshConfigResponse\"\x00(\x01\x30\x01\x42\x1fZ\x19istio.io/api/mcp/v1alpha1\xa8\xe2\x1e\x01\x62\x06proto3')
serialized_pb=_b('\n\x16mcp/v1alpha1/mcp.proto\x12\x12istio.mcp.v1alpha1\x1a\x1cgoogle/protobuf/struct.proto\x1a\x17google/rpc/status.proto\x1a\x14gogoproto/gogo.proto\x1a\x1bmcp/v1alpha1/envelope.proto\"?\n\x06\x43lient\x12\n\n\x02id\x18\x01 \x01(\t\x12)\n\x08metadata\x18\x02 \x01(\x0b\x32\x17.google.protobuf.Struct\"\xa9\x01\n\x11MeshConfigRequest\x12\x14\n\x0cversion_info\x18\x01 \x01(\t\x12*\n\x06\x63lient\x18\x02 \x01(\x0b\x32\x1a.istio.mcp.v1alpha1.Client\x12\x10\n\x08type_url\x18\x03 \x01(\t\x12\x16\n\x0eresponse_nonce\x18\x04 \x01(\t\x12(\n\x0c\x65rror_detail\x18\x05 \x01(\x0b\x32\x12.google.rpc.Status\"\x82\x01\n\x12MeshConfigResponse\x12\x14\n\x0cversion_info\x18\x01 \x01(\t\x12\x35\n\tenvelopes\x18\x02 \x03(\x0b\x32\x1c.istio.mcp.v1alpha1.EnvelopeB\x04\xc8\xde\x1f\x00\x12\x10\n\x08type_url\x18\x03 \x01(\t\x12\r\n\x05nonce\x18\x04 \x01(\t\"\xd0\x02\n\x1cIncrementalMeshConfigRequest\x12*\n\x06\x63lient\x18\x01 \x01(\x0b\x32\x1a.istio.mcp.v1alpha1.Client\x12\x10\n\x08type_url\x18\x02 \x01(\t\x12p\n\x19initial_resource_versions\x18\x03 \x03(\x0b\x32M.istio.mcp.v1alpha1.IncrementalMeshConfigRequest.InitialResourceVersionsEntry\x12\x16\n\x0eresponse_nonce\x18\x04 \x01(\t\x12(\n\x0c\x65rror_detail\x18\x05 \x01(\x0b\x32\x12.google.rpc.Status\x1a>\n\x1cInitialResourceVersionsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"\x9d\x01\n\x1dIncrementalMeshConfigResponse\x12\x1b\n\x13system_version_info\x18\x01 \x01(\t\x12\x35\n\tenvelopes\x18\x02 \x03(\x0b\x32\x1c.istio.mcp.v1alpha1.EnvelopeB\x04\xc8\xde\x1f\x00\x12\x19\n\x11removed_resources\x18\x03 \x03(\t\x12\r\n\x05nonce\x18\x04 \x01(\t2\x9d\x02\n\x1b\x41ggregatedMeshConfigService\x12p\n\x19StreamAggregatedResources\x12%.istio.mcp.v1alpha1.MeshConfigRequest\x1a&.istio.mcp.v1alpha1.MeshConfigResponse\"\x00(\x01\x30\x01\x12\x8b\x01\n\x1eIncrementalAggregatedResources\x12\x30.istio.mcp.v1alpha1.IncrementalMeshConfigRequest\x1a\x31.istio.mcp.v1alpha1.IncrementalMeshConfigResponse\"\x00(\x01\x30\x01\x42\x1fZ\x19istio.io/api/mcp/v1alpha1\xa8\xe2\x1e\x01\x62\x06proto3')
,
dependencies=[google_dot_protobuf_dot_struct__pb2.DESCRIPTOR,google_dot_rpc_dot_status__pb2.DESCRIPTOR,gogoproto_dot_gogo__pb2.DESCRIPTOR,mcp_dot_v1alpha1_dot_envelope__pb2.DESCRIPTOR,])
@ -178,13 +178,168 @@ _MESHCONFIGRESPONSE = _descriptor.Descriptor(
serialized_end=520,
)
_INCREMENTALMESHCONFIGREQUEST_INITIALRESOURCEVERSIONSENTRY = _descriptor.Descriptor(
name='InitialResourceVersionsEntry',
full_name='istio.mcp.v1alpha1.IncrementalMeshConfigRequest.InitialResourceVersionsEntry',
filename=None,
file=DESCRIPTOR,
containing_type=None,
fields=[
_descriptor.FieldDescriptor(
name='key', full_name='istio.mcp.v1alpha1.IncrementalMeshConfigRequest.InitialResourceVersionsEntry.key', index=0,
number=1, type=9, cpp_type=9, label=1,
has_default_value=False, default_value=_b("").decode('utf-8'),
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
options=None, file=DESCRIPTOR),
_descriptor.FieldDescriptor(
name='value', full_name='istio.mcp.v1alpha1.IncrementalMeshConfigRequest.InitialResourceVersionsEntry.value', index=1,
number=2, type=9, cpp_type=9, label=1,
has_default_value=False, default_value=_b("").decode('utf-8'),
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
options=None, file=DESCRIPTOR),
],
extensions=[
],
nested_types=[],
enum_types=[
],
options=_descriptor._ParseOptions(descriptor_pb2.MessageOptions(), _b('8\001')),
is_extendable=False,
syntax='proto3',
extension_ranges=[],
oneofs=[
],
serialized_start=797,
serialized_end=859,
)
_INCREMENTALMESHCONFIGREQUEST = _descriptor.Descriptor(
name='IncrementalMeshConfigRequest',
full_name='istio.mcp.v1alpha1.IncrementalMeshConfigRequest',
filename=None,
file=DESCRIPTOR,
containing_type=None,
fields=[
_descriptor.FieldDescriptor(
name='client', full_name='istio.mcp.v1alpha1.IncrementalMeshConfigRequest.client', index=0,
number=1, type=11, cpp_type=10, label=1,
has_default_value=False, default_value=None,
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
options=None, file=DESCRIPTOR),
_descriptor.FieldDescriptor(
name='type_url', full_name='istio.mcp.v1alpha1.IncrementalMeshConfigRequest.type_url', index=1,
number=2, type=9, cpp_type=9, label=1,
has_default_value=False, default_value=_b("").decode('utf-8'),
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
options=None, file=DESCRIPTOR),
_descriptor.FieldDescriptor(
name='initial_resource_versions', full_name='istio.mcp.v1alpha1.IncrementalMeshConfigRequest.initial_resource_versions', index=2,
number=3, type=11, cpp_type=10, label=3,
has_default_value=False, default_value=[],
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
options=None, file=DESCRIPTOR),
_descriptor.FieldDescriptor(
name='response_nonce', full_name='istio.mcp.v1alpha1.IncrementalMeshConfigRequest.response_nonce', index=3,
number=4, type=9, cpp_type=9, label=1,
has_default_value=False, default_value=_b("").decode('utf-8'),
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
options=None, file=DESCRIPTOR),
_descriptor.FieldDescriptor(
name='error_detail', full_name='istio.mcp.v1alpha1.IncrementalMeshConfigRequest.error_detail', index=4,
number=5, type=11, cpp_type=10, label=1,
has_default_value=False, default_value=None,
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
options=None, file=DESCRIPTOR),
],
extensions=[
],
nested_types=[_INCREMENTALMESHCONFIGREQUEST_INITIALRESOURCEVERSIONSENTRY, ],
enum_types=[
],
options=None,
is_extendable=False,
syntax='proto3',
extension_ranges=[],
oneofs=[
],
serialized_start=523,
serialized_end=859,
)
_INCREMENTALMESHCONFIGRESPONSE = _descriptor.Descriptor(
name='IncrementalMeshConfigResponse',
full_name='istio.mcp.v1alpha1.IncrementalMeshConfigResponse',
filename=None,
file=DESCRIPTOR,
containing_type=None,
fields=[
_descriptor.FieldDescriptor(
name='system_version_info', full_name='istio.mcp.v1alpha1.IncrementalMeshConfigResponse.system_version_info', index=0,
number=1, type=9, cpp_type=9, label=1,
has_default_value=False, default_value=_b("").decode('utf-8'),
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
options=None, file=DESCRIPTOR),
_descriptor.FieldDescriptor(
name='envelopes', full_name='istio.mcp.v1alpha1.IncrementalMeshConfigResponse.envelopes', index=1,
number=2, type=11, cpp_type=10, label=3,
has_default_value=False, default_value=[],
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
options=_descriptor._ParseOptions(descriptor_pb2.FieldOptions(), _b('\310\336\037\000')), file=DESCRIPTOR),
_descriptor.FieldDescriptor(
name='removed_resources', full_name='istio.mcp.v1alpha1.IncrementalMeshConfigResponse.removed_resources', index=2,
number=3, type=9, cpp_type=9, label=3,
has_default_value=False, default_value=[],
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
options=None, file=DESCRIPTOR),
_descriptor.FieldDescriptor(
name='nonce', full_name='istio.mcp.v1alpha1.IncrementalMeshConfigResponse.nonce', index=3,
number=4, type=9, cpp_type=9, label=1,
has_default_value=False, default_value=_b("").decode('utf-8'),
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
options=None, file=DESCRIPTOR),
],
extensions=[
],
nested_types=[],
enum_types=[
],
options=None,
is_extendable=False,
syntax='proto3',
extension_ranges=[],
oneofs=[
],
serialized_start=862,
serialized_end=1019,
)
_CLIENT.fields_by_name['metadata'].message_type = google_dot_protobuf_dot_struct__pb2._STRUCT
_MESHCONFIGREQUEST.fields_by_name['client'].message_type = _CLIENT
_MESHCONFIGREQUEST.fields_by_name['error_detail'].message_type = google_dot_rpc_dot_status__pb2._STATUS
_MESHCONFIGRESPONSE.fields_by_name['envelopes'].message_type = mcp_dot_v1alpha1_dot_envelope__pb2._ENVELOPE
_INCREMENTALMESHCONFIGREQUEST_INITIALRESOURCEVERSIONSENTRY.containing_type = _INCREMENTALMESHCONFIGREQUEST
_INCREMENTALMESHCONFIGREQUEST.fields_by_name['client'].message_type = _CLIENT
_INCREMENTALMESHCONFIGREQUEST.fields_by_name['initial_resource_versions'].message_type = _INCREMENTALMESHCONFIGREQUEST_INITIALRESOURCEVERSIONSENTRY
_INCREMENTALMESHCONFIGREQUEST.fields_by_name['error_detail'].message_type = google_dot_rpc_dot_status__pb2._STATUS
_INCREMENTALMESHCONFIGRESPONSE.fields_by_name['envelopes'].message_type = mcp_dot_v1alpha1_dot_envelope__pb2._ENVELOPE
DESCRIPTOR.message_types_by_name['Client'] = _CLIENT
DESCRIPTOR.message_types_by_name['MeshConfigRequest'] = _MESHCONFIGREQUEST
DESCRIPTOR.message_types_by_name['MeshConfigResponse'] = _MESHCONFIGRESPONSE
DESCRIPTOR.message_types_by_name['IncrementalMeshConfigRequest'] = _INCREMENTALMESHCONFIGREQUEST
DESCRIPTOR.message_types_by_name['IncrementalMeshConfigResponse'] = _INCREMENTALMESHCONFIGRESPONSE
_sym_db.RegisterFileDescriptor(DESCRIPTOR)
Client = _reflection.GeneratedProtocolMessageType('Client', (_message.Message,), dict(
@ -208,11 +363,37 @@ MeshConfigResponse = _reflection.GeneratedProtocolMessageType('MeshConfigRespons
))
_sym_db.RegisterMessage(MeshConfigResponse)
IncrementalMeshConfigRequest = _reflection.GeneratedProtocolMessageType('IncrementalMeshConfigRequest', (_message.Message,), dict(
InitialResourceVersionsEntry = _reflection.GeneratedProtocolMessageType('InitialResourceVersionsEntry', (_message.Message,), dict(
DESCRIPTOR = _INCREMENTALMESHCONFIGREQUEST_INITIALRESOURCEVERSIONSENTRY,
__module__ = 'mcp.v1alpha1.mcp_pb2'
# @@protoc_insertion_point(class_scope:istio.mcp.v1alpha1.IncrementalMeshConfigRequest.InitialResourceVersionsEntry)
))
,
DESCRIPTOR = _INCREMENTALMESHCONFIGREQUEST,
__module__ = 'mcp.v1alpha1.mcp_pb2'
# @@protoc_insertion_point(class_scope:istio.mcp.v1alpha1.IncrementalMeshConfigRequest)
))
_sym_db.RegisterMessage(IncrementalMeshConfigRequest)
_sym_db.RegisterMessage(IncrementalMeshConfigRequest.InitialResourceVersionsEntry)
IncrementalMeshConfigResponse = _reflection.GeneratedProtocolMessageType('IncrementalMeshConfigResponse', (_message.Message,), dict(
DESCRIPTOR = _INCREMENTALMESHCONFIGRESPONSE,
__module__ = 'mcp.v1alpha1.mcp_pb2'
# @@protoc_insertion_point(class_scope:istio.mcp.v1alpha1.IncrementalMeshConfigResponse)
))
_sym_db.RegisterMessage(IncrementalMeshConfigResponse)
DESCRIPTOR.has_options = True
DESCRIPTOR._options = _descriptor._ParseOptions(descriptor_pb2.FileOptions(), _b('Z\031istio.io/api/mcp/v1alpha1\250\342\036\001'))
_MESHCONFIGRESPONSE.fields_by_name['envelopes'].has_options = True
_MESHCONFIGRESPONSE.fields_by_name['envelopes']._options = _descriptor._ParseOptions(descriptor_pb2.FieldOptions(), _b('\310\336\037\000'))
_INCREMENTALMESHCONFIGREQUEST_INITIALRESOURCEVERSIONSENTRY.has_options = True
_INCREMENTALMESHCONFIGREQUEST_INITIALRESOURCEVERSIONSENTRY._options = _descriptor._ParseOptions(descriptor_pb2.MessageOptions(), _b('8\001'))
_INCREMENTALMESHCONFIGRESPONSE.fields_by_name['envelopes'].has_options = True
_INCREMENTALMESHCONFIGRESPONSE.fields_by_name['envelopes']._options = _descriptor._ParseOptions(descriptor_pb2.FieldOptions(), _b('\310\336\037\000'))
_AGGREGATEDMESHCONFIGSERVICE = _descriptor.ServiceDescriptor(
name='AggregatedMeshConfigService',
@ -220,8 +401,8 @@ _AGGREGATEDMESHCONFIGSERVICE = _descriptor.ServiceDescriptor(
file=DESCRIPTOR,
index=0,
options=None,
serialized_start=523,
serialized_end=666,
serialized_start=1022,
serialized_end=1307,
methods=[
_descriptor.MethodDescriptor(
name='StreamAggregatedResources',
@ -232,6 +413,15 @@ _AGGREGATEDMESHCONFIGSERVICE = _descriptor.ServiceDescriptor(
output_type=_MESHCONFIGRESPONSE,
options=None,
),
_descriptor.MethodDescriptor(
name='IncrementalAggregatedResources',
full_name='istio.mcp.v1alpha1.AggregatedMeshConfigService.IncrementalAggregatedResources',
index=1,
containing_service=None,
input_type=_INCREMENTALMESHCONFIGREQUEST,
output_type=_INCREMENTALMESHCONFIGRESPONSE,
options=None,
),
])
_sym_db.RegisterServiceDescriptor(_AGGREGATEDMESHCONFIGSERVICE)

View File

@ -21,7 +21,7 @@ DESCRIPTOR = _descriptor.FileDescriptor(
name='mcp/v1alpha1/metadata.proto',
package='istio.mcp.v1alpha1',
syntax='proto3',
serialized_pb=_b('\n\x1bmcp/v1alpha1/metadata.proto\x12\x12istio.mcp.v1alpha1\x1a\x14gogoproto/gogo.proto\x1a\x1fgoogle/protobuf/timestamp.proto\"I\n\x08Metadata\x12\x0c\n\x04name\x18\x01 \x01(\t\x12/\n\x0b\x63reate_time\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.TimestampB\x1fZ\x19istio.io/api/mcp/v1alpha1\xa8\xe2\x1e\x01\x62\x06proto3')
serialized_pb=_b('\n\x1bmcp/v1alpha1/metadata.proto\x12\x12istio.mcp.v1alpha1\x1a\x14gogoproto/gogo.proto\x1a\x1fgoogle/protobuf/timestamp.proto\"Z\n\x08Metadata\x12\x0c\n\x04name\x18\x01 \x01(\t\x12/\n\x0b\x63reate_time\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12\x0f\n\x07version\x18\x03 \x01(\tB\x1fZ\x19istio.io/api/mcp/v1alpha1\xa8\xe2\x1e\x01\x62\x06proto3')
,
dependencies=[gogoproto_dot_gogo__pb2.DESCRIPTOR,google_dot_protobuf_dot_timestamp__pb2.DESCRIPTOR,])
@ -49,6 +49,13 @@ _METADATA = _descriptor.Descriptor(
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
options=None, file=DESCRIPTOR),
_descriptor.FieldDescriptor(
name='version', full_name='istio.mcp.v1alpha1.Metadata.version', index=2,
number=3, type=9, cpp_type=9, label=1,
has_default_value=False, default_value=_b("").decode('utf-8'),
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
options=None, file=DESCRIPTOR),
],
extensions=[
],
@ -62,7 +69,7 @@ _METADATA = _descriptor.Descriptor(
oneofs=[
],
serialized_start=106,
serialized_end=179,
serialized_end=196,
)
_METADATA.fields_by_name['create_time'].message_type = google_dot_protobuf_dot_timestamp__pb2._TIMESTAMP