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.
What type of PR is this?
Other
What does this PR do? Why is it needed?
Throughout the whole time while the validator client is running, it is connected to a beacon node from one and the same network. Although the genesis time of this network is fixed, we request it from the beacon node many times over and over again, which is wasteful, This PR uses a sync primitive called
Once
to make sure that we perform only one API request (allowing another call if the previous failed). We then store the result of this request in a struct field and return it immediately from further invocations ofGetGenesis
.The result of this change is clearly visible in the below picture, The blue line marks the point at which a validator client running 32 keys was restarted with this PR's changes. For 1024 keys we currently make as many as 7 requests per second. After the change, assuming no errors when executing the API call, the number of requests is always 1 regardless of the number of keys.