etcdserver: Move version monitor logic to separate module #13132
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.
When working on version downgrade I noticed that logic responsible for managing versions is spread all over etcdserver module. As logic is spread around it was never tested together leading to errors like described in #11716 (comment) where cluster version monitor didn't work well with downgrade monitor.
To ensure that downgrades are well tested and working correctly we need one place to all logic together. This PR is a first step in this direction. It moves downgrade and version monitor logic to a separate module. We define an interface over etcdServer that will allow this logic to manipulate version, but also stub backend and member versions in future so we can simulate step by step upgrade process. To avoid exposing version change logic publicly I have created an adapter struct that implements the interface, but is not available outside of module.