Elasticsearch gaps handling for blobs and commits
When an elasticsearch gap occurs (see https://gitlab.com/gitlab-org/gitlab-ee/issues/5299), we want to ensure code pushes are index when search indexing functionality is turned back on.
Currently code push indexing just covers that code push itself. The idea is to use IndexStatus#last_commit to just cover all of the gaps.
For repositories, we do store state - the commit that was last indexed. As long as that commit hasn't been force-pushed away on the default branch, we can always just schedule another reindex from that commit to current master (a no-op if nothing has changed). So, the only problem remaining is commits and blobs for those repositories that have been removed in the interim. These should be detected and deleted from the elasticsearch index
Related proposal: https://gitlab.com/gitlab-org/gitlab-ee/issues/5299#note_146490698