fix(handler): log original error instead of rebuilding it

Replace `errors.New(utils.UnwrapJoinedErrors(err))` with the original `err`
in slog error logging so the logged value keeps its error chain for
`errors.Is`/`errors.As` classification. Also drop the duplicated `err`
attribute in the namespace handlers.

Verification:
- go build -tags "netgo,timetzdata,exclude_graphdriver_btrfs,containers_image_openpgp" ./pkg/server/handlers/...
This commit is contained in:
Tosone committed 2026-10-03 21:14:08 +08:00
1 parent ee12dbda37
commit 20af519812
19 files changed
+27 -27

No files matched your search

@@ -82,7 +82,7 @@ func (h *handler) ListTags(c *gin.Context) {
authChecked, err := h.Authorizer.Repository(ctx, *user, repositoryObj.ID, enums.AuthRead)
if err != nil {
if errors.Is(err, gorm.ErrRecordNotFound) {
slog.Error("resource not found", "err", errors.New(utils.UnwrapJoinedErrors(err)))
slog.Error("resource not found", "err", err)
errcode.NewDSError(c, errcode.GenDSErrCodeResourceNotFound(err))
return
}
@@ -65,7 +65,7 @@ func (h *handler) DeleteBlob(c *gin.Context) {
authChecked, err := h.Authorizer.Repository(ctx, *user, namespaceObj.ID, enums.AuthManage)
if err != nil {
if errors.Is(err, gorm.ErrRecordNotFound) {
slog.Error("resource not found", "err", errors.New(utils.UnwrapJoinedErrors(err)))
slog.Error("resource not found", "err", err)
errcode.NewDSError(c, errcode.GenDSErrCodeResourceNotFound(err))
return
}
@@ -67,7 +67,7 @@ func (h *handler) GetBlob(c *gin.Context) {
authChecked, err := h.Authorizer.Namespace(ctx, *user, namespaceObj.ID, enums.AuthRead)
if err != nil {
if errors.Is(err, gorm.ErrRecordNotFound) {
slog.Error("resource not found", "err", errors.New(utils.UnwrapJoinedErrors(err)))
slog.Error("resource not found", "err", err)
errcode.NewDSError(c, errcode.GenDSErrCodeResourceNotFound(err))
return
}
@@ -66,7 +66,7 @@ func (h *handler) HeadBlob(c *gin.Context) {
authChecked, err := h.Authorizer.Namespace(ctx, *user, namespaceObj.ID, enums.AuthRead)
if err != nil {
if errors.Is(err, gorm.ErrRecordNotFound) {
slog.Error("resource not found", "err", errors.New(utils.UnwrapJoinedErrors(err)))
slog.Error("resource not found", "err", err)
errcode.NewDSError(c, errcode.GenDSErrCodeResourceNotFound(err))
return
}
@@ -67,7 +67,7 @@ func (h *handler) DeleteManifest(c *gin.Context) {
authChecked, err := h.Authorizer.Namespace(ctx, *user, namespaceObj.ID, enums.AuthManage)
if err != nil {
if errors.Is(err, gorm.ErrRecordNotFound) {
slog.Error("resource not found", "err", errors.New(utils.UnwrapJoinedErrors(err)))
slog.Error("resource not found", "err", err)
errcode.NewDSError(c, errcode.GenDSErrCodeResourceNotFound(err))
return
}
@@ -66,7 +66,7 @@ func (h *handler) GetManifest(c *gin.Context) {
authChecked, err := h.Authorizer.Namespace(ctx, *user, namespaceObj.ID, enums.AuthRead)
if err != nil {
if errors.Is(err, gorm.ErrRecordNotFound) {
slog.Error("resource not found", "err", errors.New(utils.UnwrapJoinedErrors(err)))
slog.Error("resource not found", "err", err)
errcode.NewDSError(c, errcode.GenDSErrCodeResourceNotFound(err))
return
}
@@ -66,7 +66,7 @@ func (h *handler) HeadManifest(c *gin.Context) {
authChecked, err := h.Authorizer.Namespace(ctx, *user, namespaceObj.ID, enums.AuthRead)
if err != nil {
if errors.Is(err, gorm.ErrRecordNotFound) {
slog.Error("resource not found", "err", errors.New(utils.UnwrapJoinedErrors(err)))
slog.Error("resource not found", "err", err)
errcode.NewDSError(c, errcode.GenDSErrCodeResourceNotFound(err))
return
}
@@ -67,7 +67,7 @@ func (h *handler) PutManifest(c *gin.Context) {
authChecked, err := h.Authorizer.Namespace(ctx, *user, namespaceObj.ID, enums.AuthRead)
if err != nil {
if errors.Is(err, gorm.ErrRecordNotFound) {
slog.Error("resource not found", "err", errors.New(utils.UnwrapJoinedErrors(err)))
slog.Error("resource not found", "err", err)
errcode.NewDSError(c, errcode.GenDSErrCodeResourceNotFound(err))
return
}
@@ -74,7 +74,7 @@ func (h *handler) PatchUpload(c *gin.Context) {
authChecked, err := h.Authorizer.Namespace(ctx, *user, namespaceObj.ID, enums.AuthManage)
if err != nil {
if errors.Is(err, gorm.ErrRecordNotFound) {
slog.Error("resource not found", "err", errors.New(utils.UnwrapJoinedErrors(err)))
slog.Error("resource not found", "err", err)
errcode.NewDSError(c, errcode.GenDSErrCodeResourceNotFound(err))
return
}
@@ -68,7 +68,7 @@ func (h *handler) PostUpload(c *gin.Context) {
authChecked, err := h.Authorizer.Namespace(ctx, *user, namespaceObj.ID, enums.AuthManage)
if err != nil {
if errors.Is(err, gorm.ErrRecordNotFound) {
slog.Error("resource not found", "err", errors.New(utils.UnwrapJoinedErrors(err)))
slog.Error("resource not found", "err", err)
errcode.NewDSError(c, errcode.GenDSErrCodeResourceNotFound(err))
return
}
@@ -73,7 +73,7 @@ func (h *handler) PutUpload(c *gin.Context) {
authChecked, err := h.Authorizer.Namespace(ctx, *user, namespaceObj.ID, enums.AuthManage)
if err != nil {
if errors.Is(err, gorm.ErrRecordNotFound) {
slog.Error("resource not found", "err", errors.New(utils.UnwrapJoinedErrors(err)))
slog.Error("resource not found", "err", err)
errcode.NewDSError(c, errcode.GenDSErrCodeResourceNotFound(err))
return
}
@@ -54,11 +54,11 @@ func (h *handler) DeleteNamespace(c *gin.Context, req *api.DeleteNamespaceReques
authChecked, err := h.Authorizer.Namespace(ctx, *user, req.ID, enums.AuthManage)
if err != nil {
if errors.Is(err, gorm.ErrRecordNotFound) {
slog.Error("resource not found", "err", errors.New(utils.UnwrapJoinedErrors(err)), "NamespaceID", req.ID)
slog.Error("resource not found", "err", err, "NamespaceID", req.ID)
errcode.NewHTTPError(c, errcode.HTTPErrCodeNotFound, utils.UnwrapJoinedErrors(err))
return
}
slog.Error("get resource failed", "err", errors.New(utils.UnwrapJoinedErrors(err)), "NamespaceID", req.ID, "err", err)
slog.Error("get resource failed", "err", err, "NamespaceID", req.ID)
errcode.NewHTTPError(c, errcode.HTTPErrCodeInternalError, utils.UnwrapJoinedErrors(err))
return
}
@@ -54,11 +54,11 @@ func (h *handler) PutNamespace(c *gin.Context, req *api.UpdateNamespaceRequest)
authChecked, err := h.Authorizer.Namespace(ctx, *user, req.ID, enums.AuthAdmin)
if err != nil {
if errors.Is(err, gorm.ErrRecordNotFound) {
slog.Error("resource not found", "err", errors.New(utils.UnwrapJoinedErrors(err)), "NamespaceID", req.ID)
slog.Error("resource not found", "err", err, "NamespaceID", req.ID)
errcode.NewHTTPError(c, errcode.HTTPErrCodeNotFound, utils.UnwrapJoinedErrors(err))
return
}
slog.Error("get resource failed", "err", errors.New(utils.UnwrapJoinedErrors(err)), "NamespaceID", req.ID, "err", err)
slog.Error("get resource failed", "err", err, "NamespaceID", req.ID)
errcode.NewHTTPError(c, errcode.HTTPErrCodeInternalError, utils.UnwrapJoinedErrors(err))
return
}
@@ -58,11 +58,11 @@ func (h *handler) CreateRepository(c *gin.Context, req *api.CreateRepositoryRequ
authChecked, err := h.Authorizer.Namespace(ctx, *user, req.NamespaceID, enums.AuthManage)
if err != nil {
if errors.Is(err, gorm.ErrRecordNotFound) {
slog.Error("resource not found", "err", errors.New(utils.UnwrapJoinedErrors(err)), "NamespaceID", req.NamespaceID)
slog.Error("resource not found", "err", err, "NamespaceID", req.NamespaceID)
errcode.NewHTTPError(c, errcode.HTTPErrCodeNotFound, utils.UnwrapJoinedErrors(err))
return
}
slog.Error("get resource failed", "err", errors.New(utils.UnwrapJoinedErrors(err)), "NamespaceID", req.NamespaceID)
slog.Error("get resource failed", "err", err, "NamespaceID", req.NamespaceID)
errcode.NewHTTPError(c, errcode.HTTPErrCodeInternalError, utils.UnwrapJoinedErrors(err))
return
}
@@ -56,11 +56,11 @@ func (h *handler) DeleteRepository(c *gin.Context, req *api.DeleteRepositoryRequ
authChecked, err := h.Authorizer.Repository(ctx, *user, req.ID, enums.AuthManage)
if err != nil {
if errors.Is(err, gorm.ErrRecordNotFound) {
slog.Error("resource not found", "err", errors.New(utils.UnwrapJoinedErrors(err)), "NamespaceID", req.NamespaceID, "RepositoryID", req.ID)
slog.Error("resource not found", "err", err, "NamespaceID", req.NamespaceID, "RepositoryID", req.ID)
errcode.NewHTTPError(c, errcode.HTTPErrCodeNotFound, utils.UnwrapJoinedErrors(err))
return
}
slog.Error("get resource failed", "err", errors.New(utils.UnwrapJoinedErrors(err)), "NamespaceID", req.NamespaceID, "RepositoryID", req.ID)
slog.Error("get resource failed", "err", err, "NamespaceID", req.NamespaceID, "RepositoryID", req.ID)
errcode.NewHTTPError(c, errcode.HTTPErrCodeInternalError, utils.UnwrapJoinedErrors(err))
return
}
@@ -59,11 +59,11 @@ func (h *handler) GetRepository(c *gin.Context, req *api.GetRepositoryRequest) {
authChecked, err := h.Authorizer.Repository(ctx, *user, req.ID, enums.AuthRead)
if err != nil {
if errors.Is(err, gorm.ErrRecordNotFound) {
slog.Error("resource not found", "err", errors.New(utils.UnwrapJoinedErrors(err)), "NamespaceID", req.NamespaceID, "RepositoryID", req.ID)
slog.Error("resource not found", "err", err, "NamespaceID", req.NamespaceID, "RepositoryID", req.ID)
errcode.NewHTTPError(c, errcode.HTTPErrCodeNotFound, utils.UnwrapJoinedErrors(err))
return
}
slog.Error("get resource failed", "err", errors.New(utils.UnwrapJoinedErrors(err)), "NamespaceID", req.NamespaceID, "RepositoryID", req.ID)
slog.Error("get resource failed", "err", err, "NamespaceID", req.NamespaceID, "RepositoryID", req.ID)
errcode.NewHTTPError(c, errcode.HTTPErrCodeInternalError, utils.UnwrapJoinedErrors(err))
return
}
@@ -58,11 +58,11 @@ func (h *handler) UpdateRepository(c *gin.Context, req *api.UpdateRepositoryRequ
authChecked, err := h.Authorizer.Repository(ctx, *user, req.ID, enums.AuthManage)
if err != nil {
if errors.Is(err, gorm.ErrRecordNotFound) {
slog.Error("resource not found", "err", errors.New(utils.UnwrapJoinedErrors(err)), "NamespaceID", req.NamespaceID, "RepositoryID", req.ID)
slog.Error("resource not found", "err", err, "NamespaceID", req.NamespaceID, "RepositoryID", req.ID)
errcode.NewHTTPError(c, errcode.HTTPErrCodeNotFound, utils.UnwrapJoinedErrors(err))
return
}
slog.Error("get resource failed", "err", errors.New(utils.UnwrapJoinedErrors(err)), "NamespaceID", req.NamespaceID, "RepositoryID", req.ID)
slog.Error("get resource failed", "err", err, "NamespaceID", req.NamespaceID, "RepositoryID", req.ID)
errcode.NewHTTPError(c, errcode.HTTPErrCodeInternalError, utils.UnwrapJoinedErrors(err))
return
}
+2 -2
View File
@@ -58,11 +58,11 @@ func (h *handler) DeleteTag(c *gin.Context, req *api.DeleteTagRequest) {
authChecked, err := h.Authorizer.Tag(ctx, *user, req.ID, enums.AuthRead)
if err != nil {
if errors.Is(err, gorm.ErrRecordNotFound) {
slog.Error("namespace not found", "err", errors.New(utils.UnwrapJoinedErrors(err)), "NamespaceID", req.NamespaceID)
slog.Error("namespace not found", "err", err, "NamespaceID", req.NamespaceID)
errcode.NewHTTPError(c, errcode.HTTPErrCodeNotFound, fmt.Sprintf("Namespace(%s) not found: %v", req.NamespaceID, err))
return
}
slog.Error("namespace find failed", "err", errors.New(utils.UnwrapJoinedErrors(err)), "NamespaceID", req.NamespaceID)
slog.Error("namespace find failed", "err", err, "NamespaceID", req.NamespaceID)
errcode.NewHTTPError(c, errcode.HTTPErrCodeInternalError, fmt.Sprintf("Namespace(%s) find failed: %v", req.NamespaceID, err))
return
}
+2 -2
View File
@@ -58,11 +58,11 @@ func (h *handler) GetTag(c *gin.Context, req *api.GetTagRequest) {
authChecked, err := h.Authorizer.Tag(ctx, *user, req.ID, enums.AuthRead)
if err != nil {
if errors.Is(err, gorm.ErrRecordNotFound) {
slog.Error("namespace not found", "err", errors.New(utils.UnwrapJoinedErrors(err)), "NamespaceID", req.NamespaceID)
slog.Error("namespace not found", "err", err, "NamespaceID", req.NamespaceID)
errcode.NewHTTPError(c, errcode.HTTPErrCodeNotFound, fmt.Sprintf("Namespace(%s) not found: %v", req.NamespaceID, err))
return
}
slog.Error("namespace find failed", "err", errors.New(utils.UnwrapJoinedErrors(err)), "NamespaceID", req.NamespaceID)
slog.Error("namespace find failed", "err", err, "NamespaceID", req.NamespaceID)
errcode.NewHTTPError(c, errcode.HTTPErrCodeInternalError, fmt.Sprintf("Namespace(%s) find failed: %v", req.NamespaceID, err))
return
}