From 70885101880d691417e04274c5204e47c5acd46b Mon Sep 17 00:00:00 2001 From: "R.I.Pienaar" Date: Thu, 27 May 2021 13:52:32 +0200 Subject: [PATCH] Minor updates to error data Signed-off-by: R.I.Pienaar --- doc/adr/0007-error-codes.md | 6 +++++- server/errors.json | 4 ++-- server/errors_gen.go | 25 ++++++++----------------- server/jetstream_errors.go | 14 ++++++++++++-- server/jetstream_errors_generated.go | 10 +++++----- 5 files changed, 32 insertions(+), 27 deletions(-) diff --git a/doc/adr/0007-error-codes.md b/doc/adr/0007-error-codes.md index e640c06909..1521da557e 100644 --- a/doc/adr/0007-error-codes.md +++ b/doc/adr/0007-error-codes.md @@ -119,7 +119,8 @@ if IsNatsErr(err, JSStreamNotFoundErr, JSConsumerNotFoundErr) { ## Maintaining the errors -The file `errors.json` holds the data used to generate the error constants, lists etc +The file `server/errors.json` holds the data used to generate the error constants, lists etc. This is JSON versions of +`server.ErrorsData`. ```json [ @@ -140,6 +141,9 @@ The file `errors.json` holds the data used to generate the error constants, list ] ``` +The `nats` CLI allow you to edit, add and view these files using the `nats errors` command, use the `--errors` flag to +view your local file during development. + After editing this file run `go generate` in the top of the `nats-server` repo, and it will update the needed files. Check in the result. diff --git a/server/errors.json b/server/errors.json index 8b8bedbd9d..7128b2b391 100644 --- a/server/errors.json +++ b/server/errors.json @@ -108,7 +108,7 @@ "code": 500, "error_code": 10048, "description": "{err}", - "commend": "Generic stream assignment error string" + "comment": "Generic stream assignment error string" }, { "constant": "JSStreamMessageExceedsMaximumErr", @@ -466,7 +466,7 @@ "constant": "JSStreamMsgDeleteFailedF", "code": 500, "error_code": 10057, - "description": "%s", + "description": "{err}", "comment": "Generic message deletion failure error string" }, { diff --git a/server/errors_gen.go b/server/errors_gen.go index b7fa32a3f9..deea51e093 100644 --- a/server/errors_gen.go +++ b/server/errors_gen.go @@ -11,6 +11,8 @@ import ( "os/exec" "sort" "text/template" + + "github.com/nats-io/nats-server/v2/server" ) var templ = ` @@ -32,7 +34,7 @@ const ( var ( ApiErrors = map[ErrorIdentifier]*ApiError{ {{- range $i, $error := . }} - {{ .Constant }}: {Code: {{ .Code }},ErrCode: {{ .ErrCode }},Description: {{ .Description | printf "%q" }},{{- if .Help }}Help: {{ .Help | printf "%q" }},{{- end }}{{- if .URL }}URL: {{ .URL | printf "%q" }},{{- end }} },{{- end }} + {{ .Constant }}: {Code: {{ .Code }},ErrCode: {{ .ErrCode }},Description: {{ .Description | printf "%q" }}},{{- end }} } {{- range $i, $error := . }} @@ -51,17 +53,6 @@ func panicIfErr(err error) { panic(err) } -type Errors struct { - Constant string `json:"constant"` - Code int `json:"code"` - ErrCode int `json:"error_code"` - Description string `json:"description"` - Comment string `json:"comment"` - Help string `json:"help"` - URL string `json:"url"` - Deprecates string `json:"deprecates"` -} - func goFmt(file string) error { c := exec.Command("go", "fmt", file) out, err := c.CombinedOutput() @@ -72,9 +63,9 @@ func goFmt(file string) error { return err } -func checkDupes(errs []Errors) error { - codes := []int{} - highest := 0 +func checkDupes(errs []server.ErrorsData) error { + codes := []uint16{} + highest := uint16(0) for _, err := range errs { codes = append(codes, err.ErrCode) if highest < err.ErrCode { @@ -82,7 +73,7 @@ func checkDupes(errs []Errors) error { } } - codeKeys := make(map[int]bool) + codeKeys := make(map[uint16]bool) constKeys := make(map[string]bool) for _, entry := range errs { @@ -105,7 +96,7 @@ func main() { ej, err := os.ReadFile("server/errors.json") panicIfErr(err) - errs := []Errors{} + errs := []server.ErrorsData{} panicIfErr(json.Unmarshal(ej, &errs)) panicIfErr(checkDupes(errs)) diff --git a/server/jetstream_errors.go b/server/jetstream_errors.go index 02439891ca..7fd75334d9 100644 --- a/server/jetstream_errors.go +++ b/server/jetstream_errors.go @@ -38,8 +38,18 @@ type ApiError struct { Code int `json:"code"` ErrCode uint16 `json:"err_code,omitempty"` Description string `json:"description,omitempty"` - URL string `json:"-"` - Help string `json:"-"` +} + +// ErrorsData is the source data for generated errors as found in errors.json +type ErrorsData struct { + Constant string `json:"constant"` + Code int `json:"code"` + ErrCode uint16 `json:"error_code"` + Description string `json:"description"` + Comment string `json:"comment"` + Help string `json:"help"` + URL string `json:"url"` + Deprecates string `json:"deprecates"` } func (e *ApiError) Error() string { diff --git a/server/jetstream_errors_generated.go b/server/jetstream_errors_generated.go index a3be3d5760..fb23849bb4 100644 --- a/server/jetstream_errors_generated.go +++ b/server/jetstream_errors_generated.go @@ -138,7 +138,7 @@ const ( // JSStorageResourcesExceededErr insufficient storage resources available JSStorageResourcesExceededErr ErrorIdentifier = 10047 - // JSStreamAssignmentErrF {err} + // JSStreamAssignmentErrF Generic stream assignment error string ({err}) JSStreamAssignmentErrF ErrorIdentifier = 10048 // JSStreamCreateErrF Generic stream creation error string ({err}) @@ -174,7 +174,7 @@ const ( // JSStreamMismatchErr stream name in subject does not match request JSStreamMismatchErr ErrorIdentifier = 10056 - // JSStreamMsgDeleteFailedF Generic message deletion failure error string (%s) + // JSStreamMsgDeleteFailedF Generic message deletion failure error string ({err}) JSStreamMsgDeleteFailedF ErrorIdentifier = 10057 // JSStreamNameExistErr stream name already in use @@ -266,8 +266,8 @@ var ( JSNoAccountErr: {Code: 503, ErrCode: 10035, Description: "account not found"}, JSNoMessageFoundErr: {Code: 404, ErrCode: 10037, Description: "no message found"}, JSNotEmptyRequestErr: {Code: 400, ErrCode: 10038, Description: "expected an empty request payload"}, - JSNotEnabledErr: {Code: 503, ErrCode: 10076, Description: "JetStream not enabled", Help: "This error indicates that JetStream is not enabled at a global level"}, - JSNotEnabledForAccountErr: {Code: 503, ErrCode: 10039, Description: "JetStream not enabled for account", Help: "This error indicates that JetStream is not enabled for an account account level"}, + JSNotEnabledErr: {Code: 503, ErrCode: 10076, Description: "JetStream not enabled"}, + JSNotEnabledForAccountErr: {Code: 503, ErrCode: 10039, Description: "JetStream not enabled for account"}, JSPeerRemapErr: {Code: 503, ErrCode: 10075, Description: "peer remap failed"}, JSRaftGeneralErrF: {Code: 500, ErrCode: 10041, Description: "{err}"}, JSRestoreSubscribeFailedErrF: {Code: 500, ErrCode: 10042, Description: "JetStream unable to subscribe to restore snapshot {subject}: {err}"}, @@ -288,7 +288,7 @@ var ( JSStreamMessageExceedsMaximumErr: {Code: 400, ErrCode: 10054, Description: "message size exceeds maximum allowed"}, JSStreamMirrorNotUpdatableErr: {Code: 400, ErrCode: 10055, Description: "Mirror configuration can not be updated"}, JSStreamMismatchErr: {Code: 400, ErrCode: 10056, Description: "stream name in subject does not match request"}, - JSStreamMsgDeleteFailedF: {Code: 500, ErrCode: 10057, Description: "%s"}, + JSStreamMsgDeleteFailedF: {Code: 500, ErrCode: 10057, Description: "{err}"}, JSStreamNameExistErr: {Code: 400, ErrCode: 10058, Description: "stream name already in use"}, JSStreamNotFoundErr: {Code: 404, ErrCode: 10059, Description: "stream not found"}, JSStreamNotMatchErr: {Code: 400, ErrCode: 10060, Description: "expected stream does not match"},