55 "errors"
66 "slices"
77
8+ cerrdefs "github.com/containerd/errdefs"
89 digest "github.com/opencontainers/go-digest"
910)
1011
@@ -189,24 +190,28 @@ func (e *exporter) ExportTo(ctx context.Context, t CacheExporterTarget, opt Cach
189190 if (remote == nil || opt .CompressionOpt != nil ) && opt .Mode != CacheExportModeRemoteOnly {
190191 res , err := cm .results .Load (ctx , res )
191192 if err != nil {
192- return nil , err
193- }
194- remotes , err := opt .ResolveRemotes (ctx , res )
195- if err != nil {
196- return nil , err
197- }
198- res .Release (context .TODO ())
199- if remote == nil && len (remotes ) > 0 {
200- remote , remotes = remotes [0 ], remotes [1 :] // pop the first element
201- }
202- if opt .CompressionOpt != nil {
203- for _ , r := range remotes { // record all remaining remotes as well
204- results = append (results , CacheExportResult {
205- CreatedAt : v .CreatedAt ,
206- Result : r ,
207- EdgeVertex : k .vtx ,
208- EdgeIndex : k .output ,
209- })
193+ if ! errors .Is (err , cerrdefs .ErrNotFound ) {
194+ return nil , err
195+ }
196+ remote = nil
197+ } else {
198+ remotes , err := opt .ResolveRemotes (ctx , res )
199+ if err != nil {
200+ return nil , err
201+ }
202+ res .Release (context .TODO ())
203+ if remote == nil && len (remotes ) > 0 {
204+ remote , remotes = remotes [0 ], remotes [1 :] // pop the first element
205+ }
206+ if opt .CompressionOpt != nil {
207+ for _ , r := range remotes { // record all remaining remotes as well
208+ results = append (results , CacheExportResult {
209+ CreatedAt : v .CreatedAt ,
210+ Result : r ,
211+ EdgeVertex : k .vtx ,
212+ EdgeIndex : k .output ,
213+ })
214+ }
210215 }
211216 }
212217 }
@@ -232,7 +237,7 @@ func (e *exporter) ExportTo(ctx context.Context, t CacheExporterTarget, opt Cach
232237 for _ , dep := range deps {
233238 rec , err := dep .CacheKey .Exporter .ExportTo (ctx , t , opt )
234239 if err != nil {
235- return nil , err
240+ continue
236241 }
237242 for _ , r := range rec {
238243 srcs [i ] = append (srcs [i ], CacheLink {Src : r , Selector : string (dep .Selector )})
@@ -244,7 +249,7 @@ func (e *exporter) ExportTo(ctx context.Context, t CacheExporterTarget, opt Cach
244249 for _ , de := range e .edge .secondaryExporters {
245250 recs , err := de .cacheKey .CacheKey .Exporter .ExportTo (mainCtx , t , opt )
246251 if err != nil {
247- return nil , nil
252+ continue
248253 }
249254 for _ , r := range recs {
250255 srcs [de .index ] = append (srcs [de .index ], CacheLink {Src : r , Selector : de .cacheKey .Selector .String ()})
@@ -261,6 +266,14 @@ func (e *exporter) ExportTo(ctx context.Context, t CacheExporterTarget, opt Cach
261266 }
262267 }
263268
269+ // validate deps are present
270+ for _ , deps := range srcs {
271+ if len (deps ) == 0 {
272+ res [e ] = nil
273+ return res [e ], nil
274+ }
275+ }
276+
264277 if v != nil && len (deps ) == 0 {
265278 cm := v .cacheManager
266279 key := cm .getID (v .key )
0 commit comments