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 pull request tries to fix the issue reported by #230
I don't know if it wasn't working from the start or something changed internally in Go runtime, but using internal
bytebuffer
to perform string concatenation without allocation is not working as intended.On the internal memory cache at a given time (it seems deterministic) the key get evicted resetting the value.
https://github.com/ulule/limiter/blob/master/drivers/store/memory/cache.go#L191-L194
I don't have the energy and motivation to dig this far inside go runtime to understand why.
(So if you want to contribute to the project and you're reading this, don't hesitate)
But I'm wondering if the key is not garbage collected inside the sync.Map (or something along those lines)
resulting in this behavior because I've check the produced slice and string and it doesn't seem to differ (content, length, capacity).
With this fix, we now have a performance penalty since we do an allocation for the key.
On the previous version:
On the newer version with this fix: