Skip to content

Commit b225258

Browse files
committed
builder: export build cache records
Signed-off-by: Tonis Tiigi <tonistiigi@gmail.com>
1 parent bb68c81 commit b225258

File tree

5 files changed

+90
-11
lines changed

5 files changed

+90
-11
lines changed

api/server/router/system/system.go

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package system // import "github.com/docker/docker/api/server/router/system"
22

33
import (
44
"github.com/docker/docker/api/server/router"
5+
buildkit "github.com/docker/docker/builder/builder-next"
56
"github.com/docker/docker/builder/fscache"
67
)
78

@@ -11,15 +12,17 @@ type systemRouter struct {
1112
backend Backend
1213
cluster ClusterBackend
1314
routes []router.Route
14-
builder *fscache.FSCache
15+
fscache *fscache.FSCache // legacy
16+
builder *buildkit.Builder
1517
}
1618

1719
// NewRouter initializes a new system router
18-
func NewRouter(b Backend, c ClusterBackend, fscache *fscache.FSCache) router.Router {
20+
func NewRouter(b Backend, c ClusterBackend, fscache *fscache.FSCache, builder *buildkit.Builder) router.Router {
1921
r := &systemRouter{
2022
backend: b,
2123
cluster: c,
22-
builder: fscache,
24+
fscache: fscache,
25+
builder: builder,
2326
}
2427

2528
r.routes = []router.Route{

api/server/router/system/system_routes.go

Lines changed: 39 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ import (
1717
"github.com/docker/docker/pkg/ioutils"
1818
pkgerrors "github.com/pkg/errors"
1919
"github.com/sirupsen/logrus"
20+
"golang.org/x/sync/errgroup"
2021
)
2122

2223
func optionsHandler(ctx context.Context, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
@@ -69,15 +70,48 @@ func (s *systemRouter) getVersion(ctx context.Context, w http.ResponseWriter, r
6970
}
7071

7172
func (s *systemRouter) getDiskUsage(ctx context.Context, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
72-
du, err := s.backend.SystemDiskUsage(ctx)
73-
if err != nil {
73+
eg, ctx := errgroup.WithContext(ctx)
74+
75+
var du *types.DiskUsage
76+
eg.Go(func() error {
77+
var err error
78+
du, err = s.backend.SystemDiskUsage(ctx)
79+
if err != nil {
80+
return err
81+
}
82+
return nil
83+
})
84+
85+
var builderSize int64 // legacy
86+
eg.Go(func() error {
87+
var err error
88+
builderSize, err = s.fscache.DiskUsage(ctx)
89+
if err != nil {
90+
return pkgerrors.Wrap(err, "error getting fscache build cache usage")
91+
}
92+
return nil
93+
})
94+
95+
var buildCache []*types.BuildCache
96+
eg.Go(func() error {
97+
var err error
98+
buildCache, err = s.builder.DiskUsage(ctx)
99+
if err != nil {
100+
return pkgerrors.Wrap(err, "error getting fscache build cache usage")
101+
}
102+
return nil
103+
})
104+
105+
if err := eg.Wait(); err != nil {
74106
return err
75107
}
76-
builderSize, err := s.builder.DiskUsage(ctx)
77-
if err != nil {
78-
return pkgerrors.Wrap(err, "error getting build cache usage")
108+
109+
for _, b := range buildCache {
110+
builderSize += b.Size
79111
}
112+
80113
du.BuilderSize = builderSize
114+
du.BuildCache = buildCache
81115

82116
return httputils.WriteJSON(w, http.StatusOK, du)
83117
}

api/types/types.go

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -512,7 +512,8 @@ type DiskUsage struct {
512512
Images []*ImageSummary
513513
Containers []*Container
514514
Volumes []*Volume
515-
BuilderSize int64
515+
BuildCache []*BuildCache
516+
BuilderSize int64 // deprecated
516517
}
517518

518519
// ContainersPruneReport contains the response for Engine API:
@@ -585,3 +586,17 @@ type PushResult struct {
585586
type BuildResult struct {
586587
ID string
587588
}
589+
590+
// BuildCache contains information about a build cache record
591+
type BuildCache struct {
592+
ID string
593+
Mutable bool
594+
InUse bool
595+
Size int64
596+
597+
CreatedAt time.Time
598+
LastUsedAt *time.Time
599+
UsageCount int
600+
Parent string
601+
Description string
602+
}

builder/builder-next/builder.go

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import (
88
"sync"
99

1010
"github.com/containerd/containerd/content"
11+
"github.com/docker/docker/api/types"
1112
"github.com/docker/docker/api/types/backend"
1213
"github.com/docker/docker/builder"
1314
"github.com/docker/docker/daemon/images"
@@ -55,6 +56,30 @@ func (b *Builder) Cancel(ctx context.Context, id string) error {
5556
return nil
5657
}
5758

59+
func (b *Builder) DiskUsage(ctx context.Context) ([]*types.BuildCache, error) {
60+
duResp, err := b.controller.DiskUsage(ctx, &controlapi.DiskUsageRequest{})
61+
if err != nil {
62+
return nil, err
63+
}
64+
65+
var items []*types.BuildCache
66+
for _, r := range duResp.Record {
67+
items = append(items, &types.BuildCache{
68+
ID: r.ID,
69+
Mutable: r.Mutable,
70+
InUse: r.InUse,
71+
Size: r.Size_,
72+
73+
CreatedAt: r.CreatedAt,
74+
LastUsedAt: r.LastUsedAt,
75+
UsageCount: int(r.UsageCount),
76+
Parent: r.Parent,
77+
Description: r.Description,
78+
})
79+
}
80+
return items, nil
81+
}
82+
5883
func (b *Builder) Build(ctx context.Context, opt backend.BuildConfig) (*builder.Result, error) {
5984
var out builder.Result
6085

cmd/dockerd/daemon.go

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -239,7 +239,8 @@ func (cli *DaemonCli) start(opts *daemonOptions) (err error) {
239239
type routerOptions struct {
240240
sessionManager *session.Manager
241241
buildBackend *buildbackend.Backend
242-
buildCache *fscache.FSCache
242+
buildCache *fscache.FSCache // legacy
243+
buildkit *buildkit.Builder
243244
daemon *daemon.Daemon
244245
api *apiserver.Server
245246
cluster *cluster.Cluster
@@ -289,6 +290,7 @@ func newRouterOptions(config *config.Config, daemon *daemon.Daemon) (routerOptio
289290
sessionManager: sm,
290291
buildBackend: bb,
291292
buildCache: buildCache,
293+
buildkit: buildkit,
292294
daemon: daemon,
293295
}, nil
294296
}
@@ -462,7 +464,7 @@ func initRouter(opts routerOptions) {
462464
checkpointrouter.NewRouter(opts.daemon, decoder),
463465
container.NewRouter(opts.daemon, decoder),
464466
image.NewRouter(opts.daemon.ImageService()),
465-
systemrouter.NewRouter(opts.daemon, opts.cluster, opts.buildCache),
467+
systemrouter.NewRouter(opts.daemon, opts.cluster, opts.buildCache, opts.buildkit),
466468
volume.NewRouter(opts.daemon.VolumesService()),
467469
build.NewRouter(opts.buildBackend, opts.daemon),
468470
sessionrouter.NewRouter(opts.sessionManager),

0 commit comments

Comments
 (0)