Skip to content

Commit 01271e4

Browse files
authoredMar 7, 2025··
fix: add cancel context for the parallel build flow (#110)
Signed-off-by: chlins <chlins.zhang@gmail.com>
1 parent eb49946 commit 01271e4

File tree

5 files changed

+21
-11
lines changed

5 files changed

+21
-11
lines changed
 

‎pkg/backend/processor/base.go

+17-7
Original file line numberDiff line numberDiff line change
@@ -72,25 +72,36 @@ func (b *base) Process(ctx context.Context, builder build.Builder, workDir strin
7272
var (
7373
idx atomic.Int64
7474
mu sync.Mutex
75-
eg errgroup.Group
75+
eg *errgroup.Group
7676
descriptors []ocispec.Descriptor
7777
)
7878

79+
total := int64(len(matchedPaths))
80+
sm := ysmrr.NewSpinnerManager()
81+
sm.Start()
82+
defer sm.Stop()
83+
84+
// Initialize errgroup with a context can be canceled.
85+
ctx, cancel := context.WithCancel(ctx)
86+
defer cancel()
87+
eg, ctx = errgroup.WithContext(ctx)
88+
7989
// Set default concurrency limit to 1 if not specified.
8090
if baseOpts.concurrency > 0 {
8191
eg.SetLimit(baseOpts.concurrency)
8292
} else {
8393
eg.SetLimit(1)
8494
}
8595

86-
total := int64(len(matchedPaths))
87-
sm := ysmrr.NewSpinnerManager()
88-
sm.Start()
89-
9096
for _, path := range matchedPaths {
97+
if ctx.Err() != nil {
98+
break
99+
}
100+
91101
eg.Go(func() error {
92102
relPath, err := filepath.Rel(absWorkDir, path)
93103
if err != nil {
104+
cancel()
94105
return err
95106
}
96107

@@ -100,6 +111,7 @@ func (b *base) Process(ctx context.Context, builder build.Builder, workDir strin
100111
desc, err := builder.BuildLayer(ctx, b.mediaType, workDir, path)
101112
if err != nil {
102113
sp.ErrorWithMessagef("Failed to build blob %s: %v", relPath, err)
114+
cancel()
103115
return err
104116
}
105117

@@ -117,8 +129,6 @@ func (b *base) Process(ctx context.Context, builder build.Builder, workDir strin
117129
return nil, err
118130
}
119131

120-
sm.Stop()
121-
122132
sort.Slice(descriptors, func(i int, j int) bool {
123133
// Sort by filepath by default.
124134
var pathI, pathJ string

‎pkg/backend/processor/code_test.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ func (s *codeProcessorSuite) TestName() {
5858

5959
func (s *codeProcessorSuite) TestProcess() {
6060
ctx := context.Background()
61-
s.mockBuilder.On("BuildLayer", ctx, mock.Anything, mock.Anything, mock.Anything).Return(ocispec.Descriptor{
61+
s.mockBuilder.On("BuildLayer", mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return(ocispec.Descriptor{
6262
Digest: godigest.Digest("sha256:1234567890abcdef"),
6363
Size: int64(1024),
6464
Annotations: map[string]string{

‎pkg/backend/processor/doc_test.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ func (s *docProcessorSuite) TestName() {
5858

5959
func (s *docProcessorSuite) TestProcess() {
6060
ctx := context.Background()
61-
s.mockBuilder.On("BuildLayer", ctx, mock.Anything, mock.Anything, mock.Anything).Return(ocispec.Descriptor{
61+
s.mockBuilder.On("BuildLayer", mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return(ocispec.Descriptor{
6262
Digest: godigest.Digest("sha256:1234567890abcdef"),
6363
Size: int64(1024),
6464
Annotations: map[string]string{

‎pkg/backend/processor/model_config_test.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ func (s *modelConfigProcessorSuite) TestName() {
5858

5959
func (s *modelConfigProcessorSuite) TestProcess() {
6060
ctx := context.Background()
61-
s.mockBuilder.On("BuildLayer", ctx, mock.Anything, mock.Anything, mock.Anything).Return(ocispec.Descriptor{
61+
s.mockBuilder.On("BuildLayer", mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return(ocispec.Descriptor{
6262
Digest: godigest.Digest("sha256:1234567890abcdef"),
6363
Size: int64(1024),
6464
Annotations: map[string]string{

‎pkg/backend/processor/model_test.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ func (s *modelProcessorSuite) TestName() {
5858

5959
func (s *modelProcessorSuite) TestProcess() {
6060
ctx := context.Background()
61-
s.mockBuilder.On("BuildLayer", ctx, mock.Anything, mock.Anything, mock.Anything).Return(ocispec.Descriptor{
61+
s.mockBuilder.On("BuildLayer", mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return(ocispec.Descriptor{
6262
Digest: godigest.Digest("sha256:1234567890abcdef"),
6363
Size: int64(1024),
6464
Annotations: map[string]string{

0 commit comments

Comments
 (0)
Please sign in to comment.