Always offset the successive broadcasts based on current time #353
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.
The alarming system is used to schedule successive rebroadcasts should the conditions permit rebroadcasting messages. The alarming system works using absolute time. This means if a node is busy with other things, e.g. processing queued messages, an alarm might not fire at absolute specified time.
Apart from the initial rebroadcast all other successive rebroadcast alarms are offset based on the previous rebroadcast timeout. This means if the triggering of an alarm is delayed for whatever reason the absolute rate at which rebroadcast happens remains constant. This can result in unnecessary message rebroadcast and eventual saturation of message queue by repeated rebroadcasts.
The changes here avoid this issue by using the current host time to schedule the next rebroadcast after one rebroadcast is done. This means the rate of rebroadcasted messages remains relative to the host's current time, and removes sensitivity to discrepancy between the time at which an alarm is set vs the time at which it fires.