|
@@ -4,6 +4,7 @@ import (
|
|
"fmt"
|
|
"fmt"
|
|
"net/http"
|
|
"net/http"
|
|
|
|
|
|
|
|
+ containerderrors "github.com/containerd/containerd/errdefs"
|
|
"github.com/docker/distribution/registry/api/errcode"
|
|
"github.com/docker/distribution/registry/api/errcode"
|
|
"github.com/sirupsen/logrus"
|
|
"github.com/sirupsen/logrus"
|
|
"google.golang.org/grpc/codes"
|
|
"google.golang.org/grpc/codes"
|
|
@@ -47,6 +48,10 @@ func GetHTTPErrorStatusCode(err error) int {
|
|
if statusCode != http.StatusInternalServerError {
|
|
if statusCode != http.StatusInternalServerError {
|
|
return statusCode
|
|
return statusCode
|
|
}
|
|
}
|
|
|
|
+ statusCode = statusCodeFromContainerdError(err)
|
|
|
|
+ if statusCode != http.StatusInternalServerError {
|
|
|
|
+ return statusCode
|
|
|
|
+ }
|
|
statusCode = statusCodeFromDistributionError(err)
|
|
statusCode = statusCodeFromDistributionError(err)
|
|
if statusCode != http.StatusInternalServerError {
|
|
if statusCode != http.StatusInternalServerError {
|
|
return statusCode
|
|
return statusCode
|
|
@@ -170,3 +175,24 @@ func statusCodeFromDistributionError(err error) int {
|
|
}
|
|
}
|
|
return http.StatusInternalServerError
|
|
return http.StatusInternalServerError
|
|
}
|
|
}
|
|
|
|
+
|
|
|
|
+// statusCodeFromContainerdError returns status code for containerd errors when
|
|
|
|
+// consumed directory (not through gRPC)
|
|
|
|
+func statusCodeFromContainerdError(err error) int {
|
|
|
|
+ switch {
|
|
|
|
+ case containerderrors.IsInvalidArgument(err):
|
|
|
|
+ return http.StatusBadRequest
|
|
|
|
+ case containerderrors.IsNotFound(err):
|
|
|
|
+ return http.StatusNotFound
|
|
|
|
+ case containerderrors.IsAlreadyExists(err):
|
|
|
|
+ return http.StatusConflict
|
|
|
|
+ case containerderrors.IsFailedPrecondition(err):
|
|
|
|
+ return http.StatusPreconditionFailed
|
|
|
|
+ case containerderrors.IsUnavailable(err):
|
|
|
|
+ return http.StatusServiceUnavailable
|
|
|
|
+ case containerderrors.IsNotImplemented(err):
|
|
|
|
+ return http.StatusNotImplemented
|
|
|
|
+ default:
|
|
|
|
+ return http.StatusInternalServerError
|
|
|
|
+ }
|
|
|
|
+}
|