it 'handles many writers trying to update' do
writers = 100
updated_at_times = generate_n_times_between(yesterday, now, writers)
in_parallel_options = {
times: writers,
concurrency: writers / 5,
args: updated_at_times.shuffle
}
results = in_parallel(in_parallel_options) do |connection, updated_at|
upsert(connection, 'John', '
[email protected]', updated_at)
end
expect(results).to have(writers).items
successful_writes, failed_writes = results.partition do |result|
result[:status] == :success
end
expect(successful_writes).to have_at_least(1).item
with_db_connection do |connection|
people = all_people(connection)
expect(people.size).to eq(1)
row = people.first
expect(row[:vendor_name]).to eq('John')
expect(row[:vendor_email]).to eq('
[email protected]')
expect(row[:vendor_updated_at]).to eq(updated_at_times.max)
end
end