Retry pipeline creation on transient "Commit not found"

What does this MR do and why?

When a push (or merge commit) creates a pipeline, a transient Gitaly "Commit not found" during pipeline creation caused the pipeline to be silently dropped: no pipeline object, no user-facing error, and no Sidekiq retry. The sibling "Reference not found" path already self-heals via Sidekiq retry: 3, so the same underlying transient miss non-deterministically dropped or healed depending on which Gitaly lookup tripped the read-after-write window.

This MR makes "Commit not found" retryable the same way. The retry is scoped to the transient signature: execution only reaches the sha check after the earlier ref-exists guard has passed, so a nil sha here means the branch pointer resolves but the just-written commit it points at is not yet readable on the node serving the read. This is almost always a transient read-after-write miss, so genuinely-missing commits are not retried.

The change is gated behind the ci_create_pipeline_worker_retry_on_commit_not_found feature flag (default_enabled: false). #611223

References

Edited by Furkan Ayhan

Merge request reports

Loading