Assigner waits to get existing assignments from indexers #1116
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Context
If an indexer is offline when the assigner service starts, the assigner cannot read the existing assignments or preferences from that indexer. The assigner will not know what publishers are assigned to that indexer, resulting in assigning those publishers to other indexers as announcements from them arrive.
The assigner service needs to retry getting indexer assignments before assigning a publisher to an indexer, since that publisher may already be assigned to an offline indexer. This prevents over-assigning publishers to the indexer pool.
Fixes #1118
Proposed Changes
If the assigner starts without getting assignment information for all indexers in the pool, then it will recheck each time an announce message is received from an unassigned peer. If there are still indexers offline, the assigner assumes that the peer may be assigned to an offline indexer and reduces the required number of assignments by the number of indexers offline.
This may mean that an unassigned peer will not get assigned until indexer(s) come back online. It is necessary to prevent over-assigning publishers to the indexer pool.
Tests
Tests include starting with an indexer offline and testing that:
Revert Strategy
Reverting will return to the previous situation and may require resetting indexer assignments.