From e914b468b644aad99b6ecd8ab25b92ef64a7253f Mon Sep 17 00:00:00 2001 From: Joseph Doherty Date: Sat, 28 Feb 2026 08:36:38 -0500 Subject: [PATCH] feat(batch5): implement jetstream error constructors group04 --- .../JetStreamErrors.GeneratedConstructors.cs | 160 ++++++++++++++++++ ...tStreamErrorsGeneratedConstructorsTests.cs | 33 ++++ porting.db | Bin 6397952 -> 6406144 bytes tools/generate-jetstream-errors.sh | 20 +++ 4 files changed, 213 insertions(+) diff --git a/dotnet/src/ZB.MOM.NatsNet.Server/JetStream/JetStreamErrors.GeneratedConstructors.cs b/dotnet/src/ZB.MOM.NatsNet.Server/JetStream/JetStreamErrors.GeneratedConstructors.cs index d3c827d..10ac13f 100644 --- a/dotnet/src/ZB.MOM.NatsNet.Server/JetStream/JetStreamErrors.GeneratedConstructors.cs +++ b/dotnet/src/ZB.MOM.NatsNet.Server/JetStream/JetStreamErrors.GeneratedConstructors.cs @@ -392,6 +392,126 @@ public static partial class JsApiErrors return Clone(ConsumerMaxDeliverBackoff); } + public static JsApiError NewJSConsumerMaxPendingAckPolicyRequiredError(params ErrorOption[] opts) + { + if (ParseOpts(opts) is JsApiError overridden) + return Clone(overridden); + + return Clone(ConsumerMaxPendingAckPolicyRequired); + } + + public static JsApiError NewJSConsumerMaxRequestBatchNegativeError(params ErrorOption[] opts) + { + if (ParseOpts(opts) is JsApiError overridden) + return Clone(overridden); + + return Clone(ConsumerMaxRequestBatchNegative); + } + + public static JsApiError NewJSConsumerMaxRequestExpiresTooSmallError(params ErrorOption[] opts) + { + if (ParseOpts(opts) is JsApiError overridden) + return Clone(overridden); + + return Clone(ConsumerMaxRequestExpiresTooSmall); + } + + public static JsApiError NewJSConsumerMaxWaitingNegativeError(params ErrorOption[] opts) + { + if (ParseOpts(opts) is JsApiError overridden) + return Clone(overridden); + + return Clone(ConsumerMaxWaitingNegative); + } + + public static JsApiError NewJSConsumerMultipleFiltersNotAllowedError(params ErrorOption[] opts) + { + if (ParseOpts(opts) is JsApiError overridden) + return Clone(overridden); + + return Clone(ConsumerMultipleFiltersNotAllowed); + } + + public static JsApiError NewJSConsumerNameContainsPathSeparatorsError(params ErrorOption[] opts) + { + if (ParseOpts(opts) is JsApiError overridden) + return Clone(overridden); + + return Clone(ConsumerNameContainsPathSeparators); + } + + public static JsApiError NewJSConsumerNameExistError(params ErrorOption[] opts) + { + if (ParseOpts(opts) is JsApiError overridden) + return Clone(overridden); + + return Clone(ConsumerNameExist); + } + + public static JsApiError NewJSConsumerNotFoundError(params ErrorOption[] opts) + { + if (ParseOpts(opts) is JsApiError overridden) + return Clone(overridden); + + return Clone(ConsumerNotFound); + } + + public static JsApiError NewJSConsumerOfflineError(params ErrorOption[] opts) + { + if (ParseOpts(opts) is JsApiError overridden) + return Clone(overridden); + + return Clone(ConsumerOffline); + } + + public static JsApiError NewJSConsumerOnMappedError(params ErrorOption[] opts) + { + if (ParseOpts(opts) is JsApiError overridden) + return Clone(overridden); + + return Clone(ConsumerOnMapped); + } + + public static JsApiError NewJSConsumerOverlappingSubjectFiltersError(params ErrorOption[] opts) + { + if (ParseOpts(opts) is JsApiError overridden) + return Clone(overridden); + + return Clone(ConsumerOverlappingSubjectFilters); + } + + public static JsApiError NewJSConsumerPinnedTTLWithoutPriorityPolicyNoneError(params ErrorOption[] opts) + { + if (ParseOpts(opts) is JsApiError overridden) + return Clone(overridden); + + return Clone(ConsumerPinnedTTLWithoutPriorityPolicyNone); + } + + public static JsApiError NewJSConsumerPriorityGroupWithPolicyNoneError(params ErrorOption[] opts) + { + if (ParseOpts(opts) is JsApiError overridden) + return Clone(overridden); + + return Clone(ConsumerPriorityGroupWithPolicyNone); + } + + public static JsApiError NewJSConsumerPriorityPolicyWithoutGroupError(params ErrorOption[] opts) + { + if (ParseOpts(opts) is JsApiError overridden) + return Clone(overridden); + + return Clone(ConsumerPriorityPolicyWithoutGroup); + } + + public static JsApiError NewJSConsumerPullNotDurableError(params ErrorOption[] opts) + { + if (ParseOpts(opts) is JsApiError overridden) + return Clone(overridden); + + return Clone(ConsumerPullNotDurable); + } + public static JsApiError NewJSAtomicPublishTooLargeBatchError(object? size, params ErrorOption[] opts) { if (ParseOpts(opts) is JsApiError overridden) @@ -464,4 +584,44 @@ public static partial class JsApiErrors return NewWithTags(ConsumerInvalidSampling, "{err}", err); } + public static JsApiError NewJSConsumerMaxPendingAckExcessError(object? limit, params ErrorOption[] opts) + { + if (ParseOpts(opts) is JsApiError overridden) + return Clone(overridden); + + return NewWithTags(ConsumerMaxPendingAckExcess, "{limit}", limit); + } + + public static JsApiError NewJSConsumerMaxRequestBatchExceededError(object? limit, params ErrorOption[] opts) + { + if (ParseOpts(opts) is JsApiError overridden) + return Clone(overridden); + + return NewWithTags(ConsumerMaxRequestBatchExceeded, "{limit}", limit); + } + + public static JsApiError NewJSConsumerMetadataLengthError(object? limit, params ErrorOption[] opts) + { + if (ParseOpts(opts) is JsApiError overridden) + return Clone(overridden); + + return NewWithTags(ConsumerMetadataLength, "{limit}", limit); + } + + public static JsApiError NewJSConsumerNameTooLongError(object? max, params ErrorOption[] opts) + { + if (ParseOpts(opts) is JsApiError overridden) + return Clone(overridden); + + return NewWithTags(ConsumerNameTooLong, "{max}", max); + } + + public static JsApiError NewJSConsumerOfflineReasonError(Exception err, params ErrorOption[] opts) + { + if (ParseOpts(opts) is JsApiError overridden) + return Clone(overridden); + + return NewWithTags(ConsumerOfflineReason, "{err}", err); + } + } diff --git a/dotnet/tests/ZB.MOM.NatsNet.Server.Tests/JetStream/JetStreamErrorsGeneratedConstructorsTests.cs b/dotnet/tests/ZB.MOM.NatsNet.Server.Tests/JetStream/JetStreamErrorsGeneratedConstructorsTests.cs index 6ad5c62..12b831f 100644 --- a/dotnet/tests/ZB.MOM.NatsNet.Server.Tests/JetStream/JetStreamErrorsGeneratedConstructorsTests.cs +++ b/dotnet/tests/ZB.MOM.NatsNet.Server.Tests/JetStream/JetStreamErrorsGeneratedConstructorsTests.cs @@ -102,4 +102,37 @@ public sealed class JetStreamErrorsGeneratedConstructorsTests fromOverride.Description.ShouldBe(expected.Description); ReferenceEquals(fromOverride, expected).ShouldBeFalse(); } + + [Fact] + public void ConstructorSurface_Group04() + { + JsApiErrors.NewJSConsumerMaxPendingAckPolicyRequiredError().ErrCode.ShouldBe(JsApiErrors.ConsumerMaxPendingAckPolicyRequired.ErrCode); + JsApiErrors.NewJSConsumerMaxRequestBatchNegativeError().ErrCode.ShouldBe(JsApiErrors.ConsumerMaxRequestBatchNegative.ErrCode); + JsApiErrors.NewJSConsumerMaxRequestExpiresTooSmallError().ErrCode.ShouldBe(JsApiErrors.ConsumerMaxRequestExpiresTooSmall.ErrCode); + JsApiErrors.NewJSConsumerMaxWaitingNegativeError().ErrCode.ShouldBe(JsApiErrors.ConsumerMaxWaitingNegative.ErrCode); + JsApiErrors.NewJSConsumerMultipleFiltersNotAllowedError().ErrCode.ShouldBe(JsApiErrors.ConsumerMultipleFiltersNotAllowed.ErrCode); + JsApiErrors.NewJSConsumerNameContainsPathSeparatorsError().ErrCode.ShouldBe(JsApiErrors.ConsumerNameContainsPathSeparators.ErrCode); + JsApiErrors.NewJSConsumerNameExistError().ErrCode.ShouldBe(JsApiErrors.ConsumerNameExist.ErrCode); + JsApiErrors.NewJSConsumerNotFoundError().ErrCode.ShouldBe(JsApiErrors.ConsumerNotFound.ErrCode); + JsApiErrors.NewJSConsumerOfflineError().ErrCode.ShouldBe(JsApiErrors.ConsumerOffline.ErrCode); + JsApiErrors.NewJSConsumerOnMappedError().ErrCode.ShouldBe(JsApiErrors.ConsumerOnMapped.ErrCode); + JsApiErrors.NewJSConsumerOverlappingSubjectFiltersError().ErrCode.ShouldBe(JsApiErrors.ConsumerOverlappingSubjectFilters.ErrCode); + JsApiErrors.NewJSConsumerPinnedTTLWithoutPriorityPolicyNoneError().ErrCode.ShouldBe(JsApiErrors.ConsumerPinnedTTLWithoutPriorityPolicyNone.ErrCode); + JsApiErrors.NewJSConsumerPriorityGroupWithPolicyNoneError().ErrCode.ShouldBe(JsApiErrors.ConsumerPriorityGroupWithPolicyNone.ErrCode); + JsApiErrors.NewJSConsumerPriorityPolicyWithoutGroupError().ErrCode.ShouldBe(JsApiErrors.ConsumerPriorityPolicyWithoutGroup.ErrCode); + JsApiErrors.NewJSConsumerPullNotDurableError().ErrCode.ShouldBe(JsApiErrors.ConsumerPullNotDurable.ErrCode); + + JsApiErrors.NewJSConsumerMaxPendingAckExcessError(250).Description.ShouldBe("consumer max ack pending exceeds system limit of 250"); + JsApiErrors.NewJSConsumerMaxRequestBatchExceededError(88).Description.ShouldBe("consumer max request batch exceeds server limit of 88"); + JsApiErrors.NewJSConsumerMetadataLengthError(4096).Description.ShouldBe("consumer metadata exceeds maximum size of 4096"); + JsApiErrors.NewJSConsumerNameTooLongError(33).Description.ShouldBe("consumer name is too long, maximum allowed is 33"); + JsApiErrors.NewJSConsumerOfflineReasonError(new InvalidOperationException("storage unavailable")).Description.ShouldBe("consumer is offline: storage unavailable"); + + var expected = new JsApiError { Code = 496, ErrCode = 9093, Description = "override-4" }; + var fromOverride = JsApiErrors.NewJSConsumerPullNotDurableError(JsApiErrors.Unless(expected)); + fromOverride.Code.ShouldBe(expected.Code); + fromOverride.ErrCode.ShouldBe(expected.ErrCode); + fromOverride.Description.ShouldBe(expected.Description); + ReferenceEquals(fromOverride, expected).ShouldBeFalse(); + } } diff --git a/porting.db b/porting.db index 47fcb44b2627df299e9b21667000a32e1c8effc4..9c9a763b7a27689c89c67447112f5103e4dd8e58 100644 GIT binary patch delta 4312 zcmai$dvFuS9mj81ce=Gs(#cqoWl1NU-@-V4KV)NwNq88NP&>Teh+-P14R{<#J7gw+ z!z{@ZQJk5uv`HAClT6xDH%(g~d5)W*6a#S<{$iLwDP@>IN<&ki3^34@Rz57!UOn^k z{66}9@2lTxf4kC_A#B^SWxH)xNSY-G_He)cD46xzmF?Bw{g?Jv8~dw)^cyH2BJZ37 zKLMMJ_+LPtq{ZYBA^hF-&-VPFdqcNe&d6<28F}U+NC2O4>>^kzZPuM0VTW0aGJ4UZ z2%{d8G)AjT3NxB(Qi#!XlY)%mCKWKMFe$+3L2LPLh7Wr48$(w>J^+Q}^jBcogi=8m zQ!H`WG-&!1XVr>~j=zKV^F(-F*!h|SlMtRFpLBWrubqPbCMy7p8N&ePgU#Y(;UBBJ z*L3&xcCVIWjLw@>&ghg$WsDA+RLW@3q!LE&m{iQ@XC@Uf+F?>5qZdum#m$q29uuRi zxXPpmqq!z&jHa6uW)wFm#HhlgAfvEJ1&rJ#1yY~bDA|ANvKi-Wu*C*`L;^BgsVm#y zNPJKqtclWMcv$lIR z+(7#7t1)u-hN^-Yqa^`qoT1-{-FzvIKnP_hu{#}1+gD~3EmRg-6vdcIHxN@PPg1ox`LpDydFWf$pO`^ zkMGy63qzLUus`ADRHjQXg^~m45Ve=FyoxRQ~Y#1_P)lQ(kmAcN`h| zOm-4|Bx9eGw(omvXE8|($^l{&pilV<27+k(m=%z}2GM1{{`MRcAooM4YHYbVjE4Dx ztRj;(4Hb?pe@{avc=^W~a*@63vX+l^g!LS(JFu=`-HCM<*4=};3aG4{7H&f)Gy>Pu zgCOR(<+!3euRNnHR-ROjDIX~V%0A^)Wt+N7?UOD@_oQp~J*Z8wlWY4tesboYs>7jN zS1vIV_Gj3?QNOfBAV$06@9im~~4%2qUsTOXtg?81ddw zr*4*mS+5pkQToCeJxp?bR!z^MXck4XNXw#d7D*v>gAgY}Ue6RmyQ?m+Rj@_7N8b`| z$`Ti4QK7N-zPiR!b`!b<@gs3S+$X*&c_b)a7cYsY#bZ*hv|5@kbx5sJr4%uc$8!uA z*K<8J5DGoyR>_hEve@gHMn3dhc$^T8P>*L4aU}CO@AN^ zf6FLvT&o)GVMGg&nxmRb&L3k=PaM}=r0Qz+`+j^vYs%QUKht#bt68WpbA7EF(V`EW zO3CM+Yvt)Bsp$jyl5MA#o&Py~wIqU2kX-$v<~P0=((*)1HB2LzMlsbfEyT14(_&0Z zFfGNj4AXKMH)LYgo3*#_VlXa{xX9(E>c(mo(cPW~`4FSn_-cJ%k`+{AO=*V$GsN_3{a zuIl4kJCoI193dx3V!o%L-b!1=wOU$BqHiWt@Q~XhToLAObpo)Kn~h_t>Bg2ut47MXm`&vt z*0i;@jBD9!rj6qkA6;>>l+RPlYMzRdC0tc*tt#fKGHX>4SCv|;3c0GpTBUPUv9*eg zFT07z*4VNt(m6XJ{m;vYjc)47Dzvs^Lz}V#4T=9_$7VNW7yYkxk@O9iI-5CY$G7iS zGUeQgR}9YuctsZ3*=pf?8q4fyjm4gJCgWUO&ZoA;a>AR_T9SyHQ`=%W3$g6bJBk@4V&C`d(+I+swRaDOjduDPq-1%i>aHmqlDCVv7ul3!BBLL4{(d z38l6PaES0hK%y}Sh$I&)nhJta1nMUhMa7`8DxvNe8|r`N>2&bJZ*tB%egAu>_q|!Y zy4kh5bDgU#s!dcBJjoWV#?dc%C&dCcDnF#oDtzMNwKZLod2#GMxwAvP|bjw;uR;!o_Y zkgASTc5Kr42Hn_btTUdVuLoH*n|AZx<#ERI8L6kO7S->vIc+>`&6lTKe3FappaO%} z7pE>SOfE{USdm<4FA;E8S5g#F#h=*JpYE-*r<66q?4DxR)#P=(W#h02qz zO!@0h{+)ZQ5tygcq_60xoD2<>lcAz=GF+&f435glV3fCq&l#KgZ#fZuR8B3f@`3@c<%&RG}hgUM6 z48P5L!(y(#2O)ZdeBJy2E&rI0kQZi{eZJYXWL3?tsug+aYDV|AI z9aPxLrsN#|O3tEkd%hUPWP84t_3sT$IGeSlaZ%x? z;uyYCYU-ZVT7o5}ta*SMN<@S@ZDCMbOn7NkOuR`e4*a*@hhic~XNqE_w9OXBv+`by zi-fb#$+$R?H8@!$%ACQCmiQ|xYH5xbp5F9Ep*QQr0^HyMFZjR@0jU?8f1l3B^U=?J zT-0cn^(|Vj*=9Cr-YN7xQ};=Z$o#gGcGl4(_Ld zKg<^TzJmwk{y)skjPqJK`I5PtQ&p~2PQ`zlRkR@28b+Ult=Y7ttj?s@!&aFL^qGrX zfz;dicyh(!MT?UQ`BSvNgD2!`{pMUt{gww5S#DWfj0%EQrPPB~oO3pxE)A)xq`6_M zmdso$I*>?6G^syP7odj+J93})Z@6$v)0ub#_`T>x|;fZINr-2*?IE92|J{E znwGRiF`Cv?NXru#eg2*uqR%?*lUXN)YZd7ubUoP`A$Ha%pizhIi&=*}@35Uumk;9g zYCmF^XFq_w@7rV2r|el9YAwJ@_ce{6r6Xezx_HbssqLukr<3R6e){@|?V--2wnaak zi$`hN2hP+>-AC=`vX(;Nzkk>o^Jx7EJDwhIu2M99wxwza1-1Nw?Hl23b(;Tm;{qy3QUD* zFdc4(888!O!ECq#=D?kB7u*f^z+9+gt*q8*->^O+#4rZEjHA{{Z0cuaE!$ diff --git a/tools/generate-jetstream-errors.sh b/tools/generate-jetstream-errors.sh index 73dcab3..95d3845 100755 --- a/tools/generate-jetstream-errors.sh +++ b/tools/generate-jetstream-errors.sh @@ -53,6 +53,21 @@ simple_methods=( "NewJSConsumerInvalidGroupNameError|ConsumerInvalidGroupName" "NewJSConsumerInvalidPriorityGroupError|ConsumerInvalidPriorityGroup" "NewJSConsumerMaxDeliverBackoffError|ConsumerMaxDeliverBackoff" + "NewJSConsumerMaxPendingAckPolicyRequiredError|ConsumerMaxPendingAckPolicyRequired" + "NewJSConsumerMaxRequestBatchNegativeError|ConsumerMaxRequestBatchNegative" + "NewJSConsumerMaxRequestExpiresTooSmallError|ConsumerMaxRequestExpiresTooSmall" + "NewJSConsumerMaxWaitingNegativeError|ConsumerMaxWaitingNegative" + "NewJSConsumerMultipleFiltersNotAllowedError|ConsumerMultipleFiltersNotAllowed" + "NewJSConsumerNameContainsPathSeparatorsError|ConsumerNameContainsPathSeparators" + "NewJSConsumerNameExistError|ConsumerNameExist" + "NewJSConsumerNotFoundError|ConsumerNotFound" + "NewJSConsumerOfflineError|ConsumerOffline" + "NewJSConsumerOnMappedError|ConsumerOnMapped" + "NewJSConsumerOverlappingSubjectFiltersError|ConsumerOverlappingSubjectFilters" + "NewJSConsumerPinnedTTLWithoutPriorityPolicyNoneError|ConsumerPinnedTTLWithoutPriorityPolicyNone" + "NewJSConsumerPriorityGroupWithPolicyNoneError|ConsumerPriorityGroupWithPolicyNone" + "NewJSConsumerPriorityPolicyWithoutGroupError|ConsumerPriorityPolicyWithoutGroup" + "NewJSConsumerPullNotDurableError|ConsumerPullNotDurable" ) templated_methods=( @@ -65,6 +80,11 @@ templated_methods=( "NewJSConsumerInvalidPolicyError|Exception|err|ConsumerInvalidPolicy|{err}" "NewJSConsumerInvalidResetError|Exception|err|ConsumerInvalidReset|{err}" "NewJSConsumerInvalidSamplingError|Exception|err|ConsumerInvalidSampling|{err}" + "NewJSConsumerMaxPendingAckExcessError|object?|limit|ConsumerMaxPendingAckExcess|{limit}" + "NewJSConsumerMaxRequestBatchExceededError|object?|limit|ConsumerMaxRequestBatchExceeded|{limit}" + "NewJSConsumerMetadataLengthError|object?|limit|ConsumerMetadataLength|{limit}" + "NewJSConsumerNameTooLongError|object?|max|ConsumerNameTooLong|{max}" + "NewJSConsumerOfflineReasonError|Exception|err|ConsumerOfflineReason|{err}" ) {