Skip to content

Commit dc30e83

Browse files
authored
Merge pull request #5565 from tonistiigi/v0.17.3-picks
[v0.17.3] cherry-picks
2 parents 80e01a9 + c526bfc commit dc30e83

File tree

2 files changed

+29
-22
lines changed

2 files changed

+29
-22
lines changed

solver/llbsolver/vertex.go

+19-12
Original file line numberDiff line numberDiff line change
@@ -155,9 +155,8 @@ func (dpc *detectPrunedCacheID) Load(op *pb.Op, md *pb.OpMetadata, opt *solver.V
155155
}
156156

157157
func Load(ctx context.Context, def *pb.Definition, polEngine SourcePolicyEvaluator, opts ...LoadOpt) (solver.Edge, error) {
158-
return loadLLB(ctx, def, polEngine, func(dgst digest.Digest, pbOp *pb.Op, load func(digest.Digest) (solver.Vertex, error)) (solver.Vertex, error) {
159-
opMetadata := def.Metadata[string(dgst)]
160-
vtx, err := newVertex(dgst, pbOp, opMetadata, load, opts...)
158+
return loadLLB(ctx, def, polEngine, func(dgst digest.Digest, op *op, load func(digest.Digest) (solver.Vertex, error)) (solver.Vertex, error) {
159+
vtx, err := newVertex(dgst, op.Op, op.Metadata, load, opts...)
161160
if err != nil {
162161
return nil, err
163162
}
@@ -198,7 +197,7 @@ func newVertex(dgst digest.Digest, op *pb.Op, opMeta *pb.OpMetadata, load func(d
198197
return vtx, nil
199198
}
200199

201-
func recomputeDigests(ctx context.Context, all map[digest.Digest]*pb.Op, visited map[digest.Digest]digest.Digest, dgst digest.Digest) (digest.Digest, error) {
200+
func recomputeDigests(ctx context.Context, all map[digest.Digest]*op, visited map[digest.Digest]digest.Digest, dgst digest.Digest) (digest.Digest, error) {
202201
if dgst, ok := visited[dgst]; ok {
203202
return dgst, nil
204203
}
@@ -235,30 +234,38 @@ func recomputeDigests(ctx context.Context, all map[digest.Digest]*pb.Op, visited
235234
return newDgst, nil
236235
}
237236

237+
// op is a private wrapper around pb.Op that includes its metadata.
238+
type op struct {
239+
*pb.Op
240+
Metadata *pb.OpMetadata
241+
}
242+
238243
// loadLLB loads LLB.
239244
// fn is executed sequentially.
240-
func loadLLB(ctx context.Context, def *pb.Definition, polEngine SourcePolicyEvaluator, fn func(digest.Digest, *pb.Op, func(digest.Digest) (solver.Vertex, error)) (solver.Vertex, error)) (solver.Edge, error) {
245+
func loadLLB(ctx context.Context, def *pb.Definition, polEngine SourcePolicyEvaluator, fn func(digest.Digest, *op, func(digest.Digest) (solver.Vertex, error)) (solver.Vertex, error)) (solver.Edge, error) {
241246
if len(def.Def) == 0 {
242247
return solver.Edge{}, errors.New("invalid empty definition")
243248
}
244249

245-
allOps := make(map[digest.Digest]*pb.Op)
250+
allOps := make(map[digest.Digest]*op)
246251

247252
var lastDgst digest.Digest
248253

249254
for _, dt := range def.Def {
250-
var op pb.Op
251-
if err := op.UnmarshalVT(dt); err != nil {
255+
var pbop pb.Op
256+
if err := pbop.Unmarshal(dt); err != nil {
252257
return solver.Edge{}, errors.Wrap(err, "failed to parse llb proto op")
253258
}
254259
dgst := digest.FromBytes(dt)
255260
if polEngine != nil {
256-
if _, err := polEngine.Evaluate(ctx, op.GetSource()); err != nil {
261+
if _, err := polEngine.Evaluate(ctx, pbop.GetSource()); err != nil {
257262
return solver.Edge{}, errors.Wrap(err, "error evaluating the source policy")
258263
}
259264
}
260-
261-
allOps[dgst] = &op
265+
allOps[dgst] = &op{
266+
Op: &pbop,
267+
Metadata: def.Metadata[string(dgst)],
268+
}
262269
lastDgst = dgst
263270
}
264271

@@ -300,7 +307,7 @@ func loadLLB(ctx context.Context, def *pb.Definition, polEngine SourcePolicyEval
300307
return nil, errors.Errorf("invalid missing input digest %s", dgst)
301308
}
302309

303-
if err := opsutils.Validate(op); err != nil {
310+
if err := opsutils.Validate(op.Op); err != nil {
304311
return nil, err
305312
}
306313

solver/llbsolver/vertex_test.go

+10-10
Original file line numberDiff line numberDiff line change
@@ -38,20 +38,20 @@ func TestRecomputeDigests(t *testing.T) {
3838
require.NoError(t, err)
3939
op2Digest := digest.FromBytes(op2Data)
4040

41-
all := map[digest.Digest]*pb.Op{
42-
newDigest: op1,
43-
op2Digest: op2,
41+
all := map[digest.Digest]*op{
42+
newDigest: {Op: op1},
43+
op2Digest: {Op: op2},
4444
}
4545
visited := map[digest.Digest]digest.Digest{oldDigest: newDigest}
4646

4747
updated, err := recomputeDigests(context.Background(), all, visited, op2Digest)
4848
require.NoError(t, err)
4949
require.Len(t, visited, 2)
5050
require.Len(t, all, 2)
51-
assert.Equal(t, op1, all[newDigest])
51+
assert.Equal(t, op1, all[newDigest].Op)
5252
require.Equal(t, newDigest, visited[oldDigest])
53-
require.Equal(t, op1, all[newDigest])
54-
assert.Equal(t, op2, all[updated])
53+
require.Equal(t, op1, all[newDigest].Op)
54+
assert.Equal(t, op2, all[updated].Op)
5555
require.Equal(t, newDigest, digest.Digest(op2.Inputs[0].Digest))
5656
assert.NotEqual(t, op2Digest, updated)
5757
}
@@ -88,14 +88,14 @@ func TestIngestDigest(t *testing.T) {
8888
// Read the definition from the test data and ensure it uses the
8989
// canonical digests after recompute.
9090
var lastDgst digest.Digest
91-
all := map[digest.Digest]*pb.Op{}
91+
all := map[digest.Digest]*op{}
9292
for _, in := range def.Def {
93-
op := new(pb.Op)
94-
err := op.Unmarshal(in)
93+
opNew := new(pb.Op)
94+
err := opNew.Unmarshal(in)
9595
require.NoError(t, err)
9696

9797
lastDgst = digest.FromBytes(in)
98-
all[lastDgst] = op
98+
all[lastDgst] = &op{Op: opNew}
9999
}
100100
fmt.Println(all, lastDgst)
101101

0 commit comments

Comments
 (0)