don't count ignored redis errors in stats

refs CNVS-15570

test plan: trigger an ignored redis error, such as running
`Canvas.redis.renamenx('no-such-key', 'new-key')` in console, and verify
that rails doesn't log a 'Failure handling redis' message, or send
anything to statsd.

Change-Id: Ie4480fcf053d626ba8dbdf26672b18815267fa86
Reviewed-on: https://gerrit.instructure.com/41805
Reviewed-by: Cody Cutrer <cody@instructure.com>
Tested-by: Jenkins <jenkins@instructure.com>
Product-Review: Brian Palmer <brianp@instructure.com>
QA-Review: Brian Palmer <brianp@instructure.com>
This commit is contained in:
Brian Palmer 2014-09-25 15:40:39 -06:00
parent fc0d89c3d8
commit 71f0ea203b
2 changed files with 6 additions and 4 deletions

View File

@ -49,10 +49,6 @@ module Canvas::Redis
raise reply if reply.is_a?(Exception)
reply
rescue ::Redis::BaseConnectionError, SystemCallError, ::Redis::CommandError => e
CanvasStatsd::Statsd.increment("redis.errors.all")
CanvasStatsd::Statsd.increment("redis.errors.#{CanvasStatsd::Statsd.escape(redis_name)}")
Rails.logger.error "Failure handling redis command on #{redis_name}: #{e.inspect}"
# We want to rescue errors such as "max number of clients reached", but not
# actual logic errors such as trying to evalsha a script that doesn't
# exist.
@ -62,6 +58,10 @@ module Canvas::Redis
raise
end
CanvasStatsd::Statsd.increment("redis.errors.all")
CanvasStatsd::Statsd.increment("redis.errors.#{CanvasStatsd::Statsd.escape(redis_name)}")
Rails.logger.error "Failure handling redis command on #{redis_name}: #{e.inspect}"
if self.ignore_redis_failures?
ErrorReport.log_exception(:redis, e)
last_redis_failure[redis_name] = Time.now

View File

@ -66,6 +66,8 @@ describe "Canvas::Redis" do
end
it "should pass through other command errors" do
CanvasStatsd::Statsd.expects(:increment).never
Redis::Client.any_instance.expects(:write).raises(Redis::CommandError.new("NOSCRIPT No matching script. Please use EVAL.")).once
expect { Canvas.redis.evalsha('xxx') }.to raise_error(Redis::CommandError)