@@ -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
2223func 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
7172func (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}
0 commit comments