From 2a58f1c79baf282f3cf202a3b07e655af1af33cd Mon Sep 17 00:00:00 2001 From: Derek Collison Date: Mon, 24 Jan 2022 14:42:57 -0800 Subject: [PATCH] Update config error Signed-off-by: Derek Collison --- server/consumer.go | 2 +- server/errors.json | 10 ++++++++++ server/jetstream_api.go | 3 +-- server/jetstream_cluster_test.go | 4 ++-- server/jetstream_errors_generated.go | 14 ++++++++++++++ 5 files changed, 28 insertions(+), 5 deletions(-) diff --git a/server/consumer.go b/server/consumer.go index dc8735a7cbd..614ac969232 100644 --- a/server/consumer.go +++ b/server/consumer.go @@ -336,7 +336,7 @@ func (mset *stream) addConsumerWithAssignment(config *ConsumerConfig, oname stri // Check if we have a BackOff defined that MaxDeliver is within range etc. if lbo := len(config.BackOff); lbo > 0 && config.MaxDeliver <= lbo { - return nil, errors.New("max deliver required to be > length backoff values") + return nil, NewJSConsumerMaxDeliverBackoffError() } if len(config.Description) > JSMaxDescriptionLen { diff --git a/server/errors.json b/server/errors.json index 7f114f99247..a0b510e794a 100644 --- a/server/errors.json +++ b/server/errors.json @@ -1138,5 +1138,15 @@ "help": "", "url": "", "deprecates": "" + }, + { + "constant": "JSConsumerMaxDeliverBackoffErr", + "code": 400, + "error_code": 10116, + "description": "max deliver is required to be \u003e length of backoff values", + "comment": "", + "help": "", + "url": "", + "deprecates": "" } ] \ No newline at end of file diff --git a/server/jetstream_api.go b/server/jetstream_api.go index 7fa06a264c0..c2abda6c3fe 100644 --- a/server/jetstream_api.go +++ b/server/jetstream_api.go @@ -3131,8 +3131,7 @@ func (s *Server) jsConsumerCreate(sub *subscription, c *client, a *Account, subj // Check if we have a BackOff defined that MaxDeliver is within range etc. if lbo := len(req.Config.BackOff); lbo > 0 && req.Config.MaxDeliver <= lbo { - err := errors.New("max deliver required to be > length backoff values") - resp.Error = NewJSConsumerCreateError(err, Unless(err)) + resp.Error = NewJSConsumerMaxDeliverBackoffError() s.sendAPIErrResponse(ci, acc, subject, reply, string(msg), s.jsonResponse(&resp)) return } diff --git a/server/jetstream_cluster_test.go b/server/jetstream_cluster_test.go index 7cdce174ea8..c57097e47ea 100644 --- a/server/jetstream_cluster_test.go +++ b/server/jetstream_cluster_test.go @@ -10161,8 +10161,8 @@ func TestJetStreamClusterRedeliverBackoffs(t *testing.T) { var ccResp JSApiConsumerCreateResponse err = json.Unmarshal(resp.Data, &ccResp) require_NoError(t, err) - if ccResp.Error == nil || ccResp.Error.ErrCode != 10012 { - t.Fatalf("Expected an error when MaxDeliver is < len(BackOff)+1, got %+v", ccResp.Error) + if ccResp.Error == nil || ccResp.Error.ErrCode != 10116 { + t.Fatalf("Expected an error when MaxDeliver is <= len(BackOff), got %+v", ccResp.Error) } // Set MaxDeliver to 6. diff --git a/server/jetstream_errors_generated.go b/server/jetstream_errors_generated.go index 654b06243ca..9887787041f 100644 --- a/server/jetstream_errors_generated.go +++ b/server/jetstream_errors_generated.go @@ -104,6 +104,9 @@ const ( // JSConsumerInvalidSamplingErrF failed to parse consumer sampling configuration: {err} JSConsumerInvalidSamplingErrF ErrorIdentifier = 10095 + // JSConsumerMaxDeliverBackoffErr max deliver is required to be > length of backoff values + JSConsumerMaxDeliverBackoffErr ErrorIdentifier = 10116 + // JSConsumerMaxPendingAckPolicyRequiredErr consumer requires ack policy for max ack pending JSConsumerMaxPendingAckPolicyRequiredErr ErrorIdentifier = 10082 @@ -383,6 +386,7 @@ var ( JSConsumerInvalidDeliverSubject: {Code: 400, ErrCode: 10112, Description: "invalid push consumer deliver subject"}, JSConsumerInvalidPolicyErrF: {Code: 400, ErrCode: 10094, Description: "{err}"}, JSConsumerInvalidSamplingErrF: {Code: 400, ErrCode: 10095, Description: "failed to parse consumer sampling configuration: {err}"}, + JSConsumerMaxDeliverBackoffErr: {Code: 400, ErrCode: 10116, Description: "max deliver is required to be > length of backoff values"}, JSConsumerMaxPendingAckPolicyRequiredErr: {Code: 400, ErrCode: 10082, Description: "consumer requires ack policy for max ack pending"}, JSConsumerMaxRequestBatchNegativeErr: {Code: 400, ErrCode: 10114, Description: "consumer max request batch needs to be > 0"}, JSConsumerMaxRequestExpiresToSmall: {Code: 400, ErrCode: 10115, Description: "consumer max request expires needs to be >= 1ms"}, @@ -843,6 +847,16 @@ func NewJSConsumerInvalidSamplingError(err error, opts ...ErrorOption) *ApiError } } +// NewJSConsumerMaxDeliverBackoffError creates a new JSConsumerMaxDeliverBackoffErr error: "max deliver is required to be > length of backoff values" +func NewJSConsumerMaxDeliverBackoffError(opts ...ErrorOption) *ApiError { + eopts := parseOpts(opts) + if ae, ok := eopts.err.(*ApiError); ok { + return ae + } + + return ApiErrors[JSConsumerMaxDeliverBackoffErr] +} + // NewJSConsumerMaxPendingAckPolicyRequiredError creates a new JSConsumerMaxPendingAckPolicyRequiredErr error: "consumer requires ack policy for max ack pending" func NewJSConsumerMaxPendingAckPolicyRequiredError(opts ...ErrorOption) *ApiError { eopts := parseOpts(opts)