use correctly named error var

closes FOO-2236

TEST PLAN:
  1) make pulsar writes happen, and then fail
  2) errors that pile up are just the pulsar
     kind, no variable name errors

Change-Id: I167f232b691f78c7a95a9d209147331855332ce7
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/270667
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
Reviewed-by: Jacob Burroughs <jburroughs@instructure.com>
QA-Review: Ethan Vizitei <evizitei@instructure.com>
Product-Review: Ethan Vizitei <evizitei@instructure.com>
This commit is contained in:
Ethan Vizitei 2021-08-03 16:54:41 -05:00
parent 8675ccb46f
commit 980c1502a6
2 changed files with 32 additions and 21 deletions

View File

@ -162,7 +162,7 @@ module MessageBus
# context and reconnect. If we get a timeout again, that is NOT
# the problem, and we should let the error raise.
retries += 1
raise ex if retries > 1
raise e if retries > 1
Rails.logger.info "[AUA] Pulsar failure during message send, retrying..."
CanvasErrors.capture_exception(:message_bus, e, :warn)

View File

@ -21,33 +21,44 @@
require 'spec_helper'
describe MessageBus::AsyncProducer do
before(:each) do
skip("pulsar config required to test") unless MessageBus.enabled?
end
around(:each) do |example|
old_interval = MessageBus.worker_process_interval_lambda
old_queue_size = MessageBus.max_mem_queue_size_lambda
old_logger = MessageBus.logger
# let's not waste time with queue throttling in tests
MessageBus.worker_process_interval = -> { 0.01 }
MessageBus.max_mem_queue_size = -> { 10 }
MessageBus.logger = Rails.logger
example.run
ensure
MessageBus.worker_process_interval = old_interval unless old_interval.nil?
MessageBus.max_mem_queue_size_lambda = old_queue_size unless old_queue_size.nil?
MessageBus.logger = old_logger
describe "#produce_message error handling" do
it "re-raises errors correctly if they're not rescuable" do
Bundler.require(:pulsar)
producer = ::MessageBus::AsyncProducer.new(start_thread: false)
allow(MessageBus).to receive(:producer_for).and_raise(::Pulsar::Error::AlreadyClosed)
expect{ producer.send(:produce_message, ['a', 'b', 'c']) }.to raise_error(::Pulsar::Error::AlreadyClosed)
end
end
after(:each) do
MessageBus.reset!
end
let(:producer){ MessageBus::AsyncProducer.new(start_thread: false) }
let(:namespace){ "test-only" }
describe "push" do
around(:each) do |example|
old_interval = MessageBus.worker_process_interval_lambda
old_queue_size = MessageBus.max_mem_queue_size_lambda
old_logger = MessageBus.logger
# let's not waste time with queue throttling in tests
MessageBus.worker_process_interval = -> { 0.01 }
MessageBus.max_mem_queue_size = -> { 10 }
MessageBus.logger = Rails.logger
example.run
ensure
MessageBus.worker_process_interval = old_interval unless old_interval.nil?
MessageBus.max_mem_queue_size_lambda = old_queue_size unless old_queue_size.nil?
MessageBus.logger = old_logger
end
after(:each) do
MessageBus.reset!
end
let(:producer){ MessageBus::AsyncProducer.new(start_thread: false) }
let(:namespace){ "test-only" }
it "pushes onto the queue but does not execute" do
topic_name = "lazily-created-topic-#{SecureRandom.hex(16)}"
subscription_name = "subscription-#{SecureRandom.hex(4)}"