From bc1451a35f3871c3459955956eaa35f48abea761 Mon Sep 17 00:00:00 2001 From: Chandan Kumar Date: Fri, 2 Aug 2024 11:15:13 +0530 Subject: [PATCH] feat: Add ObservedGeneration field in vertex status and use it for calculating status (#1892) Signed-off-by: chandankumar4 --- api/json-schema/schema.json | 5 + api/openapi-spec/swagger.json | 5 + .../full/numaflow.numaproj.io_vertices.yaml | 3 + config/install.yaml | 3 + config/namespace-install.yaml | 3 + docs/APIs.md | 19 ++ pkg/apis/numaflow/v1alpha1/generated.pb.go | 174 ++++++++++-------- pkg/apis/numaflow/v1alpha1/generated.proto | 3 + .../numaflow/v1alpha1/openapi_generated.go | 7 + pkg/apis/numaflow/v1alpha1/vertex_types.go | 7 + pkg/reconciler/isbsvc/installer/jetstream.go | 6 +- .../isbsvc/installer/native_redis.go | 12 +- pkg/reconciler/isbsvc/installer/watcher.go | 20 +- .../isbsvc/installer/watcher_test.go | 9 +- pkg/reconciler/pipeline/watcher.go | 17 +- pkg/reconciler/pipeline/watcher_test.go | 39 +++- pkg/reconciler/vertex/controller.go | 1 + 17 files changed, 227 insertions(+), 106 deletions(-) diff --git a/api/json-schema/schema.json b/api/json-schema/schema.json index 182d559307..672241cef4 100644 --- a/api/json-schema/schema.json +++ b/api/json-schema/schema.json @@ -20187,6 +20187,11 @@ "message": { "type": "string" }, + "observedGeneration": { + "description": "ObservedGeneration stores the generation value observed by the controller.", + "format": "int64", + "type": "integer" + }, "phase": { "type": "string" }, diff --git a/api/openapi-spec/swagger.json b/api/openapi-spec/swagger.json index 970d40c2b4..54a84b6a45 100644 --- a/api/openapi-spec/swagger.json +++ b/api/openapi-spec/swagger.json @@ -20169,6 +20169,11 @@ "message": { "type": "string" }, + "observedGeneration": { + "description": "ObservedGeneration stores the generation value observed by the controller.", + "type": "integer", + "format": "int64" + }, "phase": { "type": "string" }, diff --git a/config/base/crds/full/numaflow.numaproj.io_vertices.yaml b/config/base/crds/full/numaflow.numaproj.io_vertices.yaml index a59413c864..b192548491 100644 --- a/config/base/crds/full/numaflow.numaproj.io_vertices.yaml +++ b/config/base/crds/full/numaflow.numaproj.io_vertices.yaml @@ -5449,6 +5449,9 @@ spec: type: string message: type: string + observedGeneration: + format: int64 + type: integer phase: enum: - "" diff --git a/config/install.yaml b/config/install.yaml index 47a68284f8..fe76099057 100644 --- a/config/install.yaml +++ b/config/install.yaml @@ -17837,6 +17837,9 @@ spec: type: string message: type: string + observedGeneration: + format: int64 + type: integer phase: enum: - "" diff --git a/config/namespace-install.yaml b/config/namespace-install.yaml index 54b23ef9db..5ebdcc3712 100644 --- a/config/namespace-install.yaml +++ b/config/namespace-install.yaml @@ -17837,6 +17837,9 @@ spec: type: string message: type: string + observedGeneration: + format: int64 + type: integer phase: enum: - "" diff --git a/docs/APIs.md b/docs/APIs.md index 5640bc0c23..3b6632fa1c 100644 --- a/docs/APIs.md +++ b/docs/APIs.md @@ -9973,6 +9973,25 @@ Kubernetes meta/v1.Time + + + + +observedGeneration
int64 + + + + +

+ +ObservedGeneration stores the generation value observed by the +controller. +

+ + + + + diff --git a/pkg/apis/numaflow/v1alpha1/generated.pb.go b/pkg/apis/numaflow/v1alpha1/generated.pb.go index 99fc0bc46c..a7ec5071ed 100644 --- a/pkg/apis/numaflow/v1alpha1/generated.pb.go +++ b/pkg/apis/numaflow/v1alpha1/generated.pb.go @@ -2501,13 +2501,13 @@ func init() { } var fileDescriptor_9d0d1b17d3865563 = []byte{ - // 7207 bytes of a gzipped FileDescriptorProto + // 7214 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x7d, 0x5b, 0x6c, 0x24, 0xc7, 0x75, 0xa8, 0xe6, 0x45, 0xce, 0x9c, 0x21, 0xb9, 0xbb, 0xb5, 0xd2, 0x8a, 0x4b, 0xad, 0x76, 0xd6, 0xed, 0x2b, 0xdd, 0xf5, 0xb5, 0x4d, 0x5e, 0xf1, 0x4a, 0x96, 0xec, 0x6b, 0x5b, 0xe2, 0x90, 0x4b, 0x2e, 0xb5, 0xe4, 0x2e, 0x7d, 0x86, 0x5c, 0xc9, 0xd6, 0xb5, 0x75, 0x9b, 0xdd, 0xc5, 0x61, 0x6b, - 0x7a, 0xba, 0xc7, 0xdd, 0x3d, 0xdc, 0xa5, 0x1c, 0xc3, 0xaf, 0x0f, 0x29, 0x08, 0x82, 0x04, 0xfe, - 0x32, 0x10, 0x38, 0x41, 0x82, 0x00, 0xfe, 0x30, 0xfc, 0x13, 0xc0, 0xf9, 0x08, 0x10, 0xc4, 0x01, + 0x7a, 0xba, 0xc7, 0xdd, 0x3d, 0xdc, 0xa5, 0x1c, 0xc3, 0xaf, 0x0f, 0x29, 0x48, 0x82, 0x04, 0xfe, + 0x32, 0x10, 0x38, 0x41, 0x82, 0x00, 0xfe, 0x30, 0xfc, 0x13, 0xc0, 0xf9, 0x08, 0x10, 0x24, 0x01, 0x82, 0xc0, 0x09, 0xf2, 0xf0, 0x47, 0x80, 0x38, 0x08, 0x40, 0xc4, 0x0c, 0xf2, 0x91, 0x04, 0x31, 0x8c, 0x18, 0x48, 0x9c, 0x85, 0x01, 0x07, 0xf5, 0xea, 0xd7, 0xf4, 0xec, 0x92, 0xd3, 0xa4, 0xbc, 0x4e, 0xfc, 0x37, 0x5d, 0x75, 0xea, 0x9c, 0xea, 0xd3, 0x55, 0x75, 0x9e, 0x75, 0x06, 0x56, 0xda, @@ -2526,7 +2526,7 @@ var fileDescriptor_9d0d1b17d3865563 = []byte{ 0x5f, 0x98, 0x1d, 0xf1, 0x5b, 0xcc, 0xae, 0x4b, 0x44, 0xcd, 0x89, 0xc3, 0x83, 0x46, 0x55, 0x3d, 0x61, 0x48, 0x80, 0x7c, 0xa5, 0x00, 0x13, 0x8e, 0x6b, 0xd2, 0x16, 0xb5, 0xa9, 0x11, 0xb8, 0xde, 0x74, 0xf1, 0x4a, 0xe9, 0x6a, 0x7d, 0xfe, 0x53, 0x23, 0x53, 0xcc, 0x78, 0xa3, 0xd9, 0x9b, 0x31, - 0x02, 0xd7, 0x9c, 0xc0, 0xdb, 0x6f, 0x3e, 0xfa, 0xed, 0x83, 0xc6, 0x23, 0x87, 0x07, 0x8d, 0x89, + 0x02, 0xd7, 0x9c, 0xc0, 0xdb, 0x6f, 0x3e, 0xfa, 0xad, 0x83, 0xc6, 0x23, 0x87, 0x07, 0x8d, 0x89, 0x78, 0x17, 0x26, 0x66, 0x42, 0xb6, 0xa0, 0x1e, 0xb8, 0x36, 0x63, 0x99, 0xe5, 0x3a, 0xfe, 0x74, 0x89, 0x4f, 0xec, 0xf2, 0xac, 0xe0, 0x36, 0x23, 0x3f, 0xcb, 0x96, 0xcb, 0xec, 0xde, 0x33, 0xb3, 0x9b, 0x21, 0x58, 0xf3, 0xbc, 0x44, 0x5c, 0x8f, 0xda, 0x7c, 0x8c, 0xe3, 0x21, 0x14, 0xce, 0xf8, @@ -2550,7 +2550,7 @@ var fileDescriptor_9d0d1b17d3865563 = []byte{ 0xc2, 0x45, 0xd7, 0xd9, 0xb1, 0xda, 0xd3, 0x93, 0xfc, 0x6b, 0x5c, 0x19, 0xb2, 0xa0, 0x97, 0x6e, 0xb6, 0x04, 0x5c, 0x73, 0x52, 0x92, 0x13, 0x8f, 0x18, 0x61, 0x98, 0x79, 0x11, 0xce, 0x0d, 0xec, 0x5a, 0x72, 0x16, 0x4a, 0x1d, 0xba, 0xcf, 0x0f, 0xa5, 0x1a, 0xb2, 0x9f, 0xe4, 0x51, 0xa8, 0xec, - 0xe9, 0x76, 0x9f, 0x4e, 0x17, 0x79, 0x9b, 0x78, 0xf8, 0x50, 0xf1, 0x85, 0x82, 0xf6, 0x5b, 0x25, + 0xe9, 0x76, 0x9f, 0x4e, 0x17, 0x79, 0x9b, 0x78, 0xf8, 0x50, 0xf1, 0x85, 0x82, 0xf6, 0x9b, 0x25, 0x98, 0x50, 0x67, 0x41, 0xcb, 0x72, 0x3a, 0xe4, 0x15, 0x28, 0xd9, 0x6e, 0x5b, 0x9e, 0x68, 0x1f, 0x1e, 0xf9, 0x7c, 0x59, 0x73, 0xdb, 0xcd, 0xf1, 0xc3, 0x83, 0x46, 0x69, 0xcd, 0x6d, 0x23, 0xc3, 0x48, 0x0c, 0xa8, 0x74, 0xf4, 0x9d, 0x8e, 0xce, 0xe7, 0x50, 0x9f, 0x6f, 0x8e, 0x8c, 0xfa, 0x06, @@ -2558,14 +2558,14 @@ var fileDescriptor_9d0d1b17d3865563 = []byte{ 0xdb, 0xd6, 0x8d, 0xce, 0xae, 0x6b, 0xd3, 0xe9, 0x52, 0x4e, 0x42, 0x4d, 0x85, 0x49, 0x7c, 0x80, 0xf0, 0x11, 0x23, 0x1a, 0xc4, 0x80, 0xb1, 0xbe, 0xe9, 0x5b, 0x4e, 0x47, 0x9e, 0x4e, 0x2f, 0x8e, 0x4c, 0x6d, 0x6b, 0x89, 0xbf, 0x13, 0x1c, 0x1e, 0x34, 0xc6, 0xc4, 0x6f, 0x94, 0xa8, 0xb5, 0xef, - 0xd7, 0x61, 0x4a, 0x7d, 0xa4, 0xdb, 0xd4, 0x0b, 0xe8, 0x5d, 0x72, 0x05, 0xca, 0x0e, 0xdb, 0x34, + 0xd5, 0x61, 0x4a, 0x7d, 0xa4, 0xdb, 0xd4, 0x0b, 0xe8, 0x5d, 0x72, 0x05, 0xca, 0x0e, 0xdb, 0x34, 0xfc, 0x23, 0x37, 0x27, 0xe4, 0x9a, 0x2c, 0xf3, 0xcd, 0xc2, 0x7b, 0xd8, 0xcc, 0x84, 0xc0, 0x95, 0x0c, 0x1f, 0x7d, 0x66, 0x2d, 0x8e, 0x46, 0xcc, 0x4c, 0xfc, 0x46, 0x89, 0x9a, 0xbc, 0x06, 0x65, 0xfe, 0xf2, 0x82, 0xd5, 0x1f, 0x19, 0x9d, 0x04, 0x7b, 0xf5, 0x2a, 0x7b, 0x03, 0xfe, 0xe2, 0x1c, 0x29, 0x5b, 0x8a, 0x7d, 0x73, 0x47, 0x32, 0xf6, 0xc3, 0x39, 0x18, 0xbb, 0x2c, 0x96, 0xe2, 0xd6, - 0xd2, 0x32, 0x32, 0x8c, 0xe4, 0x57, 0x0a, 0x70, 0xce, 0x70, 0x9d, 0x40, 0x67, 0x4a, 0x80, 0x12, + 0xd2, 0x32, 0x32, 0x8c, 0xe4, 0x97, 0x0b, 0x70, 0xce, 0x70, 0x9d, 0x40, 0x67, 0x4a, 0x80, 0x12, 0x7f, 0xd3, 0x15, 0x4e, 0xe7, 0xe5, 0x91, 0xe9, 0x2c, 0xa6, 0x31, 0x36, 0x1f, 0x63, 0xa7, 0xf9, - 0x40, 0x33, 0x0e, 0xd2, 0x26, 0xbf, 0x56, 0x80, 0xc7, 0xd8, 0x29, 0x3b, 0x00, 0xcc, 0x65, 0xc3, + 0x40, 0x33, 0x0e, 0xd2, 0x26, 0xbf, 0x5a, 0x80, 0xc7, 0xd8, 0x29, 0x3b, 0x00, 0xcc, 0x65, 0xc3, 0xc9, 0xce, 0xea, 0xe2, 0xe1, 0x41, 0xe3, 0xb1, 0xd5, 0x2c, 0x62, 0x98, 0x3d, 0x07, 0x36, 0xbb, 0xf3, 0xfa, 0xa0, 0xc2, 0xc0, 0xe5, 0x4e, 0x7d, 0x7e, 0xed, 0x24, 0x95, 0x90, 0xe6, 0x13, 0x72, 0x29, 0x67, 0xe9, 0x5c, 0x98, 0x35, 0x0b, 0x72, 0x0d, 0xc6, 0xf7, 0x5c, 0xbb, 0xdf, 0xa5, 0xfe, @@ -2583,10 +2583,10 @@ var fileDescriptor_9d0d1b17d3865563 = []byte{ 0x38, 0x3c, 0x68, 0x3c, 0xd1, 0x1a, 0x4e, 0x12, 0xef, 0x37, 0x1f, 0xed, 0x15, 0x98, 0x5c, 0xe8, 0x07, 0xbb, 0xae, 0x67, 0xbd, 0xc9, 0xd5, 0x61, 0xb2, 0x0c, 0x95, 0x80, 0xab, 0x35, 0x42, 0x2e, 0x3f, 0x95, 0xc5, 0x6a, 0xa1, 0x62, 0xde, 0xa0, 0xfb, 0x4a, 0x1b, 0x10, 0xf2, 0x51, 0xa8, 0x39, - 0x62, 0xb8, 0xf6, 0x9b, 0x05, 0xa8, 0x35, 0x75, 0xdf, 0x32, 0x18, 0x7a, 0xb2, 0x08, 0xe5, 0xbe, + 0x62, 0xb8, 0xf6, 0x1b, 0x05, 0xa8, 0x35, 0x75, 0xdf, 0x32, 0x18, 0x7a, 0xb2, 0x08, 0xe5, 0xbe, 0x4f, 0xbd, 0xe3, 0x21, 0xe5, 0xa7, 0xf4, 0x96, 0x4f, 0x3d, 0xe4, 0x83, 0xc9, 0x2d, 0xa8, 0xf6, 0x74, 0xdf, 0xbf, 0xe3, 0x7a, 0xa6, 0x94, 0x34, 0x47, 0x44, 0x24, 0xf4, 0x55, 0x39, 0x14, 0x43, - 0x24, 0x5a, 0x1d, 0x22, 0x51, 0xab, 0xfd, 0xb0, 0x00, 0xe7, 0x9b, 0xfd, 0x9d, 0x1d, 0xea, 0x49, + 0x24, 0x5a, 0x1d, 0x22, 0x51, 0xab, 0xfd, 0xa0, 0x00, 0xe7, 0x9b, 0xfd, 0x9d, 0x1d, 0xea, 0x49, 0xf5, 0x4c, 0x28, 0x3e, 0x84, 0x42, 0xc5, 0xa3, 0xa6, 0xe5, 0xcb, 0xb9, 0x2f, 0x8d, 0xfc, 0xe9, 0x90, 0x61, 0x91, 0x7a, 0x16, 0xe7, 0x17, 0x6f, 0x40, 0x81, 0x9d, 0xf4, 0xa1, 0xf6, 0x06, 0x0d, 0xfc, 0xc0, 0xa3, 0x7a, 0x57, 0xbe, 0xdd, 0xf5, 0x91, 0x49, 0xbd, 0x4c, 0x83, 0x16, 0xc7, 0x14, @@ -2601,7 +2601,7 @@ var fileDescriptor_9d0d1b17d3865563 = []byte{ 0x94, 0xc5, 0xbc, 0xe9, 0x0e, 0xe5, 0x56, 0x62, 0x1c, 0x41, 0xb8, 0xa0, 0x9e, 0x53, 0x9c, 0x1a, 0xe3, 0x9c, 0x9a, 0x39, 0x3c, 0x68, 0x5c, 0xd8, 0xcc, 0x84, 0xc0, 0x21, 0x23, 0xc9, 0x17, 0x0a, 0x30, 0xa5, 0xba, 0x24, 0x8f, 0xc6, 0x4f, 0x92, 0x47, 0x84, 0xad, 0x88, 0xcd, 0x04, 0x01, 0x4c, - 0x11, 0xd4, 0x7e, 0x54, 0x86, 0x5a, 0x78, 0xb2, 0x91, 0x77, 0x43, 0x85, 0xdb, 0xc2, 0x52, 0x61, + 0x11, 0xd4, 0x7e, 0x58, 0x86, 0x5a, 0x78, 0xb2, 0x91, 0x77, 0x43, 0x85, 0xdb, 0xc2, 0x52, 0x61, 0x0d, 0x45, 0x16, 0x37, 0x99, 0x51, 0xf4, 0x91, 0xa7, 0x60, 0xdc, 0x70, 0xbb, 0x5d, 0xdd, 0x31, 0xb9, 0x7f, 0xa3, 0xd6, 0xac, 0x33, 0x49, 0xbd, 0x28, 0x9a, 0x50, 0xf5, 0x91, 0x4b, 0x50, 0xd6, 0xbd, 0xb6, 0x70, 0x35, 0xd4, 0xc4, 0x79, 0xb4, 0xe0, 0xb5, 0x7d, 0xe4, 0xad, 0xe4, 0x83, 0x50, @@ -2614,11 +2614,11 @@ var fileDescriptor_9d0d1b17d3865563 = []byte{ 0x9b, 0xe7, 0x94, 0x01, 0xab, 0x7a, 0x7d, 0x8c, 0xb0, 0x91, 0xed, 0x41, 0xbf, 0x8b, 0x70, 0x1a, 0xbc, 0x7b, 0xc8, 0xa9, 0x3e, 0x82, 0xd3, 0xe5, 0x53, 0x70, 0x26, 0x74, 0x8c, 0x48, 0xdb, 0x5a, 0xb8, 0x11, 0x9e, 0x65, 0xc3, 0x57, 0x93, 0x5d, 0xf7, 0x0e, 0x1a, 0x4f, 0x66, 0x58, 0xd7, 0x11, - 0x00, 0xa6, 0x91, 0x69, 0x7f, 0x50, 0x82, 0x41, 0xb5, 0x3b, 0xc9, 0xb4, 0xc2, 0x49, 0x33, 0x2d, + 0x00, 0xa6, 0x91, 0x69, 0xbf, 0x5f, 0x82, 0x41, 0xb5, 0x3b, 0xc9, 0xb4, 0xc2, 0x49, 0x33, 0x2d, 0xfd, 0x42, 0xe2, 0xf8, 0x7c, 0x41, 0x0e, 0xcb, 0xff, 0x52, 0x59, 0x1f, 0xa6, 0x74, 0xd2, 0x1f, 0xe6, 0x61, 0xd9, 0x3b, 0xda, 0xdb, 0x65, 0x98, 0x5a, 0xd2, 0x69, 0xd7, 0x75, 0x1e, 0x68, 0x84, 0x14, 0x1e, 0x0a, 0x23, 0xe4, 0x2a, 0x54, 0x3d, 0xda, 0xb3, 0x2d, 0x43, 0xf7, 0xf9, 0xa7, 0x97, - 0xee, 0x38, 0x94, 0x6d, 0x18, 0xf6, 0x0e, 0x31, 0x3e, 0x4b, 0x0f, 0xa5, 0xf1, 0x59, 0xfe, 0xe9, + 0xee, 0x38, 0x94, 0x6d, 0x18, 0xf6, 0x0e, 0x31, 0x3e, 0x4b, 0x0f, 0xa5, 0xf1, 0x59, 0xfe, 0xc9, 0x1b, 0x9f, 0xda, 0x17, 0x8a, 0xc0, 0x15, 0x15, 0x72, 0x05, 0xca, 0x4c, 0x08, 0xa7, 0x5d, 0x1e, 0x7c, 0xe1, 0xf0, 0x1e, 0x32, 0x03, 0xc5, 0xc0, 0x95, 0x3b, 0x0f, 0x64, 0x7f, 0x71, 0xd3, 0xc5, 0x62, 0xe0, 0x92, 0x37, 0x01, 0x0c, 0xd7, 0x31, 0x2d, 0xe5, 0xa5, 0xce, 0xf7, 0x62, 0xcb, 0xae, @@ -2631,11 +2631,11 @@ var fileDescriptor_9d0d1b17d3865563 = []byte{ 0x0b, 0xa3, 0x94, 0x63, 0x40, 0x89, 0x89, 0xcc, 0x41, 0x4d, 0x68, 0x9f, 0x96, 0xd3, 0xe6, 0x3c, 0xac, 0x46, 0x87, 0x5e, 0x4b, 0x75, 0x60, 0x04, 0xa3, 0xed, 0xc3, 0xb9, 0x01, 0x36, 0x10, 0x13, 0xca, 0x81, 0xde, 0x56, 0xe7, 0xeb, 0xf2, 0xc8, 0x0c, 0xde, 0xd4, 0xdb, 0x31, 0xe6, 0x72, 0x19, - 0xbf, 0xa9, 0x33, 0x19, 0xcf, 0xb0, 0x6b, 0x3f, 0x2e, 0x40, 0x75, 0xb9, 0xef, 0x18, 0xdc, 0x36, + 0xbf, 0xa9, 0x33, 0x19, 0xcf, 0xb0, 0x6b, 0x3f, 0x2a, 0x40, 0x75, 0xb9, 0xef, 0x18, 0xdc, 0x36, 0x7a, 0xb0, 0x2b, 0x4c, 0x29, 0x0c, 0xc5, 0x4c, 0x85, 0xa1, 0x0f, 0x63, 0x9d, 0x3b, 0xa1, 0x42, 0x51, 0x9f, 0x5f, 0x1f, 0x7d, 0x55, 0xc8, 0x29, 0xcd, 0xde, 0xe0, 0xf8, 0x44, 0x0c, 0x65, 0x4a, 0x4e, 0x68, 0xec, 0xc6, 0x2b, 0x9c, 0xa8, 0x24, 0x36, 0xf3, 0x41, 0xa8, 0xc7, 0xc0, 0x8e, 0xe5, - 0xb4, 0xfd, 0xdd, 0x32, 0x8c, 0xad, 0xb4, 0x5a, 0x0b, 0x1b, 0xab, 0xe4, 0x39, 0xa8, 0x4b, 0xf7, + 0xb4, 0xfd, 0x9d, 0x32, 0x8c, 0xad, 0xb4, 0x5a, 0x0b, 0x1b, 0xab, 0xe4, 0x39, 0xa8, 0x4b, 0xf7, 0xfa, 0xcd, 0x88, 0x07, 0x61, 0x74, 0xa5, 0x15, 0x75, 0x61, 0x1c, 0x8e, 0xa9, 0x63, 0x1e, 0xd5, 0xed, 0xae, 0xdc, 0x2c, 0xa1, 0x3a, 0x86, 0xac, 0x11, 0x45, 0x1f, 0xd1, 0x61, 0x8a, 0x59, 0x78, 0x8c, 0x85, 0xc2, 0x7a, 0x93, 0xdb, 0xe6, 0x88, 0xf6, 0x1d, 0x57, 0x12, 0xb7, 0x12, 0x08, 0x30, @@ -2653,13 +2653,13 @@ var fileDescriptor_9d0d1b17d3865563 = []byte{ 0xb5, 0x59, 0xd8, 0x2a, 0x28, 0x0b, 0x4b, 0xfe, 0x36, 0x6b, 0x90, 0xfb, 0x86, 0x1d, 0x99, 0x6f, 0x58, 0x41, 0x40, 0x3d, 0xf9, 0x19, 0x47, 0x3a, 0x32, 0x5f, 0xe6, 0x18, 0x50, 0x62, 0x22, 0xef, 0x85, 0x1a, 0x47, 0xde, 0xb4, 0xdd, 0x6d, 0xfe, 0xe1, 0x6a, 0xc2, 0xa6, 0xbf, 0xad, 0x1a, 0x31, - 0xea, 0xd7, 0x7e, 0x52, 0x84, 0x0b, 0x2b, 0x34, 0x10, 0x5a, 0xcd, 0x12, 0xed, 0xd9, 0xee, 0x3e, + 0xea, 0xd7, 0x7e, 0x5c, 0x84, 0x0b, 0x2b, 0x34, 0x10, 0x5a, 0xcd, 0x12, 0xed, 0xd9, 0xee, 0x3e, 0x53, 0x2d, 0x91, 0x7e, 0x9a, 0xbc, 0x04, 0x60, 0xf9, 0xdb, 0xad, 0x3d, 0x83, 0xef, 0x03, 0xb1, 0x87, 0xaf, 0xc8, 0x2d, 0x09, 0xab, 0xad, 0xa6, 0xec, 0xb9, 0x97, 0x78, 0xc2, 0xd8, 0x98, 0xc8, 0xbc, 0x2a, 0xde, 0xc7, 0xbc, 0x6a, 0x01, 0xf4, 0x22, 0x05, 0xb5, 0xc4, 0x21, 0xff, 0x8f, 0x22, 0x73, 0x1c, 0xdd, 0x34, 0x86, 0x26, 0x8f, 0xca, 0xe8, 0xc0, 0x59, 0x93, 0xee, 0xe8, 0x7d, 0x3b, 0x08, 0x95, 0x6a, 0xb9, 0x89, 0x8f, 0xae, 0x97, 0x87, 0xb1, 0xd7, 0xa5, 0x14, 0x26, 0x1c, 0xc0, - 0xad, 0xfd, 0x5e, 0x09, 0x66, 0x56, 0x68, 0x10, 0x7a, 0x5c, 0xe4, 0xe9, 0xd8, 0xea, 0x51, 0x83, + 0xad, 0xfd, 0x6e, 0x09, 0x66, 0x56, 0x68, 0x10, 0x7a, 0x5c, 0xe4, 0xe9, 0xd8, 0xea, 0x51, 0x83, 0x7d, 0x85, 0xb7, 0x0a, 0x30, 0x66, 0xeb, 0xdb, 0xd4, 0x66, 0xd2, 0x8b, 0xbd, 0xcd, 0xeb, 0x23, 0x0b, 0x82, 0xe1, 0x54, 0x66, 0xd7, 0x38, 0x85, 0x94, 0x68, 0x10, 0x8d, 0x28, 0xc9, 0xb3, 0x43, 0xdd, 0xb0, 0xfb, 0x7e, 0x40, 0xbd, 0x0d, 0xd7, 0x0b, 0xa4, 0x3e, 0x19, 0x1e, 0xea, 0x8b, 0x51, @@ -2668,7 +2668,7 @@ var fileDescriptor_9d0d1b17d3865563 = []byte{ 0xa4, 0xd6, 0xa3, 0x2e, 0x8c, 0xc3, 0xf1, 0x61, 0x34, 0xf0, 0x2c, 0xc3, 0xe7, 0xc3, 0x2a, 0xa9, 0x61, 0x51, 0x17, 0xc6, 0xe1, 0x98, 0xcc, 0x8b, 0xbd, 0xff, 0xb1, 0x64, 0xde, 0xd7, 0x6b, 0x70, 0x39, 0xc1, 0xd6, 0x40, 0x0f, 0xe8, 0x4e, 0xdf, 0x6e, 0xd1, 0x40, 0x7d, 0xc0, 0x11, 0x65, 0xe1, - 0x2f, 0x45, 0xdf, 0x5d, 0x64, 0x55, 0x18, 0x27, 0xf3, 0xdd, 0x07, 0x26, 0x78, 0xa4, 0x6f, 0x3f, + 0x2f, 0x44, 0xdf, 0x5d, 0x64, 0x55, 0x18, 0x27, 0xf3, 0xdd, 0x07, 0x26, 0x78, 0xa4, 0x6f, 0x3f, 0x07, 0x35, 0x47, 0x0f, 0x7c, 0xbe, 0x71, 0xe5, 0x1e, 0x0d, 0xd5, 0xb0, 0x9b, 0xaa, 0x03, 0x23, 0x18, 0xb2, 0x01, 0x8f, 0x4a, 0x16, 0x5f, 0xbb, 0xdb, 0x73, 0xbd, 0x80, 0x7a, 0x62, 0xac, 0x14, 0xa7, 0x72, 0xec, 0xa3, 0xeb, 0x19, 0x30, 0x98, 0x39, 0x92, 0xac, 0xc3, 0x79, 0x43, 0x44, 0x9a, @@ -2699,7 +2699,7 @@ var fileDescriptor_9d0d1b17d3865563 = []byte{ 0x1d, 0xb9, 0x98, 0x06, 0xc0, 0xc1, 0x31, 0x5c, 0x34, 0x1b, 0x9e, 0xd5, 0x0b, 0xfc, 0x24, 0xae, 0xa9, 0x94, 0x68, 0xce, 0x80, 0xc1, 0xcc, 0x91, 0x4c, 0x29, 0xda, 0xa5, 0xba, 0x1d, 0xec, 0x26, 0x11, 0x9e, 0x49, 0x2a, 0x45, 0xd7, 0x07, 0x41, 0x30, 0x6b, 0x5c, 0xa6, 0x2c, 0x3b, 0xfb, 0x70, - 0xca, 0xb2, 0x2f, 0x96, 0xe0, 0xe2, 0x0a, 0x0d, 0xc2, 0x64, 0x86, 0x9f, 0xdb, 0xae, 0x3f, 0x05, + 0xca, 0xb2, 0x2f, 0x96, 0xe0, 0xe2, 0x0a, 0x0d, 0xc2, 0x64, 0x86, 0x9f, 0xd9, 0xae, 0x3f, 0x01, 0xdb, 0xf5, 0x6b, 0x15, 0x38, 0xbf, 0x42, 0x65, 0xf6, 0xdf, 0x86, 0x6b, 0x2a, 0x61, 0xf6, 0xdf, 0x94, 0xfd, 0xeb, 0x70, 0x3e, 0xca, 0x9f, 0x69, 0x05, 0xae, 0x27, 0x64, 0x79, 0xca, 0x44, 0x69, 0x0d, 0x82, 0x60, 0xd6, 0x38, 0xf2, 0x71, 0x78, 0x9c, 0x8b, 0x7a, 0xa7, 0x2d, 0x9c, 0x62, 0xc2, @@ -2715,21 +2715,21 @@ var fileDescriptor_9d0d1b17d3865563 = []byte{ 0x02, 0xda, 0x57, 0x0b, 0x00, 0xd7, 0x37, 0x37, 0x37, 0xa4, 0x4f, 0xd7, 0x84, 0xb2, 0xde, 0x0f, 0xa3, 0x43, 0xa3, 0x47, 0x61, 0x12, 0x49, 0x68, 0x32, 0x70, 0xd2, 0x0f, 0x76, 0x91, 0x63, 0x27, 0xef, 0x81, 0x71, 0xa9, 0x20, 0x4b, 0xb6, 0x87, 0xf1, 0x5c, 0xa9, 0x44, 0xa3, 0xea, 0xd7, 0x7e, - 0xa7, 0x08, 0xb0, 0x6a, 0xda, 0xb4, 0xa5, 0xd2, 0x86, 0x6b, 0xc1, 0xae, 0x47, 0xfd, 0x5d, 0xd7, + 0xbb, 0x08, 0xb0, 0x6a, 0xda, 0xb4, 0xa5, 0xd2, 0x86, 0x6b, 0xc1, 0xae, 0x47, 0xfd, 0x5d, 0xd7, 0x36, 0x47, 0x0c, 0x61, 0x71, 0x47, 0xeb, 0xa6, 0x42, 0x82, 0x11, 0x3e, 0x62, 0x32, 0x03, 0x93, 0xf6, 0x56, 0x9d, 0x80, 0x7a, 0x7b, 0xba, 0x3d, 0xa2, 0xe7, 0xfa, 0xac, 0x30, 0x46, 0x23, 0x3c, 0x98, 0xc0, 0x4a, 0x74, 0xa8, 0x5b, 0x8e, 0x21, 0x36, 0x48, 0x73, 0x7f, 0xc4, 0x85, 0x74, 0x86, - 0x59, 0x1c, 0xab, 0x11, 0x1a, 0x8c, 0xe3, 0xd4, 0x7e, 0x50, 0x84, 0x0b, 0x9c, 0x1e, 0x9b, 0x46, + 0x59, 0x1c, 0xab, 0x11, 0x1a, 0x8c, 0xe3, 0xd4, 0xbe, 0x5f, 0x84, 0x0b, 0x9c, 0x1e, 0x9b, 0x46, 0x22, 0x09, 0x8e, 0xfc, 0xff, 0x81, 0xcb, 0x47, 0xff, 0xfb, 0x68, 0xa4, 0xc5, 0xdd, 0x95, 0x75, 0x1a, 0xe8, 0x91, 0x3e, 0x17, 0xb5, 0xc5, 0x6e, 0x1c, 0xf5, 0xa1, 0xec, 0xb3, 0xf3, 0x4a, 0x70, 0xaf, 0x35, 0xf2, 0x12, 0xca, 0x7e, 0x01, 0x7e, 0x7a, 0x85, 0xa1, 0x3a, 0x7e, 0x6a, 0x71, 0x72, 0xe4, 0xb3, 0x30, 0xe6, 0x07, 0x7a, 0xd0, 0x57, 0x5b, 0x73, 0xeb, 0xa4, 0x09, 0x73, 0xe4, 0xd1, - 0x39, 0x22, 0x9e, 0x51, 0x12, 0xd5, 0x7e, 0x50, 0x80, 0x99, 0xec, 0x81, 0x6b, 0x96, 0x1f, 0x90, + 0x39, 0x22, 0x9e, 0x51, 0x12, 0xd5, 0xbe, 0x5f, 0x80, 0x99, 0xec, 0x81, 0x6b, 0x96, 0x1f, 0x90, 0xff, 0x37, 0xc0, 0xf6, 0x23, 0x7e, 0x71, 0x36, 0x9a, 0x33, 0x3d, 0xcc, 0x82, 0x55, 0x2d, 0x31, 0x96, 0x07, 0x50, 0xb1, 0x02, 0xda, 0x55, 0xf6, 0xe5, 0xad, 0x13, 0x7e, 0xf5, 0x98, 0x68, 0x67, 0x54, 0x50, 0x10, 0xd3, 0xde, 0x2e, 0x0e, 0x7b, 0x65, 0x2e, 0x3e, 0xec, 0x64, 0xa2, 0xe5, 0x8d, - 0x7c, 0x89, 0x96, 0xc9, 0x09, 0x0d, 0xe6, 0x5b, 0xfe, 0xc2, 0x60, 0xbe, 0xe5, 0xad, 0xfc, 0xf9, - 0x96, 0x29, 0x36, 0x0c, 0x4d, 0xbb, 0xfc, 0x6e, 0x09, 0x2e, 0xdd, 0x6f, 0xd9, 0x30, 0x79, 0x26, + 0x7c, 0x89, 0x96, 0xc9, 0x09, 0x0d, 0xe6, 0x5b, 0xfe, 0xdc, 0x60, 0xbe, 0xe5, 0xad, 0xfc, 0xf9, + 0x96, 0x29, 0x36, 0x0c, 0x4d, 0xbb, 0xfc, 0x4e, 0x09, 0x2e, 0xdd, 0x6f, 0xd9, 0x30, 0x79, 0x26, 0x57, 0x67, 0x5e, 0x79, 0x76, 0xff, 0x75, 0x48, 0xe6, 0xa1, 0xd2, 0xdb, 0xd5, 0x7d, 0xa5, 0x94, 0x29, 0x83, 0xa5, 0xb2, 0xc1, 0x1a, 0xef, 0xb1, 0x43, 0x83, 0x2b, 0x73, 0xfc, 0x11, 0x05, 0x28, 0x3b, 0x8e, 0xbb, 0xd4, 0xf7, 0x23, 0x9f, 0x40, 0x78, 0x1c, 0xaf, 0x8b, 0x66, 0x54, 0xfd, 0x24, @@ -2738,8 +2738,8 @@ var fileDescriptor_9d0d1b17d3865563 = []byte{ 0x0e, 0xc7, 0x0c, 0x7b, 0x77, 0x9b, 0x7b, 0x32, 0x4d, 0x19, 0xb4, 0xb4, 0x5c, 0x87, 0x2b, 0x64, 0xa5, 0xc8, 0xb0, 0xbf, 0x35, 0x00, 0x81, 0x19, 0xa3, 0xb4, 0xbf, 0xac, 0xc2, 0x85, 0xec, 0xf5, 0xc0, 0xf8, 0xb6, 0x47, 0x3d, 0x9f, 0xe1, 0x2e, 0x24, 0xf9, 0x76, 0x5b, 0x34, 0xa3, 0xea, 0xff, - 0x99, 0xce, 0xf2, 0xf9, 0x5a, 0x01, 0x2e, 0x7a, 0xd2, 0x31, 0xff, 0x4e, 0x64, 0xfa, 0x3c, 0x29, - 0xdc, 0x19, 0x43, 0x08, 0xe2, 0xf0, 0xb9, 0x90, 0xdf, 0x2e, 0xc0, 0x74, 0x37, 0xe5, 0xe7, 0x38, + 0xa9, 0xce, 0xf2, 0xf9, 0x5a, 0x01, 0x2e, 0x7a, 0xd2, 0x31, 0xff, 0x4e, 0x64, 0xfa, 0x3c, 0x29, + 0xdc, 0x19, 0x43, 0x08, 0xe2, 0xf0, 0xb9, 0x90, 0xdf, 0x2a, 0xc0, 0x74, 0x37, 0xe5, 0xe7, 0x38, 0xc5, 0x5b, 0x3a, 0x3c, 0x15, 0x79, 0x7d, 0x08, 0x3d, 0x1c, 0x3a, 0x13, 0xf2, 0x39, 0xa8, 0xf7, 0xd8, 0xba, 0xf0, 0x03, 0xea, 0x18, 0xea, 0xa2, 0xce, 0xe8, 0x3b, 0x69, 0x23, 0xc2, 0xa5, 0xf2, 0x7f, 0x84, 0x7e, 0x10, 0xeb, 0xc0, 0x38, 0xc5, 0x87, 0xfc, 0x5a, 0xce, 0x55, 0xa8, 0xfa, 0x34, @@ -2748,14 +2748,14 @@ var fileDescriptor_9d0d1b17d3865563 = []byte{ 0x23, 0x46, 0xfd, 0xe4, 0x59, 0x98, 0xd8, 0xe6, 0xdb, 0x57, 0xde, 0xa1, 0x14, 0x3e, 0x2e, 0xae, 0xad, 0x35, 0x63, 0xed, 0x98, 0x80, 0x22, 0xf3, 0x00, 0x34, 0x0c, 0x86, 0xa4, 0xfd, 0x59, 0x51, 0x98, 0x04, 0x63, 0x50, 0xe4, 0x49, 0x28, 0x05, 0xb6, 0xcf, 0x7d, 0x58, 0xd5, 0xc8, 0x04, 0xdd, - 0x5c, 0x6b, 0x21, 0x6b, 0xd7, 0x7e, 0x52, 0x80, 0x33, 0xa9, 0x8c, 0x7e, 0x36, 0xa4, 0xef, 0xd9, + 0x5c, 0x6b, 0x21, 0x6b, 0xd7, 0x7e, 0x5c, 0x80, 0x33, 0xa9, 0x8c, 0x7e, 0x36, 0xa4, 0xef, 0xd9, 0xf2, 0x18, 0x09, 0x87, 0x6c, 0xe1, 0x1a, 0xb2, 0x76, 0xf2, 0xba, 0x54, 0xcb, 0x8b, 0x39, 0xaf, 0x8b, 0xdf, 0xd4, 0x03, 0x9f, 0xe9, 0xe1, 0x03, 0x1a, 0x39, 0x8f, 0xad, 0x44, 0xf3, 0x91, 0x72, 0x20, 0x16, 0x5b, 0x89, 0xfa, 0x30, 0x01, 0x99, 0x72, 0xf8, 0x95, 0x8f, 0xe2, 0xf0, 0xd3, 0xbe, 0x5c, 0x8c, 0x71, 0x40, 0x6a, 0xf6, 0x0f, 0xe0, 0xc0, 0xd3, 0x4c, 0x80, 0x86, 0xc2, 0xbd, 0x16, 0x97, 0x7f, 0x5c, 0x18, 0xcb, 0x5e, 0xf2, 0x8a, 0xe0, 0x7d, 0x29, 0xe7, 0xd5, 0xbf, 0xcd, 0xb5, 0x96, 0x48, 0x69, 0x51, 0x5f, 0x2d, 0xfc, 0x04, 0xe5, 0x53, 0xfa, 0x04, 0xda, 0x9f, 0x96, 0xa0, - 0xfe, 0xb2, 0xbb, 0xfd, 0x33, 0x92, 0xb6, 0x9a, 0x2d, 0xa6, 0x8a, 0x3f, 0x45, 0x31, 0xb5, 0x05, + 0xfe, 0xb2, 0xbb, 0xfd, 0x53, 0x92, 0xb6, 0x9a, 0x2d, 0xa6, 0x8a, 0x3f, 0x41, 0x31, 0xb5, 0x05, 0x8f, 0x07, 0x81, 0xdd, 0xa2, 0x86, 0xeb, 0x98, 0xfe, 0xc2, 0x4e, 0x40, 0xbd, 0x65, 0xcb, 0xb1, 0xfc, 0x5d, 0x6a, 0xca, 0x70, 0xd2, 0x13, 0x87, 0x07, 0x8d, 0xc7, 0x37, 0x37, 0xd7, 0xb2, 0x40, 0x70, 0xd8, 0x58, 0x7e, 0x6c, 0xe8, 0x46, 0xc7, 0xdd, 0xd9, 0xe1, 0xd7, 0x13, 0x64, 0xa2, 0x83, @@ -2764,7 +2764,7 @@ var fileDescriptor_9d0d1b17d3865563 = []byte{ 0xbc, 0x1b, 0x2a, 0x81, 0xdb, 0xb3, 0x8c, 0xb4, 0x43, 0x6d, 0x93, 0x35, 0xa2, 0xe8, 0x3b, 0xbd, 0x05, 0xfe, 0x74, 0x42, 0xb5, 0xab, 0x0d, 0x55, 0xc6, 0x5e, 0x83, 0xb2, 0xaf, 0xfb, 0xb6, 0x94, 0xa7, 0x39, 0x6e, 0xee, 0x2e, 0xb4, 0xd6, 0xe4, 0xcd, 0xdd, 0x85, 0xd6, 0x1a, 0x72, 0xa4, 0xda, - 0x8f, 0x8a, 0x50, 0x17, 0x7c, 0x13, 0xa7, 0xc2, 0x49, 0x72, 0xee, 0x45, 0x1e, 0xbf, 0xf6, 0xfb, + 0x0f, 0x8b, 0x50, 0x17, 0x7c, 0x13, 0xa7, 0xc2, 0x49, 0x72, 0xee, 0x45, 0x1e, 0xbf, 0xf6, 0xfb, 0x5d, 0xea, 0x71, 0x37, 0x93, 0x3c, 0xe4, 0xe2, 0xf1, 0x81, 0xa8, 0x33, 0x8c, 0x61, 0x47, 0x4d, 0x8a, 0xf5, 0xe5, 0x53, 0x64, 0x7d, 0xe5, 0x48, 0xac, 0x1f, 0x3b, 0x0d, 0xd6, 0xbf, 0x55, 0x84, 0xda, 0x9a, 0xb5, 0x43, 0x8d, 0x7d, 0xc3, 0xe6, 0x17, 0xb1, 0x4c, 0x6a, 0xd3, 0x80, 0xae, 0x78, @@ -2772,14 +2772,14 @@ var fileDescriptor_9d0d1b17d3865563 = []byte{ 0x1a, 0x02, 0x83, 0x43, 0x47, 0x93, 0x55, 0x98, 0x30, 0xa9, 0x6f, 0x79, 0xd4, 0xdc, 0x88, 0x19, 0x2a, 0x4f, 0x29, 0x51, 0xb3, 0x14, 0xeb, 0xbb, 0x77, 0xd0, 0x98, 0x54, 0x0e, 0x4a, 0x61, 0xb1, 0x24, 0x86, 0xb2, 0x2d, 0xdf, 0xd3, 0xfb, 0x7e, 0xd6, 0x1c, 0x63, 0x5b, 0x7e, 0x23, 0x1b, 0x04, - 0x87, 0x8d, 0xd5, 0x2a, 0x50, 0x5a, 0x73, 0xdb, 0xda, 0xdb, 0x25, 0x08, 0x2b, 0xaa, 0x90, 0x5f, - 0x2c, 0x40, 0x5d, 0x77, 0x1c, 0x37, 0x90, 0xd5, 0x4a, 0x44, 0x04, 0x1e, 0x73, 0x17, 0x6e, 0x99, + 0x87, 0x8d, 0xd5, 0x2a, 0x50, 0x5a, 0x73, 0xdb, 0xda, 0xdb, 0x25, 0x08, 0x2b, 0xaa, 0x90, 0x9f, + 0x2f, 0x40, 0x5d, 0x77, 0x1c, 0x37, 0x90, 0xd5, 0x4a, 0x44, 0x04, 0x1e, 0x73, 0x17, 0x6e, 0x99, 0x5d, 0x88, 0x90, 0x8a, 0xe0, 0x6d, 0x18, 0x50, 0x8e, 0xf5, 0x60, 0x9c, 0x36, 0xe9, 0xa7, 0xe2, 0xc9, 0xeb, 0xf9, 0x67, 0x71, 0x84, 0xe8, 0xf1, 0xcc, 0x47, 0xe1, 0x6c, 0x7a, 0xb2, 0xc7, 0x09, 0x07, 0xe5, 0x89, 0x24, 0x7d, 0xa9, 0x06, 0xf5, 0x9b, 0x7a, 0x60, 0xed, 0x51, 0x6e, 0xf4, 0x9f, - 0x8e, 0xe5, 0xf5, 0xeb, 0x05, 0xb8, 0x90, 0x8c, 0xec, 0x9e, 0xa2, 0xf9, 0xc5, 0x2f, 0xe7, 0x61, + 0x8e, 0xe5, 0xf5, 0x6b, 0x05, 0xb8, 0x90, 0x8c, 0xec, 0x9e, 0xa2, 0xf9, 0xc5, 0x2f, 0xe7, 0x61, 0x26, 0x35, 0x1c, 0x32, 0x0b, 0x6e, 0x88, 0x0d, 0x04, 0x8a, 0x4f, 0xdb, 0x10, 0x6b, 0x0d, 0x23, - 0x88, 0xc3, 0xe7, 0xf2, 0xb3, 0x62, 0x88, 0x3d, 0xdc, 0xc5, 0x13, 0x52, 0x66, 0xe2, 0xf8, 0x43, + 0x88, 0xc3, 0xe7, 0xf2, 0xd3, 0x62, 0x88, 0x3d, 0xdc, 0xc5, 0x13, 0x52, 0x66, 0xe2, 0xf8, 0x43, 0x63, 0x26, 0x56, 0x1f, 0x0a, 0x0d, 0xb4, 0x17, 0x33, 0x13, 0x6b, 0x39, 0xc3, 0x15, 0x32, 0x19, 0x4a, 0x60, 0x1b, 0x66, 0x6e, 0xf2, 0xcb, 0x23, 0x4a, 0x7d, 0x27, 0x06, 0x54, 0xb6, 0x75, 0xdf, 0x32, 0xa4, 0x3e, 0x9e, 0xa3, 0x58, 0x8c, 0xba, 0x55, 0x2f, 0xbc, 0x9a, 0xfc, 0x11, 0x05, 0xee, @@ -2808,7 +2808,7 @@ var fileDescriptor_9d0d1b17d3865563 = []byte{ 0x32, 0x9c, 0x0b, 0x93, 0x62, 0x59, 0x37, 0x53, 0x7d, 0x38, 0x00, 0x4d, 0x74, 0xa8, 0xb3, 0x19, 0x6d, 0x5a, 0x5d, 0xea, 0xf6, 0x55, 0xd5, 0xc4, 0x91, 0x22, 0xd3, 0x18, 0xa1, 0xc1, 0x38, 0x4e, 0xed, 0xaf, 0x0a, 0x30, 0x11, 0xf1, 0xeb, 0xd4, 0x03, 0xa3, 0x3b, 0xc9, 0xc0, 0xe8, 0x42, 0xee, - 0xe5, 0x30, 0x24, 0x14, 0xfa, 0xcb, 0xe3, 0x90, 0xc8, 0xa4, 0x21, 0xdb, 0x30, 0x63, 0x65, 0xc6, + 0xe5, 0x30, 0x24, 0x14, 0xfa, 0x4b, 0xe3, 0x90, 0xc8, 0xa4, 0x21, 0xdb, 0x30, 0x63, 0x65, 0xc6, 0x03, 0x63, 0xa7, 0x4d, 0x98, 0x8f, 0xbf, 0x3a, 0x14, 0x12, 0xef, 0x83, 0x85, 0xf4, 0xa1, 0xba, 0x47, 0xbd, 0xc0, 0x32, 0xa8, 0x7a, 0xbf, 0x95, 0xdc, 0x2a, 0x99, 0x48, 0x13, 0x8b, 0x78, 0x7a, 0x5b, 0x12, 0xc0, 0x90, 0x14, 0xd9, 0x86, 0x0a, 0x35, 0xdb, 0x54, 0x5d, 0x7a, 0xcd, 0x59, 0x52, @@ -2828,10 +2828,10 @@ var fileDescriptor_9d0d1b17d3865563 = []byte{ 0xfb, 0xe6, 0x8e, 0x80, 0xad, 0x72, 0x58, 0xae, 0x61, 0x6e, 0x2d, 0x2d, 0xcb, 0x1b, 0xbd, 0xaa, 0x97, 0xcd, 0xa4, 0xab, 0xf7, 0x54, 0x07, 0xb7, 0x0d, 0xe5, 0x4c, 0xd6, 0xa3, 0x66, 0x8c, 0xc3, 0x90, 0x0f, 0xc1, 0x94, 0x47, 0xcd, 0xbe, 0x41, 0xc3, 0x51, 0xc0, 0x47, 0xf1, 0xcb, 0xde, 0x98, - 0xe8, 0xc1, 0x14, 0xe4, 0x90, 0x64, 0x83, 0xfa, 0x48, 0xc9, 0x06, 0xdf, 0x2f, 0x00, 0x19, 0x4c, + 0xe8, 0xc1, 0x14, 0xe4, 0x90, 0x64, 0x83, 0xfa, 0x48, 0xc9, 0x06, 0xdf, 0x2b, 0x00, 0x19, 0x4c, 0x77, 0x21, 0xbb, 0x30, 0xe6, 0x70, 0xef, 0x57, 0xee, 0xa2, 0x65, 0x31, 0x27, 0x9a, 0x38, 0x96, 0x64, 0x83, 0xc4, 0x4f, 0x1c, 0xa8, 0xd2, 0xbb, 0x01, 0xf5, 0x9c, 0x30, 0xfd, 0xed, 0x64, 0x0a, - 0xa4, 0x09, 0x6b, 0x40, 0x62, 0xc6, 0x90, 0x86, 0xf6, 0xc3, 0x22, 0xd4, 0x63, 0x70, 0x0f, 0x32, + 0xa4, 0x09, 0x6b, 0x40, 0x62, 0xc6, 0x90, 0x86, 0xf6, 0x83, 0x22, 0xd4, 0x63, 0x70, 0x0f, 0x32, 0x2a, 0xf9, 0x0d, 0x1c, 0xe1, 0x74, 0xda, 0xf2, 0x6c, 0xb9, 0xc3, 0x62, 0x37, 0x70, 0x64, 0x17, 0xae, 0x61, 0x1c, 0x8e, 0xcc, 0x03, 0x74, 0x75, 0x3f, 0xa0, 0x1e, 0x97, 0xbe, 0xa9, 0x7b, 0x2f, 0xeb, 0x61, 0x0f, 0xc6, 0xa0, 0xc8, 0x15, 0x59, 0xe2, 0xae, 0x9c, 0x2c, 0x0e, 0x31, 0xa4, 0x7e, @@ -2879,13 +2879,13 @@ var fileDescriptor_9d0d1b17d3865563 = []byte{ 0x54, 0x64, 0xb4, 0x37, 0xe0, 0x6c, 0x1a, 0x92, 0x6b, 0x68, 0xc6, 0x2e, 0x35, 0xfb, 0xb6, 0xe2, 0x71, 0xa4, 0xa1, 0xc9, 0x76, 0x0c, 0x21, 0x98, 0x95, 0xc6, 0x3e, 0xd3, 0x9b, 0xae, 0xa3, 0xec, 0x5f, 0xae, 0xec, 0x6e, 0xca, 0x36, 0x0c, 0x7b, 0xb5, 0x7f, 0x2c, 0xc1, 0xc5, 0xc8, 0x7a, 0x5f, - 0xd7, 0x1d, 0xbd, 0x7d, 0x84, 0xc2, 0xf1, 0x3f, 0x4f, 0x7e, 0x3b, 0x6e, 0x25, 0xc6, 0xd2, 0x43, - 0x50, 0x89, 0xf1, 0x47, 0x05, 0xe0, 0x7f, 0xcf, 0x40, 0x3e, 0x07, 0x13, 0x7a, 0xec, 0x3f, 0x43, + 0xd7, 0x1d, 0xbd, 0x7d, 0x84, 0xc2, 0xf1, 0x3f, 0x4b, 0x7e, 0x3b, 0x6e, 0x25, 0xc6, 0xd2, 0x43, + 0x50, 0x89, 0xf1, 0x87, 0x05, 0xe0, 0x7f, 0xcf, 0x40, 0x3e, 0x07, 0x13, 0x7a, 0xec, 0x3f, 0x43, 0xe4, 0xe7, 0xbc, 0x96, 0xfb, 0x73, 0xf2, 0x7f, 0x81, 0x08, 0xb3, 0x55, 0xe3, 0xad, 0x98, 0x20, 0x48, 0x5c, 0xa8, 0xee, 0xe8, 0xb6, 0xcd, 0x94, 0x96, 0xdc, 0xd1, 0x88, 0x04, 0x71, 0xbe, 0xcc, 0x97, 0x25, 0x6a, 0x0c, 0x89, 0x68, 0xff, 0x50, 0x80, 0xc9, 0x96, 0x6d, 0x99, 0x96, 0xd3, 0x3e, 0xc5, 0x12, 0x8c, 0xb7, 0xa0, 0xe2, 0xdb, 0x96, 0x49, 0x47, 0x3c, 0xc7, 0x85, 0x04, 0x61, 0x08, - 0x50, 0xe0, 0x49, 0xd6, 0x74, 0x2c, 0x1d, 0xa1, 0xa6, 0xe3, 0x8f, 0xc7, 0x40, 0xfe, 0xc5, 0x07, + 0x50, 0xe0, 0x49, 0xd6, 0x74, 0x2c, 0x1d, 0xa1, 0xa6, 0xe3, 0x8f, 0xc6, 0x40, 0xfe, 0xc5, 0x07, 0xe9, 0x43, 0xad, 0xad, 0x4a, 0xc5, 0xc9, 0x77, 0xbc, 0x9e, 0xa3, 0xe2, 0x45, 0xa2, 0xe8, 0x9c, 0x38, 0x75, 0xc3, 0x46, 0x8c, 0x28, 0x11, 0x9a, 0xfc, 0x9b, 0x98, 0xa5, 0x9c, 0x7f, 0x13, 0x23, 0xc8, 0x0d, 0xfe, 0x51, 0x8c, 0x0e, 0xe5, 0xdd, 0x20, 0xe8, 0xc9, 0x7d, 0x35, 0xfa, 0xcd, 0xcc, @@ -2908,7 +2908,7 @@ var fileDescriptor_9d0d1b17d3865563 = []byte{ 0x2d, 0x97, 0x1d, 0xbc, 0xc8, 0xa4, 0x8f, 0xb2, 0x47, 0xfb, 0x7c, 0x19, 0xa2, 0xe0, 0x0d, 0xf1, 0x61, 0xcc, 0xe4, 0x85, 0x26, 0xe5, 0xc9, 0x3d, 0x7a, 0x10, 0x2c, 0x59, 0x85, 0x5b, 0xd8, 0x47, 0xc9, 0x36, 0x94, 0xa4, 0x48, 0x1b, 0x4a, 0x6f, 0xb8, 0xdb, 0xb9, 0x0f, 0xee, 0xd8, 0xed, 0x09, - 0xe1, 0x4e, 0x8a, 0x35, 0x20, 0xa3, 0x40, 0x7e, 0xa3, 0x00, 0xe7, 0xfc, 0xb4, 0xd2, 0x29, 0x97, + 0xe1, 0x4e, 0x8a, 0x35, 0x20, 0xa3, 0x40, 0x7e, 0xbd, 0x00, 0xe7, 0xfc, 0xb4, 0xd2, 0x29, 0x97, 0x03, 0xe6, 0xd7, 0xae, 0xd3, 0x6a, 0xac, 0xcc, 0xa0, 0x1c, 0xd6, 0x8d, 0x83, 0x73, 0x61, 0xfc, 0x17, 0x51, 0x15, 0xb9, 0x9c, 0x56, 0x72, 0xfe, 0xef, 0x42, 0x92, 0xff, 0xc9, 0x36, 0x94, 0xa4, 0xb4, 0x2f, 0x16, 0xa1, 0x1e, 0x3b, 0xad, 0x73, 0x17, 0x46, 0xbe, 0x9b, 0x2a, 0x8c, 0xbc, 0x31, @@ -2918,41 +2918,41 @@ var fileDescriptor_9d0d1b17d3865563 = []byte{ 0x60, 0x23, 0x77, 0xea, 0x95, 0x2c, 0xd4, 0x21, 0x08, 0xc9, 0x07, 0x54, 0xd8, 0xb5, 0xcf, 0x82, 0xfc, 0x27, 0x3a, 0xe2, 0x9f, 0x0e, 0x37, 0x43, 0x65, 0x34, 0x8b, 0xa3, 0xda, 0x67, 0x20, 0xd4, 0x04, 0xde, 0xf1, 0xcf, 0xa9, 0xfd, 0x4b, 0x01, 0x92, 0xca, 0xcf, 0x3b, 0xbf, 0xa2, 0x3a, 0xe9, - 0x15, 0xb5, 0x74, 0x12, 0x1b, 0x30, 0x7b, 0x51, 0x69, 0xdf, 0x2a, 0xc2, 0x98, 0xfc, 0x6f, 0xc1, - 0xd3, 0xcf, 0x24, 0xa3, 0x89, 0x4c, 0xb2, 0xc5, 0x9c, 0x87, 0xe3, 0xd0, 0x3c, 0xb2, 0x6e, 0x2a, - 0x8f, 0x2c, 0xef, 0xbf, 0xdf, 0x3c, 0x20, 0x8b, 0xec, 0x2f, 0x0a, 0x20, 0x8f, 0xe6, 0x55, 0xc7, - 0x0f, 0x74, 0xc7, 0xe0, 0x7f, 0xc2, 0x28, 0xe5, 0x40, 0xde, 0x74, 0x05, 0x99, 0xd2, 0x23, 0x44, - 0x3f, 0xff, 0xad, 0xce, 0x7d, 0xf2, 0x3e, 0xa8, 0xee, 0xba, 0x7e, 0xc0, 0xcf, 0xfa, 0x62, 0xd2, - 0xb7, 0x73, 0x5d, 0xb6, 0x63, 0x08, 0x91, 0x0e, 0xeb, 0x55, 0x86, 0x87, 0xf5, 0xb4, 0xaf, 0x17, - 0x61, 0x22, 0xf1, 0x9f, 0x47, 0x23, 0x27, 0xc5, 0xa5, 0x72, 0xd2, 0x8a, 0x27, 0x9f, 0x93, 0x96, - 0x95, 0x77, 0x57, 0xca, 0x99, 0x77, 0x57, 0x3e, 0x4e, 0xde, 0x9d, 0xf6, 0x9d, 0x02, 0x80, 0xe2, - 0xd6, 0xa9, 0xa7, 0xc4, 0x99, 0xc9, 0x94, 0xb8, 0xdc, 0xeb, 0x2a, 0x3b, 0x21, 0xee, 0xf7, 0x2b, - 0xea, 0x95, 0x78, 0x3a, 0xdc, 0x5b, 0x05, 0x98, 0xd2, 0x13, 0x29, 0x66, 0xb9, 0xd5, 0xcb, 0x54, - 0xc6, 0x5a, 0xf8, 0xef, 0x83, 0xc9, 0x76, 0x4c, 0x91, 0x25, 0x2f, 0x44, 0x55, 0xb5, 0x6e, 0x46, - 0xcb, 0x7e, 0xa0, 0x1c, 0x16, 0x57, 0x75, 0x12, 0x90, 0x0f, 0x48, 0xe9, 0x2b, 0x9d, 0x48, 0x4a, - 0x5f, 0xfc, 0xb2, 0x52, 0xf9, 0xbe, 0x97, 0x95, 0xf6, 0xa0, 0xb6, 0xe3, 0xb9, 0x5d, 0x9e, 0x35, - 0x27, 0xff, 0x37, 0xe7, 0x5a, 0x0e, 0x99, 0x12, 0xfd, 0x63, 0x5c, 0x24, 0x5a, 0x97, 0x15, 0x7e, - 0x8c, 0x48, 0x71, 0xa7, 0xb4, 0x2b, 0xa8, 0x8e, 0x9d, 0x24, 0xd5, 0xf0, 0x2c, 0xd9, 0x14, 0xd8, - 0x51, 0x91, 0x49, 0x66, 0xca, 0x8d, 0xbf, 0x33, 0x99, 0x72, 0xda, 0xb7, 0x4a, 0xea, 0x00, 0x6b, - 0xa5, 0xea, 0xaa, 0x14, 0x86, 0xd4, 0x55, 0x91, 0x05, 0xf6, 0xe2, 0x39, 0x5d, 0x4f, 0xc3, 0x98, - 0x47, 0x75, 0x5f, 0x96, 0x1e, 0x89, 0xe5, 0x4b, 0x20, 0x6f, 0x45, 0xd9, 0x1b, 0xcf, 0xfd, 0x2a, - 0x3e, 0x20, 0xf7, 0xeb, 0x7d, 0xb1, 0x05, 0x22, 0x92, 0x7b, 0xc3, 0xbd, 0x9e, 0xb1, 0x48, 0x78, - 0x76, 0x85, 0xfc, 0xdf, 0xf7, 0x4a, 0x3a, 0xbb, 0x42, 0xfe, 0x27, 0x7b, 0x08, 0x41, 0x4c, 0x98, - 0xb0, 0x75, 0x3f, 0xe0, 0x61, 0x3b, 0x73, 0x21, 0x18, 0x21, 0xb1, 0x2c, 0xdc, 0x46, 0x6b, 0x31, - 0x3c, 0x98, 0xc0, 0x1a, 0xcb, 0xc3, 0x1b, 0x3f, 0xd5, 0x3c, 0x3c, 0xed, 0xa0, 0x04, 0x29, 0x7b, - 0xe7, 0xe7, 0x51, 0x85, 0xff, 0x52, 0x51, 0x85, 0xb7, 0x8b, 0x10, 0x6d, 0xde, 0x63, 0xa6, 0x47, - 0xbc, 0x0a, 0xd5, 0xae, 0x7e, 0x77, 0x89, 0xda, 0xfa, 0x7e, 0x9e, 0x3f, 0x28, 0x59, 0x97, 0x38, - 0x30, 0xc4, 0x46, 0x7c, 0x00, 0x2b, 0xac, 0x57, 0x97, 0xdb, 0x4b, 0x1c, 0x95, 0xbe, 0x13, 0x7e, - 0xa8, 0xe8, 0x19, 0x63, 0x64, 0xb4, 0x3f, 0x2f, 0x82, 0x2c, 0x6c, 0x48, 0x28, 0x54, 0x76, 0xac, - 0xbb, 0xd4, 0xcc, 0x9d, 0x2a, 0x18, 0xfb, 0xdb, 0x28, 0xe1, 0x06, 0xe7, 0x0d, 0x28, 0xb0, 0x73, - 0xff, 0xa6, 0x08, 0x6b, 0x48, 0xfe, 0xe5, 0xf0, 0x6f, 0xc6, 0xc3, 0x23, 0xd2, 0xbf, 0x29, 0x9a, - 0x50, 0xd1, 0x10, 0xee, 0x54, 0x1e, 0x5b, 0x96, 0x2c, 0xcd, 0xe3, 0x4e, 0x8d, 0xc5, 0xa8, 0x95, - 0x3b, 0xd5, 0x17, 0x97, 0x86, 0x25, 0x8d, 0xe6, 0x27, 0xbf, 0xfd, 0xbd, 0xcb, 0x8f, 0x7c, 0xe7, - 0x7b, 0x97, 0x1f, 0xf9, 0xee, 0xf7, 0x2e, 0x3f, 0xf2, 0xf9, 0xc3, 0xcb, 0x85, 0x6f, 0x1f, 0x5e, - 0x2e, 0x7c, 0xe7, 0xf0, 0x72, 0xe1, 0xbb, 0x87, 0x97, 0x0b, 0x7f, 0x77, 0x78, 0xb9, 0xf0, 0xab, - 0x7f, 0x7f, 0xf9, 0x91, 0x4f, 0x3c, 0x1f, 0x4d, 0x61, 0x4e, 0x4d, 0x61, 0x4e, 0x11, 0x9c, 0xeb, - 0x75, 0xda, 0x73, 0x6c, 0x0a, 0x51, 0x8b, 0x9a, 0xc2, 0x7f, 0x06, 0x00, 0x00, 0xff, 0xff, 0x0e, - 0x7e, 0x84, 0x52, 0xc4, 0x85, 0x00, 0x00, + 0x15, 0xb5, 0x74, 0x12, 0x1b, 0x30, 0x7b, 0x51, 0x69, 0x7f, 0x50, 0x84, 0x31, 0xf9, 0xdf, 0x82, + 0xa7, 0x9f, 0x49, 0x46, 0x13, 0x99, 0x64, 0x8b, 0x39, 0x0f, 0xc7, 0xa1, 0x79, 0x64, 0xdd, 0x54, + 0x1e, 0x59, 0xde, 0x7f, 0xbf, 0x79, 0x40, 0x16, 0xd9, 0x5f, 0x14, 0x40, 0x1e, 0xcd, 0xab, 0x8e, + 0x1f, 0xe8, 0x8e, 0xc1, 0xff, 0x84, 0x51, 0xca, 0x81, 0xbc, 0xe9, 0x0a, 0x32, 0xa5, 0x47, 0x88, + 0x7e, 0xfe, 0x5b, 0x9d, 0xfb, 0xe4, 0x7d, 0x50, 0xdd, 0x75, 0xfd, 0x80, 0x9f, 0xf5, 0xc5, 0xa4, + 0x6f, 0xe7, 0xba, 0x6c, 0xc7, 0x10, 0x22, 0x1d, 0xd6, 0xab, 0x0c, 0x0f, 0xeb, 0x69, 0x5f, 0x2f, + 0xc2, 0x44, 0xe2, 0x3f, 0x8f, 0x46, 0x4e, 0x8a, 0x4b, 0xe5, 0xa4, 0x15, 0x4f, 0x3e, 0x27, 0x2d, + 0x2b, 0xef, 0xae, 0x94, 0x33, 0xef, 0xae, 0x7c, 0x9c, 0xbc, 0x3b, 0xed, 0xdb, 0x05, 0x00, 0xc5, + 0xad, 0x53, 0x4f, 0x89, 0x33, 0x93, 0x29, 0x71, 0xb9, 0xd7, 0x55, 0x76, 0x42, 0xdc, 0xef, 0x55, + 0xd4, 0x2b, 0xf1, 0x74, 0xb8, 0xb7, 0x0a, 0x30, 0xa5, 0x27, 0x52, 0xcc, 0x72, 0xab, 0x97, 0xa9, + 0x8c, 0xb5, 0xf0, 0xdf, 0x07, 0x93, 0xed, 0x98, 0x22, 0x4b, 0x5e, 0x88, 0xaa, 0x6a, 0xdd, 0x8c, + 0x96, 0xfd, 0x40, 0x39, 0x2c, 0xae, 0xea, 0x24, 0x20, 0x1f, 0x90, 0xd2, 0x57, 0x3a, 0x91, 0x94, + 0xbe, 0xf8, 0x65, 0xa5, 0xf2, 0x7d, 0x2f, 0x2b, 0xed, 0x41, 0x6d, 0xc7, 0x73, 0xbb, 0x3c, 0x6b, + 0x4e, 0xfe, 0x6f, 0xce, 0xb5, 0x1c, 0x32, 0x25, 0xfa, 0xc7, 0xb8, 0x48, 0xb4, 0x2e, 0x2b, 0xfc, + 0x18, 0x91, 0xe2, 0x4e, 0x69, 0x57, 0x50, 0x1d, 0x3b, 0x49, 0xaa, 0xe1, 0x59, 0xb2, 0x29, 0xb0, + 0xa3, 0x22, 0x93, 0xcc, 0x94, 0x1b, 0x7f, 0x67, 0x32, 0xe5, 0xb4, 0x5f, 0x2c, 0xab, 0x03, 0xac, + 0x95, 0xaa, 0xab, 0x52, 0x18, 0x52, 0x57, 0x45, 0x16, 0xd8, 0x8b, 0xe7, 0x74, 0x3d, 0x0d, 0x63, + 0x1e, 0xd5, 0x7d, 0x59, 0x7a, 0x24, 0x96, 0x2f, 0x81, 0xbc, 0x15, 0x65, 0x6f, 0x3c, 0xf7, 0xab, + 0xf8, 0x80, 0xdc, 0xaf, 0xf7, 0xc5, 0x16, 0x88, 0x48, 0xee, 0x0d, 0xf7, 0x7a, 0xc6, 0x22, 0xe1, + 0xd9, 0x15, 0xf2, 0x7f, 0xdf, 0x2b, 0xe9, 0xec, 0x0a, 0xf9, 0x9f, 0xec, 0x21, 0x04, 0x31, 0x61, + 0xc2, 0xd6, 0xfd, 0x80, 0x87, 0xed, 0xcc, 0x85, 0x60, 0x84, 0xc4, 0xb2, 0x70, 0x1b, 0xad, 0xc5, + 0xf0, 0x60, 0x02, 0x6b, 0x2c, 0x0f, 0x6f, 0xfc, 0x74, 0xf3, 0xf0, 0xb2, 0xf3, 0xb2, 0xaa, 0x23, + 0xe5, 0x65, 0x1d, 0x94, 0x20, 0x65, 0x3b, 0xfd, 0x2c, 0x42, 0xf1, 0x5f, 0x2a, 0x42, 0xf1, 0x76, + 0x11, 0xa2, 0x83, 0xe0, 0x98, 0xa9, 0x16, 0xaf, 0x42, 0xb5, 0xab, 0xdf, 0x5d, 0xa2, 0xb6, 0xbe, + 0x9f, 0xe7, 0xcf, 0x4e, 0xd6, 0x25, 0x0e, 0x0c, 0xb1, 0x11, 0x1f, 0xc0, 0x0a, 0x6b, 0xdf, 0xe5, + 0xf6, 0x38, 0x47, 0x65, 0xf4, 0x84, 0x4f, 0x2b, 0x7a, 0xc6, 0x18, 0x19, 0xed, 0xcf, 0x8b, 0x20, + 0x8b, 0x24, 0x12, 0x0a, 0x95, 0x1d, 0xeb, 0x2e, 0x35, 0x73, 0xa7, 0x1d, 0xc6, 0xfe, 0x82, 0x4a, + 0xb8, 0xd4, 0x79, 0x03, 0x0a, 0xec, 0xdc, 0x57, 0x2a, 0x42, 0x24, 0x92, 0x7f, 0x39, 0x7c, 0xa5, + 0xf1, 0x50, 0x8b, 0xf4, 0x95, 0x8a, 0x26, 0x54, 0x34, 0x84, 0x6b, 0x96, 0xc7, 0xa9, 0x25, 0x4b, + 0xf3, 0xb8, 0x66, 0x63, 0xf1, 0x6e, 0xe5, 0x9a, 0xf5, 0xc5, 0x05, 0x64, 0x49, 0xa3, 0xf9, 0xc9, + 0x6f, 0x7d, 0xf7, 0xf2, 0x23, 0xdf, 0xfe, 0xee, 0xe5, 0x47, 0xbe, 0xf3, 0xdd, 0xcb, 0x8f, 0x7c, + 0xfe, 0xf0, 0x72, 0xe1, 0x5b, 0x87, 0x97, 0x0b, 0xdf, 0x3e, 0xbc, 0x5c, 0xf8, 0xce, 0xe1, 0xe5, + 0xc2, 0xdf, 0x1d, 0x5e, 0x2e, 0xfc, 0xca, 0xdf, 0x5f, 0x7e, 0xe4, 0x13, 0xcf, 0x47, 0x53, 0x98, + 0x53, 0x53, 0x98, 0x53, 0x04, 0xe7, 0x7a, 0x9d, 0xf6, 0x1c, 0x9b, 0x42, 0xd4, 0xa2, 0xa6, 0xf0, + 0x9f, 0x01, 0x00, 0x00, 0xff, 0xff, 0x16, 0xbc, 0x15, 0xa3, 0x10, 0x86, 0x00, 0x00, } func (m *AbstractPodTemplate) Marshal() (dAtA []byte, err error) { @@ -8062,6 +8062,9 @@ func (m *VertexStatus) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l + i = encodeVarintGenerated(dAtA, i, uint64(m.ObservedGeneration)) + i-- + dAtA[i] = 0x40 { size, err := m.Status.MarshalToSizedBuffer(dAtA[:i]) if err != nil { @@ -10196,6 +10199,7 @@ func (m *VertexStatus) Size() (n int) { n += 1 + l + sovGenerated(uint64(l)) l = m.Status.Size() n += 1 + l + sovGenerated(uint64(l)) + n += 1 + sovGenerated(uint64(m.ObservedGeneration)) return n } @@ -11556,6 +11560,7 @@ func (this *VertexStatus) String() string { `Selector:` + fmt.Sprintf("%v", this.Selector) + `,`, `Reason:` + fmt.Sprintf("%v", this.Reason) + `,`, `Status:` + strings.Replace(strings.Replace(this.Status.String(), "Status", "Status", 1), `&`, ``, 1) + `,`, + `ObservedGeneration:` + fmt.Sprintf("%v", this.ObservedGeneration) + `,`, `}`, }, "") return s @@ -27841,6 +27846,25 @@ func (m *VertexStatus) Unmarshal(dAtA []byte) error { return err } iNdEx = postIndex + case 8: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field ObservedGeneration", wireType) + } + m.ObservedGeneration = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.ObservedGeneration |= int64(b&0x7F) << shift + if b < 0x80 { + break + } + } default: iNdEx = preIndex skippy, err := skipGenerated(dAtA[iNdEx:]) diff --git a/pkg/apis/numaflow/v1alpha1/generated.proto b/pkg/apis/numaflow/v1alpha1/generated.proto index 19fbc9a266..69851f9ded 100644 --- a/pkg/apis/numaflow/v1alpha1/generated.proto +++ b/pkg/apis/numaflow/v1alpha1/generated.proto @@ -1486,6 +1486,9 @@ message VertexStatus { optional k8s.io.apimachinery.pkg.apis.meta.v1.Time lastScaledAt = 4; optional Status status = 7; + + // ObservedGeneration stores the generation value observed by the controller. + optional int64 observedGeneration = 8; } message VertexTemplate { diff --git a/pkg/apis/numaflow/v1alpha1/openapi_generated.go b/pkg/apis/numaflow/v1alpha1/openapi_generated.go index 477414aa8e..6a3bf1406c 100644 --- a/pkg/apis/numaflow/v1alpha1/openapi_generated.go +++ b/pkg/apis/numaflow/v1alpha1/openapi_generated.go @@ -4970,6 +4970,13 @@ func schema_pkg_apis_numaflow_v1alpha1_VertexStatus(ref common.ReferenceCallback }, }, }, + "observedGeneration": { + SchemaProps: spec.SchemaProps{ + Description: "ObservedGeneration stores the generation value observed by the controller.", + Type: []string{"integer"}, + Format: "int64", + }, + }, }, Required: []string{"phase", "replicas"}, }, diff --git a/pkg/apis/numaflow/v1alpha1/vertex_types.go b/pkg/apis/numaflow/v1alpha1/vertex_types.go index 806e4fc6ce..39a4c05b18 100644 --- a/pkg/apis/numaflow/v1alpha1/vertex_types.go +++ b/pkg/apis/numaflow/v1alpha1/vertex_types.go @@ -829,6 +829,8 @@ type VertexStatus struct { Selector string `json:"selector,omitempty" protobuf:"bytes,5,opt,name=selector"` LastScaledAt metav1.Time `json:"lastScaledAt,omitempty" protobuf:"bytes,4,opt,name=lastScaledAt"` Status `json:",inline" protobuf:"bytes,7,opt,name=status"` + // ObservedGeneration stores the generation value observed by the controller. + ObservedGeneration int64 `json:"observedGeneration,omitempty" protobuf:"varint,8,opt,name=observedGeneration"` } func (vs *VertexStatus) MarkPhase(phase VertexPhase, reason, message string) { @@ -868,6 +870,11 @@ func (vs *VertexStatus) IsHealthy() bool { return vs.IsReady() } +// SetObservedGeneration sets the Status ObservedGeneration +func (vs *VertexStatus) SetObservedGeneration(value int64) { + vs.ObservedGeneration = value +} + // +kubebuilder:object:root=true // +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object type VertexList struct { diff --git a/pkg/reconciler/isbsvc/installer/jetstream.go b/pkg/reconciler/isbsvc/installer/jetstream.go index ffb5ea2d09..e0d618e9ac 100644 --- a/pkg/reconciler/isbsvc/installer/jetstream.go +++ b/pkg/reconciler/isbsvc/installer/jetstream.go @@ -569,10 +569,10 @@ func (r *jetStreamInstaller) CheckChildrenResourceStatus(ctx context.Context) er return err } // calculate the status of the InterStepBufferService by statefulset status and update the status of isbSvc - if msg, status := getStatefulSetStatus(&isbStatefulSet); status { - r.isbSvc.Status.MarkChildrenResourceHealthy("RolloutFinished", msg) + if msg, reason, status := getStatefulSetStatus(&isbStatefulSet); status { + r.isbSvc.Status.MarkChildrenResourceHealthy(reason, msg) } else { - r.isbSvc.Status.MarkChildrenResourceNotHealthy("Progressing", msg) + r.isbSvc.Status.MarkChildrenResourceNotHealthy(reason, msg) } return nil } diff --git a/pkg/reconciler/isbsvc/installer/native_redis.go b/pkg/reconciler/isbsvc/installer/native_redis.go index 0723bf25da..f3f5d2cd62 100644 --- a/pkg/reconciler/isbsvc/installer/native_redis.go +++ b/pkg/reconciler/isbsvc/installer/native_redis.go @@ -627,13 +627,19 @@ func (r *redisInstaller) CheckChildrenResourceStatus(ctx context.Context) error Namespace: r.isbSvc.Namespace, Name: generateRedisStatefulSetName(r.isbSvc), }, &isbStatefulSet); err != nil { + if apierrors.IsNotFound(err) { + r.isbSvc.Status.MarkChildrenResourceNotHealthy("GetStatefulSetFailed", + "StatefulSet not found, might be still under creation") + return nil + } + r.isbSvc.Status.MarkChildrenResourceNotHealthy("GetStatefulSetFailed", err.Error()) return err } // calculate the status of the InterStepBufferService by statefulset status and update the status of isbSvc - if msg, status := getStatefulSetStatus(&isbStatefulSet); status { - r.isbSvc.Status.MarkChildrenResourceHealthy("RolloutFinished", msg) + if msg, reason, status := getStatefulSetStatus(&isbStatefulSet); status { + r.isbSvc.Status.MarkChildrenResourceHealthy(reason, msg) } else { - r.isbSvc.Status.MarkChildrenResourceNotHealthy("Progressing", msg) + r.isbSvc.Status.MarkChildrenResourceNotHealthy(reason, msg) } return nil } diff --git a/pkg/reconciler/isbsvc/installer/watcher.go b/pkg/reconciler/isbsvc/installer/watcher.go index 9951e49461..88e06c11fa 100644 --- a/pkg/reconciler/isbsvc/installer/watcher.go +++ b/pkg/reconciler/isbsvc/installer/watcher.go @@ -8,29 +8,29 @@ import ( // getStatefulSetStatus returns a message describing statefulset status, and a bool value indicating if the status is considered done. // Borrowed at kubernetes/kubectl/rollout_status.go https://github.com/kubernetes/kubernetes/blob/cea1d4e20b4a7886d8ff65f34c6d4f95efcb4742/staging/src/k8s.io/kubectl/pkg/polymorphichelpers/rollout_status.go#L130 -func getStatefulSetStatus(sts *appv1.StatefulSet) (string, bool) { +func getStatefulSetStatus(sts *appv1.StatefulSet) (string, string, bool) { if sts.Status.ObservedGeneration == 0 || sts.Generation > sts.Status.ObservedGeneration { - return "Waiting for statefulset spec update to be observed...\n", false + return "Waiting for statefulset spec update to be observed...\n", "Progressing", false + } + if sts.Status.UpdateRevision != sts.Status.CurrentRevision { + return fmt.Sprintf("waiting for statefulset rolling update to complete %d pods at revision %s...\n", + sts.Status.UpdatedReplicas, sts.Status.UpdateRevision), "Progressing", false } if sts.Spec.Replicas != nil && sts.Status.ReadyReplicas < *sts.Spec.Replicas { - return fmt.Sprintf("Waiting for %d pods to be ready...\n", *sts.Spec.Replicas-sts.Status.ReadyReplicas), false + return fmt.Sprintf("Waiting for %d pods to be ready...\n", *sts.Spec.Replicas-sts.Status.ReadyReplicas), "Unavailable", false } if sts.Spec.UpdateStrategy.Type == appv1.RollingUpdateStatefulSetStrategyType && sts.Spec.UpdateStrategy.RollingUpdate != nil { if sts.Spec.Replicas != nil && sts.Spec.UpdateStrategy.RollingUpdate.Partition != nil { if sts.Status.UpdatedReplicas < (*sts.Spec.Replicas - *sts.Spec.UpdateStrategy.RollingUpdate.Partition) { return fmt.Sprintf( "Waiting for partitioned roll out to finish: %d out of %d new pods have been updated...\n", - sts.Status.UpdatedReplicas, *sts.Spec.Replicas-*sts.Spec.UpdateStrategy.RollingUpdate.Partition), false + sts.Status.UpdatedReplicas, *sts.Spec.Replicas-*sts.Spec.UpdateStrategy.RollingUpdate.Partition), "Progressing", false } } return fmt.Sprintf("partitioned roll out complete: %d new pods have been updated...\n", - sts.Status.UpdatedReplicas), true - } - if sts.Status.UpdateRevision != sts.Status.CurrentRevision { - return fmt.Sprintf("waiting for statefulset rolling update to complete %d pods at revision %s...\n", - sts.Status.UpdatedReplicas, sts.Status.UpdateRevision), false + sts.Status.UpdatedReplicas), "Healthy", true } return fmt.Sprintf( "statefulset rolling update complete %d pods at revision %s...\n", - sts.Status.CurrentReplicas, sts.Status.CurrentRevision), true + sts.Status.CurrentReplicas, sts.Status.CurrentRevision), "Healthy", true } diff --git a/pkg/reconciler/isbsvc/installer/watcher_test.go b/pkg/reconciler/isbsvc/installer/watcher_test.go index 37fdbd9cad..79c912dc40 100644 --- a/pkg/reconciler/isbsvc/installer/watcher_test.go +++ b/pkg/reconciler/isbsvc/installer/watcher_test.go @@ -30,7 +30,8 @@ var ( func TestGetStatefulSetStatus(t *testing.T) { t.Run("Test statefulset status as true", func(t *testing.T) { testSts := statefulSet.DeepCopy() - msg, status := getStatefulSetStatus(testSts) + msg, reason, status := getStatefulSetStatus(testSts) + assert.Equal(t, "Healthy", reason) assert.True(t, status) assert.Equal(t, "statefulset rolling update complete 3 pods at revision isbsvc-default-js-597b7f74d7...\n", msg) }) @@ -38,7 +39,8 @@ func TestGetStatefulSetStatus(t *testing.T) { t.Run("Test statefulset status as false", func(t *testing.T) { testSts := statefulSet.DeepCopy() testSts.Status.UpdateRevision = "isbsvc-default-js-597b7f73a1" - msg, status := getStatefulSetStatus(testSts) + msg, reason, status := getStatefulSetStatus(testSts) + assert.Equal(t, "Progressing", reason) assert.False(t, status) assert.Equal(t, "waiting for statefulset rolling update to complete 3 pods at revision isbsvc-default-js-597b7f73a1...\n", msg) }) @@ -46,7 +48,8 @@ func TestGetStatefulSetStatus(t *testing.T) { t.Run("Test statefulset with ObservedGeneration as zero", func(t *testing.T) { testSts := statefulSet.DeepCopy() testSts.Status.ObservedGeneration = 0 - msg, status := getStatefulSetStatus(testSts) + msg, reason, status := getStatefulSetStatus(testSts) + assert.Equal(t, "Progressing", reason) assert.False(t, status) assert.Equal(t, "Waiting for statefulset spec update to be observed...\n", msg) }) diff --git a/pkg/reconciler/pipeline/watcher.go b/pkg/reconciler/pipeline/watcher.go index 85499b1fcf..2b65987dc4 100644 --- a/pkg/reconciler/pipeline/watcher.go +++ b/pkg/reconciler/pipeline/watcher.go @@ -11,11 +11,14 @@ import ( // getVertexStatus will calculate the status of the vertices and return the status and reason func getVertexStatus(vertices *dfv1.VertexList) (bool, string) { for _, vertex := range vertices.Items { - if !vertex.Status.IsHealthy() { + if vertex.Status.ObservedGeneration == 0 || vertex.Generation > vertex.Status.ObservedGeneration { return false, "Progressing" } + if !vertex.Status.IsHealthy() { + return false, "Unavailable" + } } - return true, "Successful" + return true, "Healthy" } // getDeploymentStatus returns a message describing deployment status, and message with reason where bool value @@ -30,21 +33,21 @@ func getDeploymentStatus(deployment *appv1.Deployment) (string, string, bool) { if deployment.Spec.Replicas != nil && deployment.Status.UpdatedReplicas < *deployment.Spec.Replicas { return fmt.Sprintf( "Waiting for deployment %q rollout to finish: %d out of %d new replicas have been updated...\n", - deployment.Name, deployment.Status.UpdatedReplicas, *deployment.Spec.Replicas), "DeploymentNotComplete", false + deployment.Name, deployment.Status.UpdatedReplicas, *deployment.Spec.Replicas), "Progressing", false } if deployment.Status.Replicas > deployment.Status.UpdatedReplicas { return fmt.Sprintf( "Waiting for deployment %q rollout to finish: %d old replicas are pending termination...\n", - deployment.Name, deployment.Status.Replicas-deployment.Status.UpdatedReplicas), "DeploymentNotComplete", false + deployment.Name, deployment.Status.Replicas-deployment.Status.UpdatedReplicas), "Progressing", false } if deployment.Status.AvailableReplicas < deployment.Status.UpdatedReplicas { return fmt.Sprintf( "Waiting for deployment %q rollout to finish: %d of %d updated replicas are available...\n", - deployment.Name, deployment.Status.AvailableReplicas, deployment.Status.UpdatedReplicas), "DeploymentNotComplete", false + deployment.Name, deployment.Status.AvailableReplicas, deployment.Status.UpdatedReplicas), "Progressing", false } - return fmt.Sprintf("deployment %q successfully rolled out\n", deployment.Name), "DeploymentComplete", true + return fmt.Sprintf("deployment %q successfully rolled out\n", deployment.Name), "Healthy", true } - return "Waiting for deployment spec update to be observed...", "DeploymentNotComplete", false + return "Waiting for deployment spec update to be observed...", "Progressing", false } // GetDeploymentCondition returns the condition with the provided type. diff --git a/pkg/reconciler/pipeline/watcher_test.go b/pkg/reconciler/pipeline/watcher_test.go index 9662687208..0cd01a5024 100644 --- a/pkg/reconciler/pipeline/watcher_test.go +++ b/pkg/reconciler/pipeline/watcher_test.go @@ -33,7 +33,7 @@ func TestGetDeploymentStatus(t *testing.T) { t.Run("Test Deployment status as true", func(t *testing.T) { testDeployment := deployment.DeepCopy() message, reason, done := getDeploymentStatus(testDeployment) - assert.Equal(t, "DeploymentComplete", reason) + assert.Equal(t, "Healthy", reason) assert.True(t, done) assert.Equal(t, "deployment \"test-deployment\" successfully rolled out\n", message) }) @@ -43,7 +43,7 @@ func TestGetDeploymentStatus(t *testing.T) { testDeployment.Status.ObservedGeneration = 0 testDeployment.Status.UpdatedReplicas = 0 message, reason, done := getDeploymentStatus(testDeployment) - assert.Equal(t, "DeploymentNotComplete", reason) + assert.Equal(t, "Progressing", reason) assert.False(t, done) assert.Equal(t, "Waiting for deployment \"test-deployment\" rollout to finish: 0 out of 1 new replicas have been updated...\n", message) }) @@ -53,7 +53,7 @@ func TestGetDeploymentStatus(t *testing.T) { testDeployment.Status.UpdatedReplicas = 1 testDeployment.Status.Replicas = 2 message, reason, done := getDeploymentStatus(testDeployment) - assert.Equal(t, "DeploymentNotComplete", reason) + assert.Equal(t, "Progressing", reason) assert.False(t, done) assert.Equal(t, "Waiting for deployment \"test-deployment\" rollout to finish: 1 old replicas are pending termination...\n", message) }) @@ -64,8 +64,12 @@ func TestGetVertexStatus(t *testing.T) { vertices := dfv1.VertexList{ Items: []dfv1.Vertex{ { + ObjectMeta: metav1.ObjectMeta{ + Generation: 1, + }, Status: dfv1.VertexStatus{ - Phase: "Running", + Phase: "Running", + ObservedGeneration: 1, }, }, }, @@ -78,7 +82,32 @@ func TestGetVertexStatus(t *testing.T) { } status, reason := getVertexStatus(&vertices) assert.True(t, status) - assert.Equal(t, "Successful", reason) + assert.Equal(t, "Healthy", reason) + }) + + t.Run("Test Vertex status as false when ObservedGeneration is not matching", func(t *testing.T) { + vertices := dfv1.VertexList{ + Items: []dfv1.Vertex{ + { + ObjectMeta: metav1.ObjectMeta{ + Generation: 2, + }, + Status: dfv1.VertexStatus{ + Phase: "Running", + ObservedGeneration: 1, + }, + }, + }, + } + vertices.Items[0].Status.Conditions = []metav1.Condition{ + { + Type: string(dfv1.VertexConditionPodsHealthy), + Status: metav1.ConditionTrue, + }, + } + status, reason := getVertexStatus(&vertices) + assert.False(t, status) + assert.Equal(t, "Progressing", reason) }) t.Run("Test Vertex status as false", func(t *testing.T) { diff --git a/pkg/reconciler/vertex/controller.go b/pkg/reconciler/vertex/controller.go index 11528f8e20..a1ccd7dd62 100644 --- a/pkg/reconciler/vertex/controller.go +++ b/pkg/reconciler/vertex/controller.go @@ -320,6 +320,7 @@ func (r *vertexReconciler) reconcile(ctx context.Context, vertex *dfv1.Vertex) ( vertex.Status.Selector = selector.String() vertex.Status.MarkPhaseRunning() + vertex.Status.SetObservedGeneration(vertex.Generation) if err = checkChildrenResourceStatus(ctx, r.client, vertex); err != nil { return ctrl.Result{}, fmt.Errorf("failed to check children resource status: %w", err) }