From ebffc5e467d5ddf91eca6bdedcc2e54ea730db7f Mon Sep 17 00:00:00 2001 From: Russell Stern Date: Fri, 15 May 2026 09:45:32 -0400 Subject: [PATCH 1/5] Added batch pending queue items for vault --- pkg/capabilities/actions/vault/messages.pb.go | 80 +++++++++++++++---- pkg/capabilities/actions/vault/messages.proto | 6 ++ 2 files changed, 71 insertions(+), 15 deletions(-) diff --git a/pkg/capabilities/actions/vault/messages.pb.go b/pkg/capabilities/actions/vault/messages.pb.go index e7d39281c1..94a90da800 100644 --- a/pkg/capabilities/actions/vault/messages.pb.go +++ b/pkg/capabilities/actions/vault/messages.pb.go @@ -2079,6 +2079,52 @@ func (x *StoredPendingQueueItem) GetId() string { return "" } +// Multiple pending queue items packed into one OCR3.1 blob payload. +// Not persisted; wire format only. Old nodes treat blobs as single StoredPendingQueueItem. +type StoredPendingQueueBatch struct { + state protoimpl.MessageState `protogen:"open.v1"` + Items []*StoredPendingQueueItem `protobuf:"bytes,1,rep,name=items,proto3" json:"items,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *StoredPendingQueueBatch) Reset() { + *x = StoredPendingQueueBatch{} + mi := &file_capabilities_actions_vault_messages_proto_msgTypes[28] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *StoredPendingQueueBatch) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*StoredPendingQueueBatch) ProtoMessage() {} + +func (x *StoredPendingQueueBatch) ProtoReflect() protoreflect.Message { + mi := &file_capabilities_actions_vault_messages_proto_msgTypes[28] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use StoredPendingQueueBatch.ProtoReflect.Descriptor instead. +func (*StoredPendingQueueBatch) Descriptor() ([]byte, []int) { + return file_capabilities_actions_vault_messages_proto_rawDescGZIP(), []int{28} +} + +func (x *StoredPendingQueueBatch) GetItems() []*StoredPendingQueueItem { + if x != nil { + return x.Items + } + return nil +} + type ReportingPluginConfig struct { state protoimpl.MessageState `protogen:"open.v1"` // Plugin-specific configuration @@ -2106,7 +2152,7 @@ type ReportingPluginConfig struct { func (x *ReportingPluginConfig) Reset() { *x = ReportingPluginConfig{} - mi := &file_capabilities_actions_vault_messages_proto_msgTypes[28] + mi := &file_capabilities_actions_vault_messages_proto_msgTypes[29] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2118,7 +2164,7 @@ func (x *ReportingPluginConfig) String() string { func (*ReportingPluginConfig) ProtoMessage() {} func (x *ReportingPluginConfig) ProtoReflect() protoreflect.Message { - mi := &file_capabilities_actions_vault_messages_proto_msgTypes[28] + mi := &file_capabilities_actions_vault_messages_proto_msgTypes[29] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2131,7 +2177,7 @@ func (x *ReportingPluginConfig) ProtoReflect() protoreflect.Message { // Deprecated: Use ReportingPluginConfig.ProtoReflect.Descriptor instead. func (*ReportingPluginConfig) Descriptor() ([]byte, []int) { - return file_capabilities_actions_vault_messages_proto_rawDescGZIP(), []int{28} + return file_capabilities_actions_vault_messages_proto_rawDescGZIP(), []int{29} } func (x *ReportingPluginConfig) GetBatchSize() int32 { @@ -2386,7 +2432,9 @@ const file_capabilities_actions_vault_messages_proto_rawDesc = "" + "\x06length\x18\x01 \x01(\x03R\x06length\"R\n" + "\x16StoredPendingQueueItem\x12(\n" + "\x04item\x18\x01 \x01(\v2\x14.google.protobuf.AnyR\x04item\x12\x0e\n" + - "\x02id\x18\x02 \x01(\tR\x02id\"\xa0\t\n" + + "\x02id\x18\x02 \x01(\tR\x02id\"N\n" + + "\x17StoredPendingQueueBatch\x123\n" + + "\x05items\x18\x01 \x03(\v2\x1d.vault.StoredPendingQueueItemR\x05items\"\xa0\t\n" + "\x15ReportingPluginConfig\x12\x1c\n" + "\tBatchSize\x18\x01 \x01(\x05R\tBatchSize\x12.\n" + "\x12MaxSecretsPerOwner\x18\x02 \x01(\x05R\x12MaxSecretsPerOwner\x12:\n" + @@ -2431,7 +2479,7 @@ func file_capabilities_actions_vault_messages_proto_rawDescGZIP() []byte { } var file_capabilities_actions_vault_messages_proto_enumTypes = make([]protoimpl.EnumInfo, 2) -var file_capabilities_actions_vault_messages_proto_msgTypes = make([]protoimpl.MessageInfo, 29) +var file_capabilities_actions_vault_messages_proto_msgTypes = make([]protoimpl.MessageInfo, 30) var file_capabilities_actions_vault_messages_proto_goTypes = []any{ (RequestType)(0), // 0: vault.RequestType (ReportFormat)(0), // 1: vault.ReportFormat @@ -2463,8 +2511,9 @@ var file_capabilities_actions_vault_messages_proto_goTypes = []any{ (*StoredMetadata)(nil), // 27: vault.StoredMetadata (*StoredPendingQueueIndex)(nil), // 28: vault.StoredPendingQueueIndex (*StoredPendingQueueItem)(nil), // 29: vault.StoredPendingQueueItem - (*ReportingPluginConfig)(nil), // 30: vault.ReportingPluginConfig - (*anypb.Any)(nil), // 31: google.protobuf.Any + (*StoredPendingQueueBatch)(nil), // 30: vault.StoredPendingQueueBatch + (*ReportingPluginConfig)(nil), // 31: vault.ReportingPluginConfig + (*anypb.Any)(nil), // 32: google.protobuf.Any } var file_capabilities_actions_vault_messages_proto_depIdxs = []int32{ 2, // 0: vault.SecretRequest.id:type_name -> vault.SecretIdentifier @@ -2511,12 +2560,13 @@ var file_capabilities_actions_vault_messages_proto_depIdxs = []int32{ 0, // 41: vault.ReportInfo.request_type:type_name -> vault.RequestType 1, // 42: vault.ReportInfo.format:type_name -> vault.ReportFormat 2, // 43: vault.StoredMetadata.secret_identifiers:type_name -> vault.SecretIdentifier - 31, // 44: vault.StoredPendingQueueItem.item:type_name -> google.protobuf.Any - 45, // [45:45] is the sub-list for method output_type - 45, // [45:45] is the sub-list for method input_type - 45, // [45:45] is the sub-list for extension type_name - 45, // [45:45] is the sub-list for extension extendee - 0, // [0:45] is the sub-list for field type_name + 32, // 44: vault.StoredPendingQueueItem.item:type_name -> google.protobuf.Any + 29, // 45: vault.StoredPendingQueueBatch.items:type_name -> vault.StoredPendingQueueItem + 46, // [46:46] is the sub-list for method output_type + 46, // [46:46] is the sub-list for method input_type + 46, // [46:46] is the sub-list for extension type_name + 46, // [46:46] is the sub-list for extension extendee + 0, // [0:46] is the sub-list for field type_name } func init() { file_capabilities_actions_vault_messages_proto_init() } @@ -2552,14 +2602,14 @@ func file_capabilities_actions_vault_messages_proto_init() { (*Outcome_DeleteSecretsResponse)(nil), (*Outcome_ListSecretIdentifiersResponse)(nil), } - file_capabilities_actions_vault_messages_proto_msgTypes[28].OneofWrappers = []any{} + file_capabilities_actions_vault_messages_proto_msgTypes[29].OneofWrappers = []any{} type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: unsafe.Slice(unsafe.StringData(file_capabilities_actions_vault_messages_proto_rawDesc), len(file_capabilities_actions_vault_messages_proto_rawDesc)), NumEnums: 2, - NumMessages: 29, + NumMessages: 30, NumExtensions: 0, NumServices: 0, }, diff --git a/pkg/capabilities/actions/vault/messages.proto b/pkg/capabilities/actions/vault/messages.proto index 20bfc089d6..0b7abc55b8 100644 --- a/pkg/capabilities/actions/vault/messages.proto +++ b/pkg/capabilities/actions/vault/messages.proto @@ -214,6 +214,12 @@ message StoredPendingQueueItem { string id = 2; } +// Multiple pending queue items packed into one OCR3.1 blob payload. +// Not persisted; wire format only. Old nodes treat blobs as single StoredPendingQueueItem. +message StoredPendingQueueBatch { + repeated StoredPendingQueueItem items = 1; +} + message ReportingPluginConfig { reserved 8; From ad71e5138ce511e7c916b1c0425d10fb0799d486 Mon Sep 17 00:00:00 2001 From: Russell Stern Date: Wed, 20 May 2026 13:12:07 -0400 Subject: [PATCH 2/5] Added VaultOptimizations feature flag --- pkg/settings/cresettings/README.md | 1 + pkg/settings/cresettings/defaults.json | 1 + pkg/settings/cresettings/defaults.toml | 1 + pkg/settings/cresettings/settings.go | 2 ++ pkg/settings/cresettings/settings_test.go | 1 + 5 files changed, 6 insertions(+) diff --git a/pkg/settings/cresettings/README.md b/pkg/settings/cresettings/README.md index 47bfac10f3..e6fe50c2ec 100644 --- a/pkg/settings/cresettings/README.md +++ b/pkg/settings/cresettings/README.md @@ -40,6 +40,7 @@ flowchart VaultOrgIdAsSecretOwnerEnabled[/VaultOrgIdAsSecretOwnerEnabled\]:::gate VaultBase64EncodingEnabled[/VaultBase64EncodingEnabled\]:::gate VaultForceEmptyOCRRounds[/VaultForceEmptyOCRRounds\]:::gate + VaultOptimizationsEnabled[/VaultOptimizationsEnabled\]:::gate end subgraph HandleNodeMessage[gatewayHandler.HandleNodeMessage] diff --git a/pkg/settings/cresettings/defaults.json b/pkg/settings/cresettings/defaults.json index 1aec2f8ad7..5779e59364 100644 --- a/pkg/settings/cresettings/defaults.json +++ b/pkg/settings/cresettings/defaults.json @@ -7,6 +7,7 @@ "VaultOrgIdAsSecretOwnerEnabled": "false", "VaultBase64EncodingEnabled": "false", "VaultForceEmptyOCRRounds": "false", + "VaultOptimizationsEnabled": "false", "GatewayHTTPGlobalRate": "500rps:500", "GatewayHTTPPerNodeRate": "100rps:100", "GatewayConfidentialRelayGlobalRate": "50rps:10", diff --git a/pkg/settings/cresettings/defaults.toml b/pkg/settings/cresettings/defaults.toml index 9499ca3d37..bd79a9aabb 100644 --- a/pkg/settings/cresettings/defaults.toml +++ b/pkg/settings/cresettings/defaults.toml @@ -6,6 +6,7 @@ VaultJWTAuthEnabled = 'false' VaultOrgIdAsSecretOwnerEnabled = 'false' VaultBase64EncodingEnabled = 'false' VaultForceEmptyOCRRounds = 'false' +VaultOptimizationsEnabled = 'false' GatewayHTTPGlobalRate = '500rps:500' GatewayHTTPPerNodeRate = '100rps:100' GatewayConfidentialRelayGlobalRate = '50rps:10' diff --git a/pkg/settings/cresettings/settings.go b/pkg/settings/cresettings/settings.go index 932defcc2a..d6ebc5d88e 100644 --- a/pkg/settings/cresettings/settings.go +++ b/pkg/settings/cresettings/settings.go @@ -60,6 +60,7 @@ var Default = Schema{ VaultOrgIdAsSecretOwnerEnabled: Bool(false), VaultBase64EncodingEnabled: Bool(false), VaultForceEmptyOCRRounds: Bool(false), + VaultOptimizationsEnabled: Bool(false), GatewayHTTPGlobalRate: Rate(rate.Limit(500), 500), GatewayHTTPPerNodeRate: Rate(rate.Limit(100), 100), GatewayConfidentialRelayGlobalRate: Rate(rate.Limit(50), 10), @@ -254,6 +255,7 @@ type Schema struct { VaultOrgIdAsSecretOwnerEnabled Setting[bool] VaultBase64EncodingEnabled Setting[bool] VaultForceEmptyOCRRounds Setting[bool] + VaultOptimizationsEnabled Setting[bool] GatewayHTTPGlobalRate Setting[config.Rate] GatewayHTTPPerNodeRate Setting[config.Rate] GatewayConfidentialRelayGlobalRate Setting[config.Rate] diff --git a/pkg/settings/cresettings/settings_test.go b/pkg/settings/cresettings/settings_test.go index 3165650741..b687b38200 100644 --- a/pkg/settings/cresettings/settings_test.go +++ b/pkg/settings/cresettings/settings_test.go @@ -130,6 +130,7 @@ func TestSchema_Unmarshal(t *testing.T) { assert.False(t, cfg.VaultOrgIdAsSecretOwnerEnabled.DefaultValue) assert.False(t, cfg.VaultBase64EncodingEnabled.DefaultValue) assert.False(t, cfg.VaultForceEmptyOCRRounds.DefaultValue) + assert.False(t, cfg.VaultOptimizationsEnabled.DefaultValue) assert.Equal(t, config.Rate{Limit: rate.Limit(20), Burst: 7}, cfg.GatewayConfidentialRelayGlobalRate.DefaultValue) assert.Equal(t, config.Rate{Limit: rate.Limit(4), Burst: 2}, cfg.GatewayConfidentialRelayPerNodeRate.DefaultValue) assert.Equal(t, 48*time.Hour, cfg.PerOrg.ZeroBalancePruningTimeout.DefaultValue) From 8d8b90c65d4d12b8bf370a4570035c90bcca703e Mon Sep 17 00:00:00 2001 From: Russell Stern Date: Wed, 20 May 2026 14:58:26 -0400 Subject: [PATCH 3/5] Added binary shares field --- pkg/capabilities/actions/vault/messages.pb.go | 13 +++++++++++-- pkg/capabilities/actions/vault/messages.proto | 1 + 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/pkg/capabilities/actions/vault/messages.pb.go b/pkg/capabilities/actions/vault/messages.pb.go index 94a90da800..d1bf723837 100644 --- a/pkg/capabilities/actions/vault/messages.pb.go +++ b/pkg/capabilities/actions/vault/messages.pb.go @@ -245,6 +245,7 @@ type EncryptedShares struct { state protoimpl.MessageState `protogen:"open.v1"` Shares []string `protobuf:"bytes,1,rep,name=shares,proto3" json:"shares,omitempty"` EncryptionKey string `protobuf:"bytes,2,opt,name=encryption_key,json=encryptionKey,proto3" json:"encryption_key,omitempty"` + BinaryShares [][]byte `protobuf:"bytes,3,rep,name=binary_shares,json=binaryShares,proto3" json:"binary_shares,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -293,6 +294,13 @@ func (x *EncryptedShares) GetEncryptionKey() string { return "" } +func (x *EncryptedShares) GetBinaryShares() [][]byte { + if x != nil { + return x.BinaryShares + } + return nil +} + type SecretData struct { state protoimpl.MessageState `protogen:"open.v1"` EncryptedValue string `protobuf:"bytes,2,opt,name=encrypted_value,json=encryptedValue,proto3" json:"encrypted_value,omitempty"` @@ -2310,10 +2318,11 @@ const file_capabilities_actions_vault_messages_proto_rawDesc = "" + "\x05owner\x18\x03 \x01(\tR\x05owner\"a\n" + "\rSecretRequest\x12'\n" + "\x02id\x18\x01 \x01(\v2\x17.vault.SecretIdentifierR\x02id\x12'\n" + - "\x0fencryption_keys\x18\x02 \x03(\tR\x0eencryptionKeys\"P\n" + + "\x0fencryption_keys\x18\x02 \x03(\tR\x0eencryptionKeys\"u\n" + "\x0fEncryptedShares\x12\x16\n" + "\x06shares\x18\x01 \x03(\tR\x06shares\x12%\n" + - "\x0eencryption_key\x18\x02 \x01(\tR\rencryptionKey\"\x94\x01\n" + + "\x0eencryption_key\x18\x02 \x01(\tR\rencryptionKey\x12#\n" + + "\rbinary_shares\x18\x03 \x03(\fR\fbinaryShares\"\x94\x01\n" + "\n" + "SecretData\x12'\n" + "\x0fencrypted_value\x18\x02 \x01(\tR\x0eencryptedValue\x12]\n" + diff --git a/pkg/capabilities/actions/vault/messages.proto b/pkg/capabilities/actions/vault/messages.proto index 0b7abc55b8..5e06156d4b 100644 --- a/pkg/capabilities/actions/vault/messages.proto +++ b/pkg/capabilities/actions/vault/messages.proto @@ -20,6 +20,7 @@ message SecretRequest { message EncryptedShares { repeated string shares = 1; string encryption_key = 2; + repeated bytes binary_shares = 3; } message SecretData { From b17f8e7e1ef19dd07bafca7ca6309f456a2f143d Mon Sep 17 00:00:00 2001 From: Russell Stern Date: Mon, 25 May 2026 15:38:19 -0400 Subject: [PATCH 4/5] Added is_batch field --- pkg/capabilities/actions/vault/messages.pb.go | 13 +++++++++++-- pkg/capabilities/actions/vault/messages.proto | 1 + 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/pkg/capabilities/actions/vault/messages.pb.go b/pkg/capabilities/actions/vault/messages.pb.go index f9a00fd08e..6086385c18 100644 --- a/pkg/capabilities/actions/vault/messages.pb.go +++ b/pkg/capabilities/actions/vault/messages.pb.go @@ -2112,6 +2112,7 @@ func (x *StoredPendingQueueItem) GetId() string { type StoredPendingQueueBatch struct { state protoimpl.MessageState `protogen:"open.v1"` Items []*StoredPendingQueueItem `protobuf:"bytes,1,rep,name=items,proto3" json:"items,omitempty"` + IsBatch bool `protobuf:"varint,3,opt,name=is_batch,json=isBatch,proto3" json:"is_batch,omitempty"` // Disambiguates from single StoredPendingQueueItem during unmarshalling unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -2153,6 +2154,13 @@ func (x *StoredPendingQueueBatch) GetItems() []*StoredPendingQueueItem { return nil } +func (x *StoredPendingQueueBatch) GetIsBatch() bool { + if x != nil { + return x.IsBatch + } + return false +} + type ReportingPluginConfig struct { state protoimpl.MessageState `protogen:"open.v1"` // Plugin-specific configuration @@ -2461,9 +2469,10 @@ const file_capabilities_actions_vault_messages_proto_rawDesc = "" + "\x06length\x18\x01 \x01(\x03R\x06length\"R\n" + "\x16StoredPendingQueueItem\x12(\n" + "\x04item\x18\x01 \x01(\v2\x14.google.protobuf.AnyR\x04item\x12\x0e\n" + - "\x02id\x18\x02 \x01(\tR\x02id\"N\n" + + "\x02id\x18\x02 \x01(\tR\x02id\"i\n" + "\x17StoredPendingQueueBatch\x123\n" + - "\x05items\x18\x01 \x03(\v2\x1d.vault.StoredPendingQueueItemR\x05items\"\xa0\t\n" + + "\x05items\x18\x01 \x03(\v2\x1d.vault.StoredPendingQueueItemR\x05items\x12\x19\n" + + "\bis_batch\x18\x03 \x01(\bR\aisBatch\"\xa0\t\n" + "\x15ReportingPluginConfig\x12\x1c\n" + "\tBatchSize\x18\x01 \x01(\x05R\tBatchSize\x12.\n" + "\x12MaxSecretsPerOwner\x18\x02 \x01(\x05R\x12MaxSecretsPerOwner\x12:\n" + diff --git a/pkg/capabilities/actions/vault/messages.proto b/pkg/capabilities/actions/vault/messages.proto index 31a57b10c0..1f31b31694 100644 --- a/pkg/capabilities/actions/vault/messages.proto +++ b/pkg/capabilities/actions/vault/messages.proto @@ -219,6 +219,7 @@ message StoredPendingQueueItem { // Not persisted; wire format only. Old nodes treat blobs as single StoredPendingQueueItem. message StoredPendingQueueBatch { repeated StoredPendingQueueItem items = 1; + bool is_batch = 3; // Disambiguates from single StoredPendingQueueItem during unmarshalling } message ReportingPluginConfig { From a1633daaf36c09a1a27e55b7b2f08f3423307b4a Mon Sep 17 00:00:00 2001 From: Russell Stern Date: Tue, 26 May 2026 11:38:14 -0400 Subject: [PATCH 5/5] Switched to blob items instead of queue batch --- pkg/capabilities/actions/vault/messages.pb.go | 49 +++++++++++-------- pkg/capabilities/actions/vault/messages.proto | 11 +++-- 2 files changed, 35 insertions(+), 25 deletions(-) diff --git a/pkg/capabilities/actions/vault/messages.pb.go b/pkg/capabilities/actions/vault/messages.pb.go index 6086385c18..d607130d15 100644 --- a/pkg/capabilities/actions/vault/messages.pb.go +++ b/pkg/capabilities/actions/vault/messages.pb.go @@ -2107,30 +2107,31 @@ func (x *StoredPendingQueueItem) GetId() string { return "" } -// Multiple pending queue items packed into one OCR3.1 blob payload. -// Not persisted; wire format only. Old nodes treat blobs as single StoredPendingQueueItem. -type StoredPendingQueueBatch struct { - state protoimpl.MessageState `protogen:"open.v1"` - Items []*StoredPendingQueueItem `protobuf:"bytes,1,rep,name=items,proto3" json:"items,omitempty"` - IsBatch bool `protobuf:"varint,3,opt,name=is_batch,json=isBatch,proto3" json:"is_batch,omitempty"` // Disambiguates from single StoredPendingQueueItem during unmarshalling +// Wire format for pending queue blobs. Not persisted. +// When is_batch=false, wire-compatible with StoredPendingQueueItem (field 1 = Any, field 2 = string). +type PendingQueueBlobItems struct { + state protoimpl.MessageState `protogen:"open.v1"` + Items []*anypb.Any `protobuf:"bytes,1,rep,name=items,proto3" json:"items,omitempty"` // non-batch: raw payload Any; batch: each Any wraps a StoredPendingQueueItem + Id string `protobuf:"bytes,2,opt,name=id,proto3" json:"id,omitempty"` // non-batch: request ID; batch: empty + IsBatch bool `protobuf:"varint,3,opt,name=is_batch,json=isBatch,proto3" json:"is_batch,omitempty"` // disambiguates single-item from batch during unmarshalling unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } -func (x *StoredPendingQueueBatch) Reset() { - *x = StoredPendingQueueBatch{} +func (x *PendingQueueBlobItems) Reset() { + *x = PendingQueueBlobItems{} mi := &file_capabilities_actions_vault_messages_proto_msgTypes[28] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } -func (x *StoredPendingQueueBatch) String() string { +func (x *PendingQueueBlobItems) String() string { return protoimpl.X.MessageStringOf(x) } -func (*StoredPendingQueueBatch) ProtoMessage() {} +func (*PendingQueueBlobItems) ProtoMessage() {} -func (x *StoredPendingQueueBatch) ProtoReflect() protoreflect.Message { +func (x *PendingQueueBlobItems) ProtoReflect() protoreflect.Message { mi := &file_capabilities_actions_vault_messages_proto_msgTypes[28] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -2142,19 +2143,26 @@ func (x *StoredPendingQueueBatch) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use StoredPendingQueueBatch.ProtoReflect.Descriptor instead. -func (*StoredPendingQueueBatch) Descriptor() ([]byte, []int) { +// Deprecated: Use PendingQueueBlobItems.ProtoReflect.Descriptor instead. +func (*PendingQueueBlobItems) Descriptor() ([]byte, []int) { return file_capabilities_actions_vault_messages_proto_rawDescGZIP(), []int{28} } -func (x *StoredPendingQueueBatch) GetItems() []*StoredPendingQueueItem { +func (x *PendingQueueBlobItems) GetItems() []*anypb.Any { if x != nil { return x.Items } return nil } -func (x *StoredPendingQueueBatch) GetIsBatch() bool { +func (x *PendingQueueBlobItems) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +func (x *PendingQueueBlobItems) GetIsBatch() bool { if x != nil { return x.IsBatch } @@ -2469,9 +2477,10 @@ const file_capabilities_actions_vault_messages_proto_rawDesc = "" + "\x06length\x18\x01 \x01(\x03R\x06length\"R\n" + "\x16StoredPendingQueueItem\x12(\n" + "\x04item\x18\x01 \x01(\v2\x14.google.protobuf.AnyR\x04item\x12\x0e\n" + - "\x02id\x18\x02 \x01(\tR\x02id\"i\n" + - "\x17StoredPendingQueueBatch\x123\n" + - "\x05items\x18\x01 \x03(\v2\x1d.vault.StoredPendingQueueItemR\x05items\x12\x19\n" + + "\x02id\x18\x02 \x01(\tR\x02id\"n\n" + + "\x15PendingQueueBlobItems\x12*\n" + + "\x05items\x18\x01 \x03(\v2\x14.google.protobuf.AnyR\x05items\x12\x0e\n" + + "\x02id\x18\x02 \x01(\tR\x02id\x12\x19\n" + "\bis_batch\x18\x03 \x01(\bR\aisBatch\"\xa0\t\n" + "\x15ReportingPluginConfig\x12\x1c\n" + "\tBatchSize\x18\x01 \x01(\x05R\tBatchSize\x12.\n" + @@ -2549,7 +2558,7 @@ var file_capabilities_actions_vault_messages_proto_goTypes = []any{ (*StoredMetadata)(nil), // 27: vault.StoredMetadata (*StoredPendingQueueIndex)(nil), // 28: vault.StoredPendingQueueIndex (*StoredPendingQueueItem)(nil), // 29: vault.StoredPendingQueueItem - (*StoredPendingQueueBatch)(nil), // 30: vault.StoredPendingQueueBatch + (*PendingQueueBlobItems)(nil), // 30: vault.PendingQueueBlobItems (*ReportingPluginConfig)(nil), // 31: vault.ReportingPluginConfig (*anypb.Any)(nil), // 32: google.protobuf.Any } @@ -2599,7 +2608,7 @@ var file_capabilities_actions_vault_messages_proto_depIdxs = []int32{ 1, // 42: vault.ReportInfo.format:type_name -> vault.ReportFormat 2, // 43: vault.StoredMetadata.secret_identifiers:type_name -> vault.SecretIdentifier 32, // 44: vault.StoredPendingQueueItem.item:type_name -> google.protobuf.Any - 29, // 45: vault.StoredPendingQueueBatch.items:type_name -> vault.StoredPendingQueueItem + 32, // 45: vault.PendingQueueBlobItems.items:type_name -> google.protobuf.Any 46, // [46:46] is the sub-list for method output_type 46, // [46:46] is the sub-list for method input_type 46, // [46:46] is the sub-list for extension type_name diff --git a/pkg/capabilities/actions/vault/messages.proto b/pkg/capabilities/actions/vault/messages.proto index 1f31b31694..f2f5367396 100644 --- a/pkg/capabilities/actions/vault/messages.proto +++ b/pkg/capabilities/actions/vault/messages.proto @@ -215,11 +215,12 @@ message StoredPendingQueueItem { string id = 2; } -// Multiple pending queue items packed into one OCR3.1 blob payload. -// Not persisted; wire format only. Old nodes treat blobs as single StoredPendingQueueItem. -message StoredPendingQueueBatch { - repeated StoredPendingQueueItem items = 1; - bool is_batch = 3; // Disambiguates from single StoredPendingQueueItem during unmarshalling +// Wire format for pending queue blobs. Not persisted. +// When is_batch=false, wire-compatible with StoredPendingQueueItem (field 1 = Any, field 2 = string). +message PendingQueueBlobItems { + repeated google.protobuf.Any items = 1; // non-batch: raw payload Any; batch: each Any wraps a StoredPendingQueueItem + string id = 2; // non-batch: request ID; batch: empty + bool is_batch = 3; // disambiguates single-item from batch during unmarshalling } message ReportingPluginConfig {