Browse code

plugin: use pkg/errors in more places

Also provide stack trace output in daemon logs.

Signed-off-by: Tibor Vass <tibor@docker.com>

Tibor Vass authored on 2017/01/18 03:27:01
Showing 4 changed files
... ...
@@ -138,7 +138,7 @@ func (s *Server) makeHTTPHandler(handler httputils.APIFunc) http.HandlerFunc {
138 138
 		}
139 139
 
140 140
 		if err := handlerFunc(ctx, w, r, vars); err != nil {
141
-			logrus.Errorf("Handler for %s %s returned error: %v", r.Method, r.URL.Path, err)
141
+			logrus.Errorf("Handler for %s %s returned error: %+v", r.Method, r.URL.Path, err)
142 142
 			httputils.MakeErrorHandler(err)(w, r)
143 143
 		}
144 144
 	}
... ...
@@ -237,7 +237,7 @@ func (pm *Manager) save(p *v2.Plugin) error {
237 237
 		return errors.Wrap(err, "failed to marshal plugin json")
238 238
 	}
239 239
 	if err := ioutils.AtomicWriteFile(filepath.Join(pm.config.Root, p.GetID(), configFileName), pluginJSON, 0600); err != nil {
240
-		return err
240
+		return errors.Wrap(err, "failed to write atomically plugin json")
241 241
 	}
242 242
 	return nil
243 243
 }
... ...
@@ -42,12 +42,12 @@ func (pm *Manager) enable(p *v2.Plugin, c *controller, force bool) error {
42 42
 
43 43
 	if p.PropagatedMount != "" {
44 44
 		if err := mount.MakeRShared(p.PropagatedMount); err != nil {
45
-			return err
45
+			return errors.WithStack(err)
46 46
 		}
47 47
 	}
48 48
 
49 49
 	if err := initlayer.Setup(filepath.Join(pm.config.Root, p.PluginObj.ID, rootFSFileName), 0, 0); err != nil {
50
-		return err
50
+		return errors.WithStack(err)
51 51
 	}
52 52
 
53 53
 	if err := pm.containerdClient.Create(p.GetID(), "", "", specs.Spec(*spec), attachToLog(p.GetID())); err != nil {
... ...
@@ -56,7 +56,7 @@ func (pm *Manager) enable(p *v2.Plugin, c *controller, force bool) error {
56 56
 				logrus.Warnf("Could not unmount %s: %v", p.PropagatedMount, err)
57 57
 			}
58 58
 		}
59
-		return err
59
+		return errors.WithStack(err)
60 60
 	}
61 61
 
62 62
 	return pm.pluginPostStart(p, c)
... ...
@@ -67,7 +67,7 @@ func (pm *Manager) pluginPostStart(p *v2.Plugin, c *controller) error {
67 67
 	if err != nil {
68 68
 		c.restart = false
69 69
 		shutdownPlugin(p, c, pm.containerdClient)
70
-		return err
70
+		return errors.WithStack(err)
71 71
 	}
72 72
 
73 73
 	p.SetPClient(client)
... ...
@@ -3,7 +3,6 @@
3 3
 package v2
4 4
 
5 5
 import (
6
-	"errors"
7 6
 	"os"
8 7
 	"path/filepath"
9 8
 	"strings"
... ...
@@ -12,6 +11,7 @@ import (
12 12
 	"github.com/docker/docker/oci"
13 13
 	"github.com/docker/docker/pkg/system"
14 14
 	specs "github.com/opencontainers/runtime-spec/specs-go"
15
+	"github.com/pkg/errors"
15 16
 )
16 17
 
17 18
 // InitSpec creates an OCI spec from the plugin's config.
... ...
@@ -29,7 +29,7 @@ func (p *Plugin) InitSpec(execRoot string) (*specs.Spec, error) {
29 29
 
30 30
 	execRoot = filepath.Join(execRoot, p.PluginObj.ID)
31 31
 	if err := os.MkdirAll(execRoot, 0700); err != nil {
32
-		return nil, err
32
+		return nil, errors.WithStack(err)
33 33
 	}
34 34
 
35 35
 	mounts := append(p.PluginObj.Config.Mounts, types.PluginMount{
... ...
@@ -95,7 +95,7 @@ func (p *Plugin) InitSpec(execRoot string) (*specs.Spec, error) {
95 95
 		path := *dev.Path
96 96
 		d, dPermissions, err := oci.DevicesFromPath(path, path, "rwm")
97 97
 		if err != nil {
98
-			return nil, err
98
+			return nil, errors.WithStack(err)
99 99
 		}
100 100
 		s.Linux.Devices = append(s.Linux.Devices, d...)
101 101
 		s.Linux.Resources.Devices = append(s.Linux.Resources.Devices, dPermissions...)