From 213c534e8a1a32bbe25a582188a5efa8ea810925 Mon Sep 17 00:00:00 2001 From: Wenkai Yin Date: Thu, 26 Mar 2020 18:07:11 +0800 Subject: [PATCH] Return 404 rather than 500 error when getting registry info In Harbor 2.0, the replication isn't supported between instances with different versions, this commit returns the 404 error when trying to get the registry info whose version is different with the current one Signed-off-by: Wenkai Yin --- src/common/api/base.go | 7 +++---- src/core/api/registry.go | 2 +- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/src/common/api/base.go b/src/common/api/base.go index f6fe36140..95356cd8a 100644 --- a/src/common/api/base.go +++ b/src/common/api/base.go @@ -193,12 +193,11 @@ func (b *BaseAPI) ParseAndHandleError(text string, err error) { if err == nil { return } - log.Errorf("%s: %v", text, err) if e, ok := err.(*commonhttp.Error); ok { - b.RenderError(e.Code, e.Message) + b.RenderError(e.Code, fmt.Sprintf("%s: %s", text, e.Message)) return } - b.SendInternalServerError(errors.New("")) + b.SendInternalServerError(fmt.Errorf("%s: %v", text, err)) } // SendUnAuthorizedError sends unauthorized error to the client. @@ -226,7 +225,7 @@ func (b *BaseAPI) SendBadRequestError(err error) { // When you send an internal server error to the client, you expect user to check the log // to find out the root cause. func (b *BaseAPI) SendInternalServerError(err error) { - b.RenderError(http.StatusInternalServerError, http.StatusText(http.StatusInternalServerError)) + b.RenderError(http.StatusInternalServerError, err.Error()) } // SendForbiddenError sends forbidden error to the client. diff --git a/src/core/api/registry.go b/src/core/api/registry.go index d20f18310..ad4b34986 100644 --- a/src/core/api/registry.go +++ b/src/core/api/registry.go @@ -416,7 +416,7 @@ func (t *RegistryAPI) GetInfo() { } info, err := adp.Info() if err != nil { - t.SendInternalServerError(fmt.Errorf("failed to get registry info %d: %v", id, err)) + t.ParseAndHandleError(fmt.Sprintf("failed to get registry info %d", id), err) return } // currently, only the local Harbor registry supports the event based trigger, append it here