Don't break memcached.getMulti with instrumentation #190
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.
Internally to
memcached.getMulti
, thememcached.command
method is called with a second argument to force a particular server. Thememcached
instrumentation is currently failing to pass on that parameter, which causes the library to send thegetMulti
request to only one server, which surfaces as apparent cache misses for any key not on that server.This is pretty insidious since adding the agent to an existing application that was already using
memcached.getMulti
actually worsens performance (by introducing extra cache misses) but doesn't raise any obvious error to indicate that something is up.This patch fixes the issue by passing on any additional
memcached.command
arguments verbatim to the wrapped implementation.In order to test this I had to introduce a second memcached server to the integration test. What I have written here works for me having manually started up a second server, but I don't have docker installed and thus I didn't update the Makefile to start up that second memcached server.