Skip to content

Commit 852542b

Browse files
authored
Merge pull request #38284 from cpuguy83/context_in_api
Rely on request.Context() cancellation
2 parents 8391a66 + 05390c4 commit 852542b

21 files changed

Lines changed: 1061 additions & 184 deletions

File tree

api/server/router/build/build.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,8 +31,8 @@ func (r *buildRouter) Routes() []router.Route {
3131

3232
func (r *buildRouter) initRoutes() {
3333
r.routes = []router.Route{
34-
router.NewPostRoute("/build", r.postBuild, router.WithCancel),
35-
router.NewPostRoute("/build/prune", r.postPrune, router.WithCancel),
34+
router.NewPostRoute("/build", r.postBuild),
35+
router.NewPostRoute("/build/prune", r.postPrune),
3636
router.NewPostRoute("/build/cancel", r.postCancel),
3737
}
3838
}

api/server/router/container/container.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -38,8 +38,8 @@ func (r *containerRouter) initRoutes() {
3838
router.NewGetRoute("/containers/{name:.*}/changes", r.getContainersChanges),
3939
router.NewGetRoute("/containers/{name:.*}/json", r.getContainersByName),
4040
router.NewGetRoute("/containers/{name:.*}/top", r.getContainersTop),
41-
router.NewGetRoute("/containers/{name:.*}/logs", r.getContainersLogs, router.WithCancel),
42-
router.NewGetRoute("/containers/{name:.*}/stats", r.getContainersStats, router.WithCancel),
41+
router.NewGetRoute("/containers/{name:.*}/logs", r.getContainersLogs),
42+
router.NewGetRoute("/containers/{name:.*}/stats", r.getContainersStats),
4343
router.NewGetRoute("/containers/{name:.*}/attach/ws", r.wsContainersAttach),
4444
router.NewGetRoute("/exec/{id:.*}/json", r.getExecByID),
4545
router.NewGetRoute("/containers/{name:.*}/archive", r.getContainersArchive),
@@ -51,7 +51,7 @@ func (r *containerRouter) initRoutes() {
5151
router.NewPostRoute("/containers/{name:.*}/restart", r.postContainersRestart),
5252
router.NewPostRoute("/containers/{name:.*}/start", r.postContainersStart),
5353
router.NewPostRoute("/containers/{name:.*}/stop", r.postContainersStop),
54-
router.NewPostRoute("/containers/{name:.*}/wait", r.postContainersWait, router.WithCancel),
54+
router.NewPostRoute("/containers/{name:.*}/wait", r.postContainersWait),
5555
router.NewPostRoute("/containers/{name:.*}/resize", r.postContainersResize),
5656
router.NewPostRoute("/containers/{name:.*}/attach", r.postContainersAttach),
5757
router.NewPostRoute("/containers/{name:.*}/copy", r.postContainersCopy), // Deprecated since 1.8, Errors out since 1.12
@@ -60,7 +60,7 @@ func (r *containerRouter) initRoutes() {
6060
router.NewPostRoute("/exec/{name:.*}/resize", r.postContainerExecResize),
6161
router.NewPostRoute("/containers/{name:.*}/rename", r.postContainerRename),
6262
router.NewPostRoute("/containers/{name:.*}/update", r.postContainerUpdate),
63-
router.NewPostRoute("/containers/prune", r.postContainersPrune, router.WithCancel),
63+
router.NewPostRoute("/containers/prune", r.postContainersPrune),
6464
router.NewPostRoute("/commit", r.postCommit),
6565
// PUT
6666
router.NewPutRoute("/containers/{name:.*}/archive", r.putContainersArchive),

api/server/router/container/container_routes.go

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -338,9 +338,6 @@ func (s *containerRouter) postContainersWait(ctx context.Context, w http.Respons
338338
}
339339
}
340340

341-
// Note: the context should get canceled if the client closes the
342-
// connection since this handler has been wrapped by the
343-
// router.WithCancel() wrapper.
344341
waitC, err := s.backend.ContainerWait(ctx, vars["name"], waitCondition)
345342
if err != nil {
346343
return err

api/server/router/image/image.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -34,10 +34,10 @@ func (r *imageRouter) initRoutes() {
3434
router.NewGetRoute("/images/{name:.*}/json", r.getImagesByName),
3535
// POST
3636
router.NewPostRoute("/images/load", r.postImagesLoad),
37-
router.NewPostRoute("/images/create", r.postImagesCreate, router.WithCancel),
38-
router.NewPostRoute("/images/{name:.*}/push", r.postImagesPush, router.WithCancel),
37+
router.NewPostRoute("/images/create", r.postImagesCreate),
38+
router.NewPostRoute("/images/{name:.*}/push", r.postImagesPush),
3939
router.NewPostRoute("/images/{name:.*}/tag", r.postImagesTag),
40-
router.NewPostRoute("/images/prune", r.postImagesPrune, router.WithCancel),
40+
router.NewPostRoute("/images/prune", r.postImagesPrune),
4141
// DELETE
4242
router.NewDeleteRoute("/images/{name:.*}", r.deleteImages),
4343
}

api/server/router/local.go

Lines changed: 0 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,6 @@
11
package router // import "github.com/docker/docker/api/server/router"
22

33
import (
4-
"context"
5-
"net/http"
6-
74
"github.com/docker/docker/api/server/httputils"
85
)
96

@@ -72,33 +69,3 @@ func NewOptionsRoute(path string, handler httputils.APIFunc, opts ...RouteWrappe
7269
func NewHeadRoute(path string, handler httputils.APIFunc, opts ...RouteWrapper) Route {
7370
return NewRoute("HEAD", path, handler, opts...)
7471
}
75-
76-
func cancellableHandler(h httputils.APIFunc) httputils.APIFunc {
77-
return func(ctx context.Context, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
78-
if notifier, ok := w.(http.CloseNotifier); ok {
79-
notify := notifier.CloseNotify()
80-
notifyCtx, cancel := context.WithCancel(ctx)
81-
finished := make(chan struct{})
82-
defer close(finished)
83-
ctx = notifyCtx
84-
go func() {
85-
select {
86-
case <-notify:
87-
cancel()
88-
case <-finished:
89-
}
90-
}()
91-
}
92-
return h(ctx, w, r, vars)
93-
}
94-
}
95-
96-
// WithCancel makes new route which embeds http.CloseNotifier feature to
97-
// context.Context of handler.
98-
func WithCancel(r Route) Route {
99-
return localRoute{
100-
method: r.Method(),
101-
path: r.Path(),
102-
handler: cancellableHandler(r.Handler()),
103-
}
104-
}

api/server/router/network/network.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ func (r *networkRouter) initRoutes() {
3636
router.NewPostRoute("/networks/create", r.postNetworkCreate),
3737
router.NewPostRoute("/networks/{id:.*}/connect", r.postNetworkConnect),
3838
router.NewPostRoute("/networks/{id:.*}/disconnect", r.postNetworkDisconnect),
39-
router.NewPostRoute("/networks/prune", r.postNetworksPrune, router.WithCancel),
39+
router.NewPostRoute("/networks/prune", r.postNetworksPrune),
4040
// DELETE
4141
router.NewDeleteRoute("/networks/{id:.*}", r.deleteNetwork),
4242
}

api/server/router/plugin/plugin.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -28,11 +28,11 @@ func (r *pluginRouter) initRoutes() {
2828
router.NewGetRoute("/plugins/{name:.*}/json", r.inspectPlugin),
2929
router.NewGetRoute("/plugins/privileges", r.getPrivileges),
3030
router.NewDeleteRoute("/plugins/{name:.*}", r.removePlugin),
31-
router.NewPostRoute("/plugins/{name:.*}/enable", r.enablePlugin), // PATCH?
31+
router.NewPostRoute("/plugins/{name:.*}/enable", r.enablePlugin),
3232
router.NewPostRoute("/plugins/{name:.*}/disable", r.disablePlugin),
33-
router.NewPostRoute("/plugins/pull", r.pullPlugin, router.WithCancel),
34-
router.NewPostRoute("/plugins/{name:.*}/push", r.pushPlugin, router.WithCancel),
35-
router.NewPostRoute("/plugins/{name:.*}/upgrade", r.upgradePlugin, router.WithCancel),
33+
router.NewPostRoute("/plugins/pull", r.pullPlugin),
34+
router.NewPostRoute("/plugins/{name:.*}/push", r.pushPlugin),
35+
router.NewPostRoute("/plugins/{name:.*}/upgrade", r.upgradePlugin),
3636
router.NewPostRoute("/plugins/{name:.*}/set", r.setPlugin),
3737
router.NewPostRoute("/plugins/create", r.createPlugin),
3838
}

api/server/router/swarm/cluster.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ func (sr *swarmRouter) initRoutes() {
3737
router.NewPostRoute("/services/create", sr.createService),
3838
router.NewPostRoute("/services/{id}/update", sr.updateService),
3939
router.NewDeleteRoute("/services/{id}", sr.removeService),
40-
router.NewGetRoute("/services/{id}/logs", sr.getServiceLogs, router.WithCancel),
40+
router.NewGetRoute("/services/{id}/logs", sr.getServiceLogs),
4141

4242
router.NewGetRoute("/nodes", sr.getNodes),
4343
router.NewGetRoute("/nodes/{id}", sr.getNode),
@@ -46,7 +46,7 @@ func (sr *swarmRouter) initRoutes() {
4646

4747
router.NewGetRoute("/tasks", sr.getTasks),
4848
router.NewGetRoute("/tasks/{id}", sr.getTask),
49-
router.NewGetRoute("/tasks/{id}/logs", sr.getTaskLogs, router.WithCancel),
49+
router.NewGetRoute("/tasks/{id}/logs", sr.getTaskLogs),
5050

5151
router.NewGetRoute("/secrets", sr.getSecrets),
5252
router.NewPostRoute("/secrets/create", sr.createSecret),

api/server/router/system/system.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,10 +30,10 @@ func NewRouter(b Backend, c ClusterBackend, fscache *fscache.FSCache, builder *b
3030
r.routes = []router.Route{
3131
router.NewOptionsRoute("/{anyroute:.*}", optionsHandler),
3232
router.NewGetRoute("/_ping", r.pingHandler),
33-
router.NewGetRoute("/events", r.getEvents, router.WithCancel),
33+
router.NewGetRoute("/events", r.getEvents),
3434
router.NewGetRoute("/info", r.getInfo),
3535
router.NewGetRoute("/version", r.getVersion),
36-
router.NewGetRoute("/system/df", r.getDiskUsage, router.WithCancel),
36+
router.NewGetRoute("/system/df", r.getDiskUsage),
3737
router.NewPostRoute("/auth", r.postAuth),
3838
}
3939

api/server/router/volume/volume.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ func (r *volumeRouter) initRoutes() {
2929
router.NewGetRoute("/volumes/{name:.*}", r.getVolumeByName),
3030
// POST
3131
router.NewPostRoute("/volumes/create", r.postVolumesCreate),
32-
router.NewPostRoute("/volumes/prune", r.postVolumesPrune, router.WithCancel),
32+
router.NewPostRoute("/volumes/prune", r.postVolumesPrune),
3333
// DELETE
3434
router.NewDeleteRoute("/volumes/{name:.*}", r.deleteVolumes),
3535
}

0 commit comments

Comments
 (0)