refactor: allow services to be initialized serially #2021
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.
This commit modifies the start up behavior. It refactors the service lifecycle management, replacing the Start and Stop methods with
Init
: used to initiliaze a service and can assume it isn't called from go routines and must be called beforeRun
.Run
: Runs the service and blocks until context is cancelled or an error is encounteredShutdown
: method is the cleanup and indicates that you can't callRun
afterShutdown
.This change aims to separate initialization which is run serially and allows services to initialize without worrying about thread-safety. I.E. Its okay for an Init() to call another Init().
Thus, this change separates initialization, runtime, and cleanup phases for better clarity and control.
Tests are updated keep up with the change.