Skip to content

Commit 1c17cf1

Browse files
committed
parallel container removal
1 parent cbca669 commit 1c17cf1

File tree

3 files changed

+58
-49
lines changed

3 files changed

+58
-49
lines changed

Makefile

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,15 @@
1+
PROJECT_NAME := "tinyFaaS"
2+
PKG := "github.com/pfandzelter/$(PROJECT_NAME)"
3+
GO_FILES := $(shell find . -name '*.go' | grep -v /vendor/ | grep -v /ext/ | grep -v _test.go)
4+
15
.PHONY: all build start clean
26

37
all: build clean start
48

59
build: manager rproxy
610

7-
manager: ./cmd/manager/main.go
8-
@go build -o ./manager ./cmd/manager/*.go
9-
10-
rproxy: ./cmd/rproxy/main.go
11-
@go build -o ./rproxy ./cmd/rproxy/*.go
11+
manager rproxy: $(GO_FILES)
12+
@go build -o $@ -v $(PKG)/cmd/$@
1213

1314
start:
1415
./manager

pkg/docker/handler.go

Lines changed: 50 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import (
99
"net/http"
1010
"os"
1111
"path"
12+
"sync"
1213
"time"
1314

1415
"github.com/docker/docker/api/types"
@@ -20,7 +21,8 @@ import (
2021
)
2122

2223
const (
23-
TmpDir = "./tmp"
24+
TmpDir = "./tmp"
25+
containerTimeout = 1
2426
)
2527

2628
type dockerHandler struct {
@@ -198,18 +200,26 @@ func (dh *dockerHandler) Start() error {
198200

199201
// start containers
200202
// docker start <container>
203+
204+
wg := sync.WaitGroup{}
201205
for _, container := range dh.thisContainers {
202-
err := client.ContainerStart(
203-
context.Background(),
204-
container,
205-
types.ContainerStartOptions{},
206-
)
207-
if err != nil {
208-
return err
209-
}
206+
wg.Add(1)
207+
go func(c string) {
208+
err := client.ContainerStart(
209+
context.Background(),
210+
c,
211+
types.ContainerStartOptions{},
212+
)
213+
wg.Done()
214+
if err != nil {
215+
log.Printf("error starting container %s: %s", c, err)
216+
return
217+
}
210218

211-
log.Println("started container", container)
219+
log.Println("started container", c)
220+
}(container)
212221
}
222+
wg.Wait()
213223

214224
// get container IPs
215225
// docker inspect <container>
@@ -275,40 +285,44 @@ func (dh *dockerHandler) Destroy() error {
275285

276286
log.Printf("fh: %+v", dh)
277287

278-
// stop containers
279-
// docker stop <container>
288+
wg := sync.WaitGroup{}
280289
log.Printf("stopping containers: %v", dh.thisContainers)
281290
for _, c := range dh.thisContainers {
282-
log.Println("stopping container", c)
291+
log.Println("removing container", c)
283292

284-
err := client.ContainerStop(
285-
context.Background(),
286-
c,
287-
container.StopOptions{},
288-
)
289-
if err != nil {
290-
return err
291-
}
293+
wg.Add(1)
294+
go func(c string) {
295+
log.Println("stopping container", c)
292296

293-
log.Println("stopped container", c)
294-
}
297+
timeout := 1 // seconds
295298

296-
// remove containers
297-
// docker rm <container>
298-
for _, container := range dh.thisContainers {
299-
log.Println("removing container", container)
299+
err := client.ContainerStop(
300+
context.Background(),
301+
c,
302+
container.StopOptions{
303+
Timeout: &timeout,
304+
},
305+
)
306+
if err != nil {
307+
log.Printf("error stopping container %s: %s", c, err)
308+
}
300309

301-
err := client.ContainerRemove(
302-
context.Background(),
303-
container,
304-
types.ContainerRemoveOptions{},
305-
)
306-
if err != nil {
307-
return err
308-
}
310+
log.Println("stopped container", c)
311+
312+
err = client.ContainerRemove(
313+
context.Background(),
314+
c,
315+
types.ContainerRemoveOptions{},
316+
)
317+
wg.Done()
318+
if err != nil {
319+
log.Printf("error removing container %s: %s", c, err)
320+
}
321+
}(c)
309322

310-
log.Println("removed container", container)
323+
log.Println("removed container", c)
311324
}
325+
wg.Wait()
312326

313327
// remove network
314328
// docker network rm <network>

pkg/manager/manager.go

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -206,15 +206,9 @@ func (ms *ManagementService) LogsFunction(name string) (string, error) {
206206
}
207207

208208
func (ms *ManagementService) Wipe() error {
209-
for name, fh := range ms.functionHandlers {
209+
for name := range ms.functionHandlers {
210210
log.Println("destroying function", name)
211-
212-
err := fh.Destroy()
213-
if err != nil {
214-
return err
215-
}
216-
217-
log.Println("removed function", name)
211+
ms.Delete(name)
218212
}
219213

220214
return nil

0 commit comments

Comments
 (0)