From 7188a6ac3380fd4e01f7f139ac597e3fecd69faf Mon Sep 17 00:00:00 2001 From: Stephanie Hingtgen Date: Sat, 4 Oct 2025 15:53:31 -0600 Subject: [PATCH] Provisioning: Fix pull stuck in pending (#112032) --- pkg/registry/apis/provisioning/jobs/sync/worker.go | 10 ++++++---- .../apis/provisioning/jobs/sync/worker_test.go | 14 ++++++++++++-- 2 files changed, 18 insertions(+), 6 deletions(-) diff --git a/pkg/registry/apis/provisioning/jobs/sync/worker.go b/pkg/registry/apis/provisioning/jobs/sync/worker.go index 09ed5859cc7..c5df4553e04 100644 --- a/pkg/registry/apis/provisioning/jobs/sync/worker.go +++ b/pkg/registry/apis/provisioning/jobs/sync/worker.go @@ -139,15 +139,17 @@ func (r *SyncWorker) Process(ctx context.Context, repo repository.Repository, jo if err != nil { setupSpan.End() logger.Error("failed to create repository resources client", "error", err) - err = fmt.Errorf("create repository resources client: %w", err) - return tracing.Error(span, err) + setupError := fmt.Errorf("create repository resources client: %w", err) + progress.Complete(ctx, setupError) + return tracing.Error(span, setupError) } clients, err := r.clients.Clients(setupCtx, cfg.Namespace) if err != nil { setupSpan.End() logger.Error("failed to get clients for the repository", "error", err) - err = fmt.Errorf("get clients for %s: %w", cfg.Name, err) - return tracing.Error(span, err) + setupError := fmt.Errorf("get clients for %s: %w", cfg.Name, err) + progress.Complete(ctx, setupError) + return tracing.Error(span, setupError) } setupSpan.End() diff --git a/pkg/registry/apis/provisioning/jobs/sync/worker_test.go b/pkg/registry/apis/provisioning/jobs/sync/worker_test.go index 090d4deac87..bd8b094b4f6 100644 --- a/pkg/registry/apis/provisioning/jobs/sync/worker_test.go +++ b/pkg/registry/apis/provisioning/jobs/sync/worker_test.go @@ -153,10 +153,15 @@ func TestSyncWorker_Process(t *testing.T) { // Initial status update succeeds pr.On("SetMessage", mock.Anything, "update sync status at start").Return() - rpf.On("Execute", mock.Anything, repoConfig, mock.Anything).Return(nil) + rpf.On("Execute", mock.Anything, repoConfig, mock.Anything).Return(nil).Once() // Repository resources creation fails rrf.On("Client", mock.Anything, mock.Anything).Return(nil, errors.New("failed to create repository resources client")) + + // Progress.Complete should be called with the error + pr.On("Complete", mock.Anything, mock.MatchedBy(func(err error) bool { + return err != nil && err.Error() == "create repository resources client: failed to create repository resources client" + })).Return(provisioning.JobStatus{State: provisioning.JobStateError}) }, expectedError: "create repository resources client: failed to create repository resources client", }, @@ -185,13 +190,18 @@ func TestSyncWorker_Process(t *testing.T) { // Initial status update succeeds pr.On("SetMessage", mock.Anything, "update sync status at start").Return() - rpf.On("Execute", mock.Anything, repoConfig, mock.Anything).Return(nil) + rpf.On("Execute", mock.Anything, repoConfig, mock.Anything).Return(nil).Once() // Repository resources creation succeeds rrf.On("Client", mock.Anything, mock.Anything).Return(&resources.MockRepositoryResources{}, nil) // Getting clients for namespace fails cf.On("Clients", mock.Anything, "test-namespace").Return(nil, errors.New("failed to get clients")) + + // Progress.Complete should be called with the error + pr.On("Complete", mock.Anything, mock.MatchedBy(func(err error) bool { + return err != nil && err.Error() == "get clients for test-repo: failed to get clients" + })).Return(provisioning.JobStatus{State: provisioning.JobStateError}) }, expectedError: "get clients for test-repo: failed to get clients", },