Fix live events on exit bug

This should ensure we capture live events on exit correctly.

Test Plan:
 - clear your dev logs on your canvas
 - start canvas, make some live events calls
 - stop canvas, grep your dev logs for live events output
  - should not see anything that is an error

Change-Id: I5faf89eb1b3d288287978680195a3fe3c0c35eb5
Reviewed-on: https://gerrit.instructure.com/212483
Tested-by: Jenkins
Reviewed-by: Weston Dransfield <wdransfield@instructure.com>
QA-Review: Weston Dransfield <wdransfield@instructure.com>
Product-Review: Marc Phillips <mphillips@instructure.com>
This commit is contained in:
Marc Phillips 2019-10-08 13:59:34 -06:00
parent ee111998d2
commit 1fb0fcf51a
2 changed files with 3 additions and 2 deletions

View File

@ -95,7 +95,7 @@ module LiveEvents
begin begin
# r will be nil on first pass # r will be nil on first pass
records = [r].compact records = [r].compact
total_bytes = r&.fetch(:total_bytes) || 0 total_bytes = (r.is_a?(Hash) && r[:total_bytes]) || 0
while @queue.size > 0 && total_bytes < MAX_BYTE_THRESHOLD while @queue.size > 0 && total_bytes < MAX_BYTE_THRESHOLD
r = @queue.pop r = @queue.pop
break if r == :stop break if r == :stop

View File

@ -20,7 +20,7 @@ require 'spec_helper'
describe LiveEvents::AsyncWorker do describe LiveEvents::AsyncWorker do
let(:put_records_return) { [] } let(:put_records_return) { [] }
let(:stream_client) { double(stream_name: stream_name) } let(:stream_client) { double(stream_name: stream_name, put_records: OpenStruct.new(records: [], error_code: nil, error_message: nil)) }
let(:stream_name) { 'stream_name_x' } let(:stream_name) { 'stream_name_x' }
let(:event_name) { 'event_name' } let(:event_name) { 'event_name' }
let(:event) do let(:event) do
@ -139,6 +139,7 @@ describe LiveEvents::AsyncWorker do
it "should drain the queue" do it "should drain the queue" do
@worker.push(event, partition_key) @worker.push(event, partition_key)
expect(@worker).to receive(:at_exit).and_yield expect(@worker).to receive(:at_exit).and_yield
expect(LiveEvents.logger).not_to receive(:error)
@worker.start! @worker.start!
@worker.send(:at_exit) @worker.send(:at_exit)
end end