mirror of
https://github.com/moby/moby.git
synced 2026-01-11 18:51:37 +00:00
Remove string checking in API error handling
Use strongly typed errors to set HTTP status codes. Error interfaces are defined in the api/errors package and errors returned from controllers are checked against these interfaces. Errors can be wraeped in a pkg/errors.Causer, as long as somewhere in the line of causes one of the interfaces is implemented. The special error interfaces take precedence over Causer, meaning if both Causer and one of the new error interfaces are implemented, the Causer is not traversed. Signed-off-by: Brian Goff <cpuguy83@gmail.com>
This commit is contained in:
@@ -4,6 +4,7 @@ import (
|
||||
"fmt"
|
||||
|
||||
"github.com/docker/docker/api/types/container"
|
||||
"github.com/pkg/errors"
|
||||
)
|
||||
|
||||
// ContainerUpdate updates configuration of the container
|
||||
@@ -12,7 +13,7 @@ func (daemon *Daemon) ContainerUpdate(name string, hostConfig *container.HostCon
|
||||
|
||||
warnings, err := daemon.verifyContainerSettings(hostConfig, nil, true)
|
||||
if err != nil {
|
||||
return container.ContainerUpdateOKBody{Warnings: warnings}, err
|
||||
return container.ContainerUpdateOKBody{Warnings: warnings}, validationError{err}
|
||||
}
|
||||
|
||||
if err := daemon.update(name, hostConfig); err != nil {
|
||||
@@ -72,7 +73,8 @@ func (daemon *Daemon) update(name string, hostConfig *container.HostConfig) erro
|
||||
if container.IsRunning() && !container.IsRestarting() {
|
||||
if err := daemon.containerd.UpdateResources(container.ID, toContainerdResources(hostConfig.Resources)); err != nil {
|
||||
restoreConfig = true
|
||||
return errCannotUpdate(container.ID, err)
|
||||
// TODO: it would be nice if containerd responded with better errors here so we can classify this better.
|
||||
return errCannotUpdate(container.ID, systemError{err})
|
||||
}
|
||||
}
|
||||
|
||||
@@ -82,5 +84,5 @@ func (daemon *Daemon) update(name string, hostConfig *container.HostConfig) erro
|
||||
}
|
||||
|
||||
func errCannotUpdate(containerID string, err error) error {
|
||||
return fmt.Errorf("Cannot update container %s: %v", containerID, err)
|
||||
return errors.Wrap(err, "Cannot update container "+containerID)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user