diff --git a/modular/gater/errors.go b/modular/gater/errors.go index dfd83615b..5a1978a4d 100644 --- a/modular/gater/errors.go +++ b/modular/gater/errors.go @@ -78,3 +78,7 @@ func ErrNotifySwapOutWithDetail(detail string) *gfsperrors.GfSpError { func ErrConsensusWithDetail(detail string) *gfsperrors.GfSpError { return gfsperrors.Register(module.GateModularName, http.StatusInternalServerError, 55001, detail) } + +func ErrConsensusNotFoundWithDetail(detail string) *gfsperrors.GfSpError { + return gfsperrors.Register(module.GateModularName, http.StatusNotFound, 55002, detail) +} diff --git a/modular/gater/object_handler.go b/modular/gater/object_handler.go index 5aebdbc67..eed9f2651 100644 --- a/modular/gater/object_handler.go +++ b/modular/gater/object_handler.go @@ -583,7 +583,11 @@ func (g *GateModular) downloadObject(w http.ResponseWriter, reqCtx *RequestConte metrics.PerfGetObjectTimeHistogram.WithLabelValues("get_object_get_object_info_time").Observe(time.Since(getObjectTime).Seconds()) if err != nil { log.CtxErrorw(reqCtx.Context(), "failed to get object info from consensus", "error", err) - err = ErrConsensusWithDetail("failed to get object info from consensus, object_name: " + reqCtx.objectName + ", bucket_name: " + reqCtx.bucketName + ", error:" + err.Error()) + if strings.Contains(err.Error(), "No such object") { + err = ErrConsensusNotFoundWithDetail("failed to get object info from consensus, the object may be deleted. object_name: " + reqCtx.objectName + ", bucket_name: " + reqCtx.bucketName + ", error:" + err.Error()) + } else { + err = ErrConsensusWithDetail("failed to get object info from consensus, object_name: " + reqCtx.objectName + ", bucket_name: " + reqCtx.bucketName + ", error:" + err.Error()) + } return err }