Skip to content

Commit

Permalink
Update config error
Browse files Browse the repository at this point in the history
Signed-off-by: Derek Collison <derek@nats.io>
  • Loading branch information
derekcollison committed Jan 24, 2022
1 parent 20481a9 commit 2a58f1c
Show file tree
Hide file tree
Showing 5 changed files with 28 additions and 5 deletions.
2 changes: 1 addition & 1 deletion server/consumer.go
Expand Up @@ -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 {
Expand Down
10 changes: 10 additions & 0 deletions server/errors.json
Expand Up @@ -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": ""
}
]
3 changes: 1 addition & 2 deletions server/jetstream_api.go
Expand Up @@ -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
}
Expand Down
4 changes: 2 additions & 2 deletions server/jetstream_cluster_test.go
Expand Up @@ -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.
Expand Down
14 changes: 14 additions & 0 deletions server/jetstream_errors_generated.go
Expand Up @@ -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

Expand Down Expand Up @@ -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"},
Expand Down Expand Up @@ -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)
Expand Down

0 comments on commit 2a58f1c

Please sign in to comment.