From 3946f3fc5d7e06c0e2c336cb9541566b92a459b9 Mon Sep 17 00:00:00 2001 From: Tom de Bruijn Date: Thu, 11 Apr 2024 13:20:09 +0200 Subject: [PATCH] Check redis-client gem version to prevent error Version 0.14.0 of the redis-client gem introduced the `@config` object we rely on in our instrumentation. Add a check using the version number to make sure we only include our instrumentation on versions that include this. This will avoid errors from occurring in the instrumentation itself. Fixes #1048 --- .changesets/check-redis-client-version.md | 6 +++++ lib/appsignal/hooks/redis_client.rb | 1 + spec/lib/appsignal/hooks/redis_client_spec.rb | 22 ++++++++++++++++--- 3 files changed, 26 insertions(+), 3 deletions(-) create mode 100644 .changesets/check-redis-client-version.md diff --git a/.changesets/check-redis-client-version.md b/.changesets/check-redis-client-version.md new file mode 100644 index 000000000..baf4e22b0 --- /dev/null +++ b/.changesets/check-redis-client-version.md @@ -0,0 +1,6 @@ +--- +bump: "patch" +type: "fix" +--- + +Check the redis-client gem version before installing instrumentation. This prevents errors from being raised on redis-client gem versions older than 0.14.0. diff --git a/lib/appsignal/hooks/redis_client.rb b/lib/appsignal/hooks/redis_client.rb index e6c137f4e..2fb5d8520 100644 --- a/lib/appsignal/hooks/redis_client.rb +++ b/lib/appsignal/hooks/redis_client.rb @@ -8,6 +8,7 @@ class RedisClientHook < Appsignal::Hooks::Hook def dependencies_present? defined?(::RedisClient) && + Gem::Version.new(::RedisClient::VERSION) >= Gem::Version.new("0.14.0") && Appsignal.config && Appsignal.config[:instrument_redis] end diff --git a/spec/lib/appsignal/hooks/redis_client_spec.rb b/spec/lib/appsignal/hooks/redis_client_spec.rb index 65147679c..21693a953 100644 --- a/spec/lib/appsignal/hooks/redis_client_spec.rb +++ b/spec/lib/appsignal/hooks/redis_client_spec.rb @@ -4,12 +4,28 @@ end if DependencyHelper.redis_client_present? - context "with redis_client" do + context "with redis-client" do context "with instrumentation enabled" do describe "#dependencies_present?" do subject { described_class.new.dependencies_present? } - it { is_expected.to be_truthy } + context "with gem version new than 0.14.0" do + before { stub_const("RedisClient::VERSION", "1.2.3") } + + it { is_expected.to be_truthy } + end + + context "with gem version 0.14.0" do + before { stub_const("RedisClient::VERSION", "0.14.0") } + + it { is_expected.to be_truthy } + end + + context "with gem version older than 0.14.0" do + before { stub_const("RedisClient::VERSION", "0.13.9") } + + it { is_expected.to be_falsy } + end end context "with rest-client gem" do @@ -211,7 +227,7 @@ def write(_commands) end end else - context "without redis" do + context "without redis-client" do describe "#dependencies_present?" do subject { described_class.new.dependencies_present? }