2e67c827bb
This utility is used by the client, which cannot do anything about errors received from the API. In situations where no API connection was possible, for example, if the client has no permissions to connect to the socket, the request would have a "-1" status-code;3e39ec60da/client/request.go (L133-L134)
In this case, a client with "debug" enabled, would print _and_ log a confusing error message: DEBU[0000] FIXME: Got an status-code for which error does not match any expected type!!! error="Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Post \"http://%2Fvar%2Frun%2Fdocker.sock/v1.24/build?buildargs=%7B%7D&cachefrom=%5B%5D&cgroupparent=&cpuperiod=0&cpuquota=0&cpusetcpus=&cpusetmems=&cpushares=0&dockerfile=Dockerfile.repro&labels=%7B%7D&memory=0&memswap=0&networkmode=default&rm=1&shmsize=0&t=repro&target=&ulimits=null&version=1\": dial unix /var/run/docker.sock: connect: permission denied" module=api status_code=-1 Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Post "http://%2Fvar%2Frun%2Fdocker.sock/v1.24/build?buildargs=%7B%7D&cachefrom=%5B%5D&cgroupparent=&cpuperiod=0&cpuquota=0&cpusetcpus=&cpusetmems=&cpushares=0&dockerfile=Dockerfile.repro&labels=%7B%7D&memory=0&memswap=0&networkmode=default&rm=1&shmsize=0&t=repro&target=&ulimits=null&version=1": dial unix /var/run/docker.sock: connect: permission denied In the above; `DEBU` logs the error (including the "FIXME"), and the second line is the error message printed. This was a mistake on my side when I added the `FromStatusCode` utility. I implemented that to be the counterpart to `FromError`, but in doing so also copied over the logging (see1af30c50ca
). That log-message is only intended to be logged on the daemon side, for situations where we return an error without a proper errdefs (which would result in an 500 "internal server error" to be returned by the API). This patch removes the debug log, and a minor cleanup to explicitly return "nil" if we didn't get an error in the first place. Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
46 lines
1.1 KiB
Go
46 lines
1.1 KiB
Go
package errdefs // import "github.com/docker/docker/errdefs"
|
|
|
|
import (
|
|
"net/http"
|
|
)
|
|
|
|
// FromStatusCode creates an errdef error, based on the provided HTTP status-code
|
|
func FromStatusCode(err error, statusCode int) error {
|
|
if err == nil {
|
|
return nil
|
|
}
|
|
switch statusCode {
|
|
case http.StatusNotFound:
|
|
err = NotFound(err)
|
|
case http.StatusBadRequest:
|
|
err = InvalidParameter(err)
|
|
case http.StatusConflict:
|
|
err = Conflict(err)
|
|
case http.StatusUnauthorized:
|
|
err = Unauthorized(err)
|
|
case http.StatusServiceUnavailable:
|
|
err = Unavailable(err)
|
|
case http.StatusForbidden:
|
|
err = Forbidden(err)
|
|
case http.StatusNotModified:
|
|
err = NotModified(err)
|
|
case http.StatusNotImplemented:
|
|
err = NotImplemented(err)
|
|
case http.StatusInternalServerError:
|
|
if !IsSystem(err) && !IsUnknown(err) && !IsDataLoss(err) && !IsDeadline(err) && !IsCancelled(err) {
|
|
err = System(err)
|
|
}
|
|
default:
|
|
switch {
|
|
case statusCode >= 200 && statusCode < 400:
|
|
// it's a client error
|
|
case statusCode >= 400 && statusCode < 500:
|
|
err = InvalidParameter(err)
|
|
case statusCode >= 500 && statusCode < 600:
|
|
err = System(err)
|
|
default:
|
|
err = Unknown(err)
|
|
}
|
|
}
|
|
return err
|
|
}
|