• Patrick Steinhardt's avatar
    git: Stop calling Gitaly's Cleanup RPC · 9a63b10c
    Patrick Steinhardt authored
    Historically, Gitaly easily ended up in states where the repository is
    in a state such that many different Git commands failed. This is why
    Gitaly provides a Cleanup RPC that cleans up any such data structures
    which are known to cause problems, and we call it in many different
    places.
    
    There had been two main usecases for this:
    
        - Git is known to leave behind corrupted references in case of a
          hard shutdown because it doesn't fsync(3p) data to disk before
          renaming loose references into place. Such broken references may
          cause Git commands to fail which try to read them, and as such
          Gitaly used to perform housekeeping tasks where it walked through
          the repository to clean up any such corrupt references. Gitaly had
          to eventually remove this functionality from Cleanup though: in
          repositories hosted on NFS this was causing significant latency
          and thus caused timeouts. We thus don't do this anymore since
          7a1d224d0 (repository: Remove housekeeping from Cleanup RPC,
          2021-05-17).
    
        - Many of Gitaly's RPCs used to create worktrees to perform various
          operations. In some cases worktrees were pruned, but left behind
          broken references which as a result again caused corrupted
          references. The Cleanup RPC thus prunes any such per-worktree
          references and cleans up pointers to already-removed worktrees.
          Gitaly has since converted all RPCs except UserApplyPatch to not
          use worktrees anymore, and this remaining RPC is effectively
          unused: this week we had two calls of it across all of gitlab.com.
    
    It is thus safe to say that the Cleanup RPC is effectively useless and
    doesn't do anything. It doesn't clean up corrupted references, and
    because we don't create worktrees we wouldn't ever need to clean them up
    either. Furthermore, both of those actions are performed by other RPCs,
    namely GarbageCollect and OptimizeRepository. The former one is
    frequently executed by Rails, while the latter one is automatically
    executed during our daily maintenance window on all repositories.
    
    Let's thus stop calling Cleanup altogether such that its RPC can be
    properly deprecated and removed in Gitaly.
    
    Changelog: removed
    9a63b10c
repository_spec.rb 79.1 KB