Skip to content

Commit

Permalink
Merge pull request #295 from etalab/revert-293-fix/deadlocks
Browse files Browse the repository at this point in the history
Revert "Fix/deadlocks"
  • Loading branch information
Alexis Leclerc authored Apr 19, 2021
2 parents 5a643ba + f021128 commit d158904
Show file tree
Hide file tree
Showing 6 changed files with 11 additions and 69 deletions.
1 change: 0 additions & 1 deletion Gemfile
Original file line number Diff line number Diff line change
Expand Up @@ -89,7 +89,6 @@ group :development, :test do
end

group :test do
gem 'database_cleaner-active_record'
gem 'fuubar'
gem 'simplecov'
gem 'simplecov-console'
Expand Down
7 changes: 1 addition & 6 deletions Gemfile.lock
Original file line number Diff line number Diff line change
Expand Up @@ -72,10 +72,6 @@ GEM
crack (0.4.3)
safe_yaml (~> 1.0.0)
crass (1.0.6)
database_cleaner-active_record (2.0.0)
activerecord (>= 5.a)
database_cleaner-core (~> 2.0.0)
database_cleaner-core (2.0.1)
declarative (0.0.10)
declarative-builder (0.1.0)
declarative-option (< 0.2.0)
Expand Down Expand Up @@ -411,7 +407,6 @@ DEPENDENCIES
byebug
colorize
connection_pool (~> 2.2)
database_cleaner-active_record
factory_bot_rails
fuubar
growl
Expand Down Expand Up @@ -467,4 +462,4 @@ DEPENDENCIES
whirly

BUNDLED WITH
2.2.4
2.1.4
25 changes: 3 additions & 22 deletions app/concepts/stock/task/create_associations.rb
Original file line number Diff line number Diff line change
Expand Up @@ -24,40 +24,21 @@ def log_transaction_failed(_, error:, logger:, **)

private

# rubocop:disable Metrics/MethodLength
def execute_transaction(ctx)
ctx[:loop_count] = 0

loop do
pg_result = ActiveRecord::Base.connection.execute(sql)
updated_rows_count = pg_result.cmd_tuples
break if updated_rows_count.zero?

ctx[:loop_count] += 1
end

ctx[:loop_count].positive?
rescue ActiveRecord::ActiveRecordError, StandardError
ActiveRecord::Base.connection.execute(sql)
rescue ActiveRecord::ActiveRecordError
ctx[:error] = $ERROR_INFO
false
end
# rubocop:enable Metrics/MethodLength

def sql
<<-END_SQL
UPDATE etablissements_tmp
SET unite_legale_id = unites_legales_tmp.id
FROM unites_legales_tmp
WHERE etablissements_tmp.id IN (
SELECT id from etablissements_tmp where unite_legale_id IS NULL LIMIT #{request_limit}
)
AND etablissements_tmp.siren = unites_legales_tmp.siren
WHERE etablissements_tmp.siren = unites_legales_tmp.siren
END_SQL
end

def request_limit
5_000
end
end
end
end
12 changes: 1 addition & 11 deletions spec/concepts/stock/operation/post_import_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -61,18 +61,8 @@
it_behaves_like 'not doing anything'
end

context 'when both imports are COMPLETED', use_transactional_fixtures: false do
let(:siren_1) { '005880034' }

context 'when both imports are COMPLETED' do
before do
wrap_with_table_renamed(UniteLegale) do
create :unite_legale, siren: siren_1
end

wrap_with_table_renamed(Etablissement) do
create :etablissement, siren: siren_1
end

create :stock_etablissement, :completed
create :stock_unite_legale, :completed
end
Expand Down
27 changes: 6 additions & 21 deletions spec/concepts/stock/task/create_associations_spec.rb
Original file line number Diff line number Diff line change
@@ -1,26 +1,20 @@
require 'rails_helper'

describe Stock::Task::CreateAssociations, use_transactional_fixtures: false do
describe Stock::Task::CreateAssociations do
subject { described_class.call logger: logger }

let(:logger) { instance_spy Logger }
let(:siren_1) { '005880034' }
let(:siren_2) { '005880035' }
let(:siren_3) { '005880036' }
let(:siren) { '005880034' }

let!(:unite_legale) do
wrap_with_table_renamed(UniteLegale) do
create :unite_legale, siren: siren_1
create :unite_legale, siren: siren_2
create :unite_legale, siren: siren_3
create :unite_legale, siren: siren
end
end

let!(:etablissement) do
wrap_with_table_renamed(Etablissement) do
create :etablissement, siren: siren_1
create :etablissement, siren: siren_2
create :etablissement, siren: siren_3
create :etablissement, siren: siren
end
end

Expand All @@ -39,18 +33,9 @@
it 'created the association for etablissement' do
subject
etab = Etablissement.new(
get_raw_data('etablissements_tmp').find { |e| e['siren'] == siren_1 }
get_raw_data('etablissements_tmp').first
)
entreprise = UniteLegale.new(
get_raw_data('unites_legales_tmp').find { |u| u['siren'] == siren_1 }
)
expect(etab.unite_legale_id).to eq entreprise.id
end

it 'should have done 2 loop for the associations' do
allow_any_instance_of(described_class).to receive(:request_limit).and_return 2
subject
expect(subject[:loop_count]).to eq 2
expect(etab.unite_legale_id).to eq unite_legale.id
end

context 'when association failed' do
Expand Down
8 changes: 0 additions & 8 deletions spec/rails_helper.rb
Original file line number Diff line number Diff line change
Expand Up @@ -41,14 +41,6 @@
# instead of true.
config.use_transactional_fixtures = true

config.around(:each, use_transactional_fixtures: false) do |example|
self.use_transactional_fixtures = false
example.run
self.use_transactional_fixtures = true

DatabaseCleaner.clean_with(:deletion)
end

# RSpec Rails can automatically mix in different behaviours to your tests
# based on their file location, for example enabling you to call `get` and
# `post` in specs under `spec/controllers`.
Expand Down

0 comments on commit d158904

Please sign in to comment.