Single implementation for idempotency cache

Everyone can contribute. Help move this issue forward while earning points, leveling up and collecting rewards.

We create IdempotencyCache for the purposes of ensuring the updates to the hosted runner usage are idempotent when the worker retries. !180449 (diffs)

However, there are a few improvements we can make:

  1. Shared implementation: We should share the implementation with Ci::Minutes::UpdateProjectAndNamespaceUsageService.
    • I'm not doing it in !180449 (merged) because changes to this area are risky and it should be properly flagged.
Edited by 🤖 GitLab Bot 🤖