Skip to content

Commit ec39add

Browse files
committed
llbsolver: fix recompute test and avoid struct copy
Signed-off-by: Tonis Tiigi <[email protected]> (cherry picked from commit d1a3df3)
1 parent 64293f9 commit ec39add

File tree

2 files changed

+21
-23
lines changed

2 files changed

+21
-23
lines changed

solver/llbsolver/vertex.go

+11-13
Original file line numberDiff line numberDiff line change
@@ -156,7 +156,7 @@ func (dpc *detectPrunedCacheID) Load(op *pb.Op, md *pb.OpMetadata, opt *solver.V
156156

157157
func Load(ctx context.Context, def *pb.Definition, polEngine SourcePolicyEvaluator, opts ...LoadOpt) (solver.Edge, error) {
158158
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...)
159+
vtx, err := newVertex(dgst, op.Op, op.Metadata, load, opts...)
160160
if err != nil {
161161
return nil, err
162162
}
@@ -234,15 +234,12 @@ func recomputeDigests(ctx context.Context, all map[digest.Digest]*op, visited ma
234234
return newDgst, nil
235235
}
236236

237+
// op is a private wrapper around pb.Op that includes its metadata.
237238
type op struct {
238-
pb.Op
239+
*pb.Op
239240
Metadata *pb.OpMetadata
240241
}
241242

242-
func (o *op) Unmarshal(data []byte) error {
243-
return o.Op.UnmarshalVT(data)
244-
}
245-
246243
// loadLLB loads LLB.
247244
// fn is executed sequentially.
248245
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) {
@@ -255,19 +252,20 @@ func loadLLB(ctx context.Context, def *pb.Definition, polEngine SourcePolicyEval
255252
var lastDgst digest.Digest
256253

257254
for _, dt := range def.Def {
258-
var op op
259-
if err := op.Unmarshal(dt); err != nil {
255+
var pbop pb.Op
256+
if err := pbop.Unmarshal(dt); err != nil {
260257
return solver.Edge{}, errors.Wrap(err, "failed to parse llb proto op")
261258
}
262259
dgst := digest.FromBytes(dt)
263260
if polEngine != nil {
264-
if _, err := polEngine.Evaluate(ctx, op.GetSource()); err != nil {
261+
if _, err := polEngine.Evaluate(ctx, pbop.GetSource()); err != nil {
265262
return solver.Edge{}, errors.Wrap(err, "error evaluating the source policy")
266263
}
267264
}
268-
op.Metadata = def.Metadata[string(dgst)]
269-
270-
allOps[dgst] = &op
265+
allOps[dgst] = &op{
266+
Op: &pbop,
267+
Metadata: def.Metadata[string(dgst)],
268+
}
271269
lastDgst = dgst
272270
}
273271

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

312-
if err := opsutils.Validate(&op.Op); err != nil {
310+
if err := opsutils.Validate(op.Op); err != nil {
313311
return nil, err
314312
}
315313

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)