Fixes #3087: Search taskbars cause DeadLocks.
This commit is contained in:
parent
899a4d887f
commit
ee1c4677ea
3 changed files with 54 additions and 0 deletions
|
@ -88,6 +88,7 @@ class Taskbar < ApplicationModel
|
||||||
end
|
end
|
||||||
|
|
||||||
def update_preferences_infos
|
def update_preferences_infos
|
||||||
|
return true if key == 'Search'
|
||||||
return true if local_update
|
return true if local_update
|
||||||
|
|
||||||
# find other same open tasks
|
# find other same open tasks
|
||||||
|
|
|
@ -0,0 +1,14 @@
|
||||||
|
class Issue3087SearchTaskbarDeadlock < ActiveRecord::Migration[5.2]
|
||||||
|
def change
|
||||||
|
Taskbar.where(key: 'Search').find_each do |taskbar|
|
||||||
|
next if taskbar.preferences.blank?
|
||||||
|
next if taskbar.preferences[:tasks].blank?
|
||||||
|
|
||||||
|
taskbar.preferences.delete(:tasks)
|
||||||
|
|
||||||
|
taskbar.save!
|
||||||
|
rescue => e
|
||||||
|
Rails.logger.error e
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
|
@ -2,6 +2,45 @@ require 'rails_helper'
|
||||||
|
|
||||||
RSpec.describe Taskbar do
|
RSpec.describe Taskbar do
|
||||||
|
|
||||||
|
context 'key = Search' do
|
||||||
|
|
||||||
|
context 'multiple taskbars', current_user_id: 1 do
|
||||||
|
let(:key) { 'Search' }
|
||||||
|
let(:other_taskbar) { create(:taskbar, key: key) }
|
||||||
|
|
||||||
|
describe '#create' do
|
||||||
|
|
||||||
|
it "doesn't update other taskbar" do
|
||||||
|
expect do
|
||||||
|
create(:taskbar, key: key)
|
||||||
|
end.not_to change { other_taskbar.reload.updated_at }
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
context 'existing taskbar' do
|
||||||
|
|
||||||
|
subject(:taskbar) { create(:taskbar, key: key) }
|
||||||
|
|
||||||
|
describe '#update' do
|
||||||
|
|
||||||
|
it "doesn't update other taskbar" do
|
||||||
|
expect do
|
||||||
|
taskbar.update!(state: { foo: :bar })
|
||||||
|
end.not_to change { other_taskbar.reload.updated_at }
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
describe '#destroy' do
|
||||||
|
it "doesn't update other taskbar" do
|
||||||
|
expect do
|
||||||
|
taskbar.destroy!
|
||||||
|
end.not_to change { other_taskbar.reload.updated_at }
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
context 'single creation' do
|
context 'single creation' do
|
||||||
|
|
||||||
let(:taskbar) do
|
let(:taskbar) do
|
||||||
|
|
Loading…
Reference in a new issue