elixir-ecto / ecto

A toolkit for data mapping and language integrated query.
https://hexdocs.pm/ecto
Apache License 2.0
6.15k stars 1.43k forks source link

Application fails to compile due to deadlock with associations #2519

Closed supernintendo closed 6 years ago

supernintendo commented 6 years ago

Description

When updating my Ecto version from 2.1.2 to 2.2.10 my application fails to compile due to a deadlock between modules. All of the modules that are responsible for the failure appear to be compiling before the modules they depend on (i.e. associations) have finished compiling.

Environment

Current behavior

My application fails to compile with the following output:

== Compilation error on file web/models/major_appliances_form.ex ==
** (CompileError)  deadlocked waiting on module Haas.HomeAssessment
    (elixir) lib/code.ex:568: Code.ensure_compiled/1
    (elixir) lib/code.ex:586: Code.ensure_compiled?/1
    lib/ecto/association.ex:719: Ecto.Association.BelongsTo.after_compile_validation/2
    lib/ecto/schema.ex:1656: anonymous fn/4 in Ecto.Schema.__after_compile__/2
    (elixir) lib/enum.ex:1755: Enum."-reduce/3-lists^foldl/2-0-"/3
    lib/ecto/schema.ex:1654: Ecto.Schema.__after_compile__/2

== Compilation error on file web/models/home_assessment_sponsor.ex ==
** (CompileError)  deadlocked waiting on module Haas.HomeAssessment
    (elixir) lib/code.ex:568: Code.ensure_compiled/1
    (elixir) lib/code.ex:586: Code.ensure_compiled?/1
    lib/ecto/association.ex:719: Ecto.Association.BelongsTo.after_compile_validation/2
    lib/ecto/schema.ex:1656: anonymous fn/4 in Ecto.Schema.__after_compile__/2
    (elixir) lib/enum.ex:1755: Enum."-reduce/3-lists^foldl/2-0-"/3
    lib/ecto/schema.ex:1654: Ecto.Schema.__after_compile__/2

== Compilation error on file web/models/property_address.ex ==
** (CompileError)  deadlocked waiting on module Haas.HomeAssessment
    (elixir) lib/code.ex:568: Code.ensure_compiled/1
    (elixir) lib/code.ex:586: Code.ensure_compiled?/1
    lib/ecto/association.ex:719: Ecto.Association.BelongsTo.after_compile_validation/2
    lib/ecto/schema.ex:1656: anonymous fn/4 in Ecto.Schema.__after_compile__/2
    (elixir) lib/enum.ex:1755: Enum."-reduce/3-lists^foldl/2-0-"/3
    lib/ecto/schema.ex:1654: Ecto.Schema.__after_compile__/2

== Compilation error on file web/models/photo.ex ==
** (CompileError)  deadlocked waiting on module Haas.MasterBedroom
    (elixir) lib/code.ex:568: Code.ensure_compiled/1
    (elixir) lib/code.ex:586: Code.ensure_compiled?/1
    lib/ecto/association.ex:719: Ecto.Association.BelongsTo.after_compile_validation/2
    lib/ecto/schema.ex:1656: anonymous fn/4 in Ecto.Schema.__after_compile__/2
    (elixir) lib/enum.ex:1755: Enum."-reduce/3-lists^foldl/2-0-"/3
    lib/ecto/schema.ex:1654: Ecto.Schema.__after_compile__/2

== Compilation error on file web/models/utm.ex ==
** (CompileError)  deadlocked waiting on module Haas.HomeAssessment
    (elixir) lib/code.ex:568: Code.ensure_compiled/1
    (elixir) lib/code.ex:586: Code.ensure_compiled?/1
    lib/ecto/association.ex:719: Ecto.Association.BelongsTo.after_compile_validation/2
    lib/ecto/schema.ex:1656: anonymous fn/4 in Ecto.Schema.__after_compile__/2
    (elixir) lib/enum.ex:1755: Enum."-reduce/3-lists^foldl/2-0-"/3
    lib/ecto/schema.ex:1654: Ecto.Schema.__after_compile__/2

== Compilation error on file web/models/document.ex ==
** (CompileError)  deadlocked waiting on module Haas.HomeAssessment
    (elixir) lib/code.ex:568: Code.ensure_compiled/1
    (elixir) lib/code.ex:586: Code.ensure_compiled?/1
    lib/ecto/association.ex:719: Ecto.Association.BelongsTo.after_compile_validation/2
    lib/ecto/schema.ex:1656: anonymous fn/4 in Ecto.Schema.__after_compile__/2
    (elixir) lib/enum.ex:1755: Enum."-reduce/3-lists^foldl/2-0-"/3
    lib/ecto/schema.ex:1654: Ecto.Schema.__after_compile__/2

== Compilation error on file web/models/master_bedroom.ex ==
** (CompileError)  deadlocked waiting on module Haas.HomeAssessment
    (elixir) lib/code.ex:568: Code.ensure_compiled/1
    (elixir) lib/code.ex:586: Code.ensure_compiled?/1
    lib/ecto/association.ex:719: Ecto.Association.BelongsTo.after_compile_validation/2
    lib/ecto/schema.ex:1656: anonymous fn/4 in Ecto.Schema.__after_compile__/2
    (elixir) lib/enum.ex:1755: Enum."-reduce/3-lists^foldl/2-0-"/3
    lib/ecto/schema.ex:1654: Ecto.Schema.__after_compile__/2

== Compilation error on file web/models/sponsor.ex ==
** (CompileError)  deadlocked waiting on module Haas.HomeAssessmentSponsor
    (elixir) lib/code.ex:568: Code.ensure_compiled/1
    (elixir) lib/code.ex:586: Code.ensure_compiled?/1
    lib/ecto/association.ex:432: Ecto.Association.Has.after_compile_validation/2
    lib/ecto/schema.ex:1656: anonymous fn/4 in Ecto.Schema.__after_compile__/2
    (elixir) lib/enum.ex:1755: Enum."-reduce/3-lists^foldl/2-0-"/3
    lib/ecto/schema.ex:1654: Ecto.Schema.__after_compile__/2

== Compilation error on file web/models/simple_color.ex ==
** (CompileError)  deadlocked waiting on module Haas.Appliance
    (elixir) lib/code.ex:568: Code.ensure_compiled/1
    (elixir) lib/code.ex:586: Code.ensure_compiled?/1
    lib/ecto/association.ex:719: Ecto.Association.BelongsTo.after_compile_validation/2
    lib/ecto/schema.ex:1656: anonymous fn/4 in Ecto.Schema.__after_compile__/2
    (elixir) lib/enum.ex:1755: Enum."-reduce/3-lists^foldl/2-0-"/3
    lib/ecto/schema.ex:1654: Ecto.Schema.__after_compile__/2

== Compilation error on file web/models/living_room.ex ==
** (CompileError)  deadlocked waiting on module Haas.HomeAssessment
    (elixir) lib/code.ex:568: Code.ensure_compiled/1
    (elixir) lib/code.ex:586: Code.ensure_compiled?/1
    lib/ecto/association.ex:719: Ecto.Association.BelongsTo.after_compile_validation/2
    lib/ecto/schema.ex:1656: anonymous fn/4 in Ecto.Schema.__after_compile__/2
    (elixir) lib/enum.ex:1755: Enum."-reduce/3-lists^foldl/2-0-"/3
    lib/ecto/schema.ex:1654: Ecto.Schema.__after_compile__/2

== Compilation error on file web/models/appliance_photo.ex ==
** (CompileError)  deadlocked waiting on module Haas.Appliance
    (elixir) lib/code.ex:568: Code.ensure_compiled/1
    (elixir) lib/code.ex:586: Code.ensure_compiled?/1
    lib/ecto/association.ex:719: Ecto.Association.BelongsTo.after_compile_validation/2
    lib/ecto/schema.ex:1656: anonymous fn/4 in Ecto.Schema.__after_compile__/2
    (elixir) lib/enum.ex:1755: Enum."-reduce/3-lists^foldl/2-0-"/3
    lib/ecto/schema.ex:1654: Ecto.Schema.__after_compile__/2

== Compilation error on file web/models/scheduling_contact.ex ==
** (CompileError)  deadlocked waiting on module Haas.HomeAssessment
    (elixir) lib/code.ex:568: Code.ensure_compiled/1
    (elixir) lib/code.ex:586: Code.ensure_compiled?/1
    lib/ecto/association.ex:719: Ecto.Association.BelongsTo.after_compile_validation/2
    lib/ecto/schema.ex:1656: anonymous fn/4 in Ecto.Schema.__after_compile__/2
    (elixir) lib/enum.ex:1755: Enum."-reduce/3-lists^foldl/2-0-"/3
    lib/ecto/schema.ex:1654: Ecto.Schema.__after_compile__/2

== Compilation error on file web/models/dining_room.ex ==
** (CompileError)  deadlocked waiting on module Haas.HomeAssessment
    (elixir) lib/code.ex:568: Code.ensure_compiled/1
    (elixir) lib/code.ex:586: Code.ensure_compiled?/1
    lib/ecto/association.ex:719: Ecto.Association.BelongsTo.after_compile_validation/2
    lib/ecto/schema.ex:1656: anonymous fn/4 in Ecto.Schema.__after_compile__/2
    (elixir) lib/enum.ex:1755: Enum."-reduce/3-lists^foldl/2-0-"/3
    lib/ecto/schema.ex:1654: Ecto.Schema.__after_compile__/2

== Compilation error on file web/models/fixture.ex ==
** (CompileError)  deadlocked waiting on module Haas.Photo
    (elixir) lib/code.ex:568: Code.ensure_compiled/1
    (elixir) lib/code.ex:586: Code.ensure_compiled?/1
    lib/ecto/association.ex:432: Ecto.Association.Has.after_compile_validation/2
    lib/ecto/schema.ex:1656: anonymous fn/4 in Ecto.Schema.__after_compile__/2
    (elixir) lib/enum.ex:1755: Enum."-reduce/3-lists^foldl/2-0-"/3
    lib/ecto/schema.ex:1654: Ecto.Schema.__after_compile__/2

== Compilation error on file web/models/vendor_signup.ex ==
** (CompileError)  deadlocked waiting on module Haas.Photo
    (elixir) lib/code.ex:568: Code.ensure_compiled/1
    (elixir) lib/code.ex:586: Code.ensure_compiled?/1
    lib/ecto/association.ex:432: Ecto.Association.Has.after_compile_validation/2
    lib/ecto/schema.ex:1656: anonymous fn/4 in Ecto.Schema.__after_compile__/2
    (elixir) lib/enum.ex:1755: Enum."-reduce/3-lists^foldl/2-0-"/3
    lib/ecto/schema.ex:1654: Ecto.Schema.__after_compile__/2

== Compilation error on file web/models/water_heater.ex ==
** (CompileError)  deadlocked waiting on module Haas.Hvac
    (elixir) lib/code.ex:568: Code.ensure_compiled/1
    (elixir) lib/code.ex:586: Code.ensure_compiled?/1
    lib/ecto/association.ex:719: Ecto.Association.BelongsTo.after_compile_validation/2
    lib/ecto/schema.ex:1656: anonymous fn/4 in Ecto.Schema.__after_compile__/2
    (elixir) lib/enum.ex:1755: Enum."-reduce/3-lists^foldl/2-0-"/3
    lib/ecto/schema.ex:1654: Ecto.Schema.__after_compile__/2

== Compilation error on file web/models/space.ex ==
** (CompileError)  deadlocked waiting on module Haas.HomeAssessment
    (elixir) lib/code.ex:568: Code.ensure_compiled/1
    (elixir) lib/code.ex:586: Code.ensure_compiled?/1
    lib/ecto/association.ex:719: Ecto.Association.BelongsTo.after_compile_validation/2
    lib/ecto/schema.ex:1656: anonymous fn/4 in Ecto.Schema.__after_compile__/2
    (elixir) lib/enum.ex:1755: Enum."-reduce/3-lists^foldl/2-0-"/3
    lib/ecto/schema.ex:1654: Ecto.Schema.__after_compile__/2

== Compilation error on file web/models/master_bathroom.ex ==
** (CompileError)  deadlocked waiting on module Haas.HomeAssessment
    (elixir) lib/code.ex:568: Code.ensure_compiled/1
    (elixir) lib/code.ex:586: Code.ensure_compiled?/1
    lib/ecto/association.ex:719: Ecto.Association.BelongsTo.after_compile_validation/2
    lib/ecto/schema.ex:1656: anonymous fn/4 in Ecto.Schema.__after_compile__/2
    (elixir) lib/enum.ex:1755: Enum."-reduce/3-lists^foldl/2-0-"/3
    lib/ecto/schema.ex:1654: Ecto.Schema.__after_compile__/2

== Compilation error on file web/services/home_assessments/clone.ex ==
** (CompileError)  deadlocked waiting on module Haas.HomeAssessment
    web/services/home_assessments/clone.ex:6: (module)
    (stdlib) erl_eval.erl:670: :erl_eval.do_apply/6

== Compilation error on file web/models/user_event.ex ==
** (CompileError)  deadlocked waiting on module Haas.HomeAssessment
    (elixir) lib/code.ex:568: Code.ensure_compiled/1
    (elixir) lib/code.ex:586: Code.ensure_compiled?/1
    lib/ecto/association.ex:719: Ecto.Association.BelongsTo.after_compile_validation/2
    lib/ecto/schema.ex:1656: anonymous fn/4 in Ecto.Schema.__after_compile__/2
    (elixir) lib/enum.ex:1755: Enum."-reduce/3-lists^foldl/2-0-"/3
    lib/ecto/schema.ex:1654: Ecto.Schema.__after_compile__/2

== Compilation error on file web/models/sponsor_image.ex ==
** (CompileError)  deadlocked waiting on module Haas.Sponsor
    (elixir) lib/code.ex:568: Code.ensure_compiled/1
    (elixir) lib/code.ex:586: Code.ensure_compiled?/1
    lib/ecto/association.ex:719: Ecto.Association.BelongsTo.after_compile_validation/2
    lib/ecto/schema.ex:1656: anonymous fn/4 in Ecto.Schema.__after_compile__/2
    (elixir) lib/enum.ex:1755: Enum."-reduce/3-lists^foldl/2-0-"/3
    lib/ecto/schema.ex:1654: Ecto.Schema.__after_compile__/2

== Compilation error on file web/models/order_number.ex ==
** (CompileError)  deadlocked waiting on module Haas.HomeAssessment
    (elixir) lib/code.ex:568: Code.ensure_compiled/1
    (elixir) lib/code.ex:586: Code.ensure_compiled?/1
    lib/ecto/association.ex:719: Ecto.Association.BelongsTo.after_compile_validation/2
    lib/ecto/schema.ex:1656: anonymous fn/4 in Ecto.Schema.__after_compile__/2
    (elixir) lib/enum.ex:1755: Enum."-reduce/3-lists^foldl/2-0-"/3
    lib/ecto/schema.ex:1654: Ecto.Schema.__after_compile__/2

== Compilation error on file web/models/room_paint.ex ==
** (CompileError)  deadlocked waiting on module Haas.HomePaint
    (elixir) lib/code.ex:568: Code.ensure_compiled/1
    (elixir) lib/code.ex:586: Code.ensure_compiled?/1
    lib/ecto/association.ex:719: Ecto.Association.BelongsTo.after_compile_validation/2
    lib/ecto/schema.ex:1656: anonymous fn/4 in Ecto.Schema.__after_compile__/2
    (elixir) lib/enum.ex:1755: Enum."-reduce/3-lists^foldl/2-0-"/3
    lib/ecto/schema.ex:1654: Ecto.Schema.__after_compile__/2

== Compilation error on file web/models/home_assessment_primary_user.ex ==
** (CompileError)  deadlocked waiting on module Haas.HomeAssessment
    (elixir) lib/code.ex:568: Code.ensure_compiled/1
    (elixir) lib/code.ex:586: Code.ensure_compiled?/1
    lib/ecto/association.ex:719: Ecto.Association.BelongsTo.after_compile_validation/2
    lib/ecto/schema.ex:1656: anonymous fn/4 in Ecto.Schema.__after_compile__/2
    (elixir) lib/enum.ex:1755: Enum."-reduce/3-lists^foldl/2-0-"/3
    lib/ecto/schema.ex:1654: Ecto.Schema.__after_compile__/2

== Compilation error on file web/models/kitchen.ex ==
** (CompileError)  deadlocked waiting on module Haas.HomeAssessment
    (elixir) lib/code.ex:568: Code.ensure_compiled/1
    (elixir) lib/code.ex:586: Code.ensure_compiled?/1
    lib/ecto/association.ex:719: Ecto.Association.BelongsTo.after_compile_validation/2
    lib/ecto/schema.ex:1656: anonymous fn/4 in Ecto.Schema.__after_compile__/2
    (elixir) lib/enum.ex:1755: Enum."-reduce/3-lists^foldl/2-0-"/3
    lib/ecto/schema.ex:1654: Ecto.Schema.__after_compile__/2

== Compilation error on file web/models/basement.ex ==
** (CompileError)  deadlocked waiting on module Haas.HomeAssessment
    (elixir) lib/code.ex:568: Code.ensure_compiled/1
    (elixir) lib/code.ex:586: Code.ensure_compiled?/1
    lib/ecto/association.ex:719: Ecto.Association.BelongsTo.after_compile_validation/2
    lib/ecto/schema.ex:1656: anonymous fn/4 in Ecto.Schema.__after_compile__/2
    (elixir) lib/enum.ex:1755: Enum."-reduce/3-lists^foldl/2-0-"/3
    lib/ecto/schema.ex:1654: Ecto.Schema.__after_compile__/2

== Compilation error on file web/models/home_checklist.ex ==
** (CompileError)  deadlocked waiting on module Haas.HomeAssessment
    (elixir) lib/code.ex:568: Code.ensure_compiled/1
    (elixir) lib/code.ex:586: Code.ensure_compiled?/1
    lib/ecto/association.ex:719: Ecto.Association.BelongsTo.after_compile_validation/2
    lib/ecto/schema.ex:1656: anonymous fn/4 in Ecto.Schema.__after_compile__/2
    (elixir) lib/enum.ex:1755: Enum."-reduce/3-lists^foldl/2-0-"/3
    lib/ecto/schema.ex:1654: Ecto.Schema.__after_compile__/2

== Compilation error on file web/models/home_services_payment.ex ==
** (CompileError)  deadlocked waiting on module Haas.JobRequest
    (elixir) lib/code.ex:568: Code.ensure_compiled/1
    (elixir) lib/code.ex:586: Code.ensure_compiled?/1
    lib/ecto/association.ex:719: Ecto.Association.BelongsTo.after_compile_validation/2
    lib/ecto/schema.ex:1656: anonymous fn/4 in Ecto.Schema.__after_compile__/2
    (elixir) lib/enum.ex:1755: Enum."-reduce/3-lists^foldl/2-0-"/3
    lib/ecto/schema.ex:1654: Ecto.Schema.__after_compile__/2

== Compilation error on file web/models/home_paint.ex ==
** (CompileError)  deadlocked waiting on module Haas.HomeAssessment
    (elixir) lib/code.ex:568: Code.ensure_compiled/1
    (elixir) lib/code.ex:586: Code.ensure_compiled?/1
    lib/ecto/association.ex:719: Ecto.Association.BelongsTo.after_compile_validation/2
    lib/ecto/schema.ex:1656: anonymous fn/4 in Ecto.Schema.__after_compile__/2
    (elixir) lib/enum.ex:1755: Enum."-reduce/3-lists^foldl/2-0-"/3
    lib/ecto/schema.ex:1654: Ecto.Schema.__after_compile__/2

== Compilation error on file web/models/length.ex ==
** (CompileError)  deadlocked waiting on module Haas.Appliance
    (elixir) lib/code.ex:568: Code.ensure_compiled/1
    (elixir) lib/code.ex:586: Code.ensure_compiled?/1
    lib/ecto/association.ex:719: Ecto.Association.BelongsTo.after_compile_validation/2
    lib/ecto/schema.ex:1656: anonymous fn/4 in Ecto.Schema.__after_compile__/2
    (elixir) lib/enum.ex:1755: Enum."-reduce/3-lists^foldl/2-0-"/3
    lib/ecto/schema.ex:1654: Ecto.Schema.__after_compile__/2

== Compilation error on file web/models/roof_chimney_attic.ex ==
** (CompileError)  deadlocked waiting on module Haas.HomeAssessment
    (elixir) lib/code.ex:568: Code.ensure_compiled/1
    (elixir) lib/code.ex:586: Code.ensure_compiled?/1
    lib/ecto/association.ex:719: Ecto.Association.BelongsTo.after_compile_validation/2
    lib/ecto/schema.ex:1656: anonymous fn/4 in Ecto.Schema.__after_compile__/2
    (elixir) lib/enum.ex:1755: Enum."-reduce/3-lists^foldl/2-0-"/3
    lib/ecto/schema.ex:1654: Ecto.Schema.__after_compile__/2

== Compilation error on file web/models/intro_survey.ex ==
** (CompileError)  deadlocked waiting on module Haas.HomeAssessment
    (elixir) lib/code.ex:568: Code.ensure_compiled/1
    (elixir) lib/code.ex:586: Code.ensure_compiled?/1
    lib/ecto/association.ex:719: Ecto.Association.BelongsTo.after_compile_validation/2
    lib/ecto/schema.ex:1656: anonymous fn/4 in Ecto.Schema.__after_compile__/2
    (elixir) lib/enum.ex:1755: Enum."-reduce/3-lists^foldl/2-0-"/3
    lib/ecto/schema.ex:1654: Ecto.Schema.__after_compile__/2

== Compilation error on file web/models/trax_item.ex ==
** (CompileError)  deadlocked waiting on module Haas.HomeAssessment
    (elixir) lib/code.ex:568: Code.ensure_compiled/1
    (elixir) lib/code.ex:586: Code.ensure_compiled?/1
    lib/ecto/association.ex:719: Ecto.Association.BelongsTo.after_compile_validation/2
    lib/ecto/schema.ex:1656: anonymous fn/4 in Ecto.Schema.__after_compile__/2
    (elixir) lib/enum.ex:1755: Enum."-reduce/3-lists^foldl/2-0-"/3
    lib/ecto/schema.ex:1654: Ecto.Schema.__after_compile__/2

== Compilation error on file web/models/hvac.ex ==
** (CompileError)  deadlocked waiting on module Haas.HomeAssessment
    (elixir) lib/code.ex:568: Code.ensure_compiled/1
    (elixir) lib/code.ex:586: Code.ensure_compiled?/1
    lib/ecto/association.ex:719: Ecto.Association.BelongsTo.after_compile_validation/2
    lib/ecto/schema.ex:1656: anonymous fn/4 in Ecto.Schema.__after_compile__/2
    (elixir) lib/enum.ex:1755: Enum."-reduce/3-lists^foldl/2-0-"/3
    lib/ecto/schema.ex:1654: Ecto.Schema.__after_compile__/2

== Compilation error on file web/models/residence_exterior.ex ==
** (CompileError)  deadlocked waiting on module Haas.HomeAssessment
    (elixir) lib/code.ex:568: Code.ensure_compiled/1
    (elixir) lib/code.ex:586: Code.ensure_compiled?/1
    lib/ecto/association.ex:719: Ecto.Association.BelongsTo.after_compile_validation/2
    lib/ecto/schema.ex:1656: anonymous fn/4 in Ecto.Schema.__after_compile__/2
    (elixir) lib/enum.ex:1755: Enum."-reduce/3-lists^foldl/2-0-"/3
    lib/ecto/schema.ex:1654: Ecto.Schema.__after_compile__/2

== Compilation error on file web/models/job_request.ex ==
** (CompileError)  deadlocked waiting on module Haas.HomeAssessment
    (elixir) lib/code.ex:568: Code.ensure_compiled/1
    (elixir) lib/code.ex:586: Code.ensure_compiled?/1
    lib/ecto/association.ex:719: Ecto.Association.BelongsTo.after_compile_validation/2
    lib/ecto/schema.ex:1656: anonymous fn/4 in Ecto.Schema.__after_compile__/2
    (elixir) lib/enum.ex:1755: Enum."-reduce/3-lists^foldl/2-0-"/3
    lib/ecto/schema.ex:1654: Ecto.Schema.__after_compile__/2

== Compilation error on file web/models/fixture_element.ex ==
** (CompileError)  deadlocked waiting on module Haas.Fixture
    (elixir) lib/code.ex:568: Code.ensure_compiled/1
    (elixir) lib/code.ex:586: Code.ensure_compiled?/1
    lib/ecto/association.ex:719: Ecto.Association.BelongsTo.after_compile_validation/2
    lib/ecto/schema.ex:1656: anonymous fn/4 in Ecto.Schema.__after_compile__/2
    (elixir) lib/enum.ex:1755: Enum."-reduce/3-lists^foldl/2-0-"/3
    lib/ecto/schema.ex:1654: Ecto.Schema.__after_compile__/2

== Compilation error on file web/models/garage.ex ==
** (CompileError)  deadlocked waiting on module Haas.HomeAssessment
    (elixir) lib/code.ex:568: Code.ensure_compiled/1
    (elixir) lib/code.ex:586: Code.ensure_compiled?/1
    lib/ecto/association.ex:719: Ecto.Association.BelongsTo.after_compile_validation/2
    lib/ecto/schema.ex:1656: anonymous fn/4 in Ecto.Schema.__after_compile__/2
    (elixir) lib/enum.ex:1755: Enum."-reduce/3-lists^foldl/2-0-"/3
    lib/ecto/schema.ex:1654: Ecto.Schema.__after_compile__/2

== Compilation error on file web/services/home_assessments/export.ex ==
** (CompileError)  deadlocked waiting on module Haas.HomeAssessmentSponsor
    web/services/home_assessments/export.ex:95: (module)
    web/services/home_assessments/export.ex:92: (module)

== Compilation error on file web/models/electrical_panel.ex ==
** (CompileError)  deadlocked waiting on module Haas.Hvac
    (elixir) lib/code.ex:568: Code.ensure_compiled/1
    (elixir) lib/code.ex:586: Code.ensure_compiled?/1
    lib/ecto/association.ex:719: Ecto.Association.BelongsTo.after_compile_validation/2
    lib/ecto/schema.ex:1656: anonymous fn/4 in Ecto.Schema.__after_compile__/2
    (elixir) lib/enum.ex:1755: Enum."-reduce/3-lists^foldl/2-0-"/3
    lib/ecto/schema.ex:1654: Ecto.Schema.__after_compile__/2

== Compilation error on file web/models/home_assessment.ex ==
** (CompileError)  deadlocked waiting on module Haas.Photo
    web/models/home_assessment.ex:238: (module)
    (stdlib) erl_eval.erl:670: :erl_eval.do_apply/6

== Compilation error on file web/models/appliance.ex ==
** (CompileError)  deadlocked waiting on module Haas.HomeAssessment
    (elixir) lib/code.ex:568: Code.ensure_compiled/1
    (elixir) lib/code.ex:586: Code.ensure_compiled?/1
    lib/ecto/association.ex:719: Ecto.Association.BelongsTo.after_compile_validation/2
    lib/ecto/schema.ex:1656: anonymous fn/4 in Ecto.Schema.__after_compile__/2
    (elixir) lib/enum.ex:1755: Enum."-reduce/3-lists^foldl/2-0-"/3
    lib/ecto/schema.ex:1654: Ecto.Schema.__after_compile__/2

== Compilation error on file web/models/home_assessment_user.ex ==
** (CompileError)  deadlocked waiting on module Haas.HomeAssessment
    (elixir) lib/code.ex:568: Code.ensure_compiled/1
    (elixir) lib/code.ex:586: Code.ensure_compiled?/1
    lib/ecto/association.ex:719: Ecto.Association.BelongsTo.after_compile_validation/2
    lib/ecto/schema.ex:1656: anonymous fn/4 in Ecto.Schema.__after_compile__/2
    (elixir) lib/enum.ex:1755: Enum."-reduce/3-lists^foldl/2-0-"/3
    lib/ecto/schema.ex:1654: Ecto.Schema.__after_compile__/2

== Compilation error on file web/models/presenter.ex ==
** (CompileError)  deadlocked waiting on module Haas.HomeAssessment
    (elixir) lib/code.ex:568: Code.ensure_compiled/1
    (elixir) lib/code.ex:586: Code.ensure_compiled?/1
    lib/ecto/association.ex:432: Ecto.Association.Has.after_compile_validation/2
    lib/ecto/schema.ex:1656: anonymous fn/4 in Ecto.Schema.__after_compile__/2
    (elixir) lib/enum.ex:1755: Enum."-reduce/3-lists^foldl/2-0-"/3
    lib/ecto/schema.ex:1654: Ecto.Schema.__after_compile__/2

Compilation failed because of a deadlock between files.
The following files depended on the following modules:

         web/models/major_appliances_form.ex => Haas.HomeAssessment
       web/models/home_assessment_sponsor.ex => Haas.HomeAssessment
              web/models/property_address.ex => Haas.HomeAssessment
                         web/models/photo.ex => Haas.MasterBedroom
                           web/models/utm.ex => Haas.HomeAssessment
                      web/models/document.ex => Haas.HomeAssessment
                web/models/master_bedroom.ex => Haas.HomeAssessment
                       web/models/sponsor.ex => Haas.HomeAssessmentSponsor
                  web/models/simple_color.ex => Haas.Appliance
                   web/models/living_room.ex => Haas.HomeAssessment
               web/models/appliance_photo.ex => Haas.Appliance
            web/models/scheduling_contact.ex => Haas.HomeAssessment
                   web/models/dining_room.ex => Haas.HomeAssessment
                       web/models/fixture.ex => Haas.Photo
                 web/models/vendor_signup.ex => Haas.Photo
                  web/models/water_heater.ex => Haas.Hvac
                         web/models/space.ex => Haas.HomeAssessment
               web/models/master_bathroom.ex => Haas.HomeAssessment
      web/services/home_assessments/clone.ex => Haas.HomeAssessment
                    web/models/user_event.ex => Haas.HomeAssessment
                 web/models/sponsor_image.ex => Haas.Sponsor
                  web/models/order_number.ex => Haas.HomeAssessment
                    web/models/room_paint.ex => Haas.HomePaint
  web/models/home_assessment_primary_user.ex => Haas.HomeAssessment
                       web/models/kitchen.ex => Haas.HomeAssessment
                      web/models/basement.ex => Haas.HomeAssessment
                web/models/home_checklist.ex => Haas.HomeAssessment
         web/models/home_services_payment.ex => Haas.JobRequest
                    web/models/home_paint.ex => Haas.HomeAssessment
                        web/models/length.ex => Haas.Appliance
            web/models/roof_chimney_attic.ex => Haas.HomeAssessment
                  web/models/intro_survey.ex => Haas.HomeAssessment
                     web/models/trax_item.ex => Haas.HomeAssessment
                          web/models/hvac.ex => Haas.HomeAssessment
            web/models/residence_exterior.ex => Haas.HomeAssessment
                   web/models/job_request.ex => Haas.HomeAssessment
               web/models/fixture_element.ex => Haas.Fixture
                        web/models/garage.ex => Haas.HomeAssessment
     web/services/home_assessments/export.ex => Haas.HomeAssessmentSponsor
              web/models/electrical_panel.ex => Haas.Hvac
               web/models/home_assessment.ex => Haas.Photo
                     web/models/appliance.ex => Haas.HomeAssessment
          web/models/home_assessment_user.ex => Haas.HomeAssessment
                     web/models/presenter.ex => Haas.HomeAssessment

Expected behavior

The modules that depend on Haas.HomeAssessment wait for it to compile before compilation, allowing the application to compile successfully.

I couldn't find any reports of this issue but I might have missed it so sorry if it has already been reported. Let me know if you need any other information from my end.

Thanks!

josevalim commented 6 years ago

@supernintendo can you please provide an application that reproduces the error? Cyclic associations are actually fine (and I have them working in a app) so there is something else happening here causing the issue.

supernintendo commented 6 years ago

@josevalim Sure. The project where I'm running into this is closed source, but I'll dig a bit deeper and see if I can provide some source code that reproduces this.

zoldar commented 6 years ago

We have stumbled into the same problem when trying to bump ecto from 2.1.6 to 2.2.x in our project. We managed to nail it down to after_compile_validation calls for associations, like this one https://github.com/elixir-ecto/ecto/blob/master/lib/ecto/association.ex#L458. When we commented out condition clauses for Code.ensure_compiled?(queryable) check for either Has or BelongsTo association type, the deadlock didn't occur. We haven't managed to create a minimal example reproducing this issue though.

jkslyby commented 6 years ago

@supernintendo - I just encountered the exact same issue.

Would you happen to have module attributes that reference one of your other modules on lines 92 or 95 of web/services/home_assessments/export.ex (or anywhere else for that matter)?

If you remove/relocate those references, it should work™.

josevalim commented 6 years ago

If you have a way to reproduce the issue I would love to take a look at it and see if we can improve the error message or similar.

jkslyby commented 6 years ago

@josevalim - I will try to recreate it on a new project sometime soon. For now, here's the gist of what's happening:

defmodule MyApp.ModelA do
  schema "model_a" do
    has_many :model_bs, MyApp.ModelB
  end
  @default_preloads = [model_bs: from(b in MyApp.ModelB, order_by: [asc: b.id])]
end

defmodule MyApp.ModelB do
  schema "model_b" do
    belongs_to :model_a, MyApp.ModelA
  end
end

If I reference MyApp.ModelB inside of MyApp.ModelA in a module attribute, this causes the deadlock situation. That being said, it's probably not good to do that anyway.

supernintendo commented 6 years ago

@jkslyby That seems to be what is causing the problem in my case. It appears that an Ecto query set to a module attribute cannot contain a reference to another module it also depends on. Refactoring those queries allowed my application to compile. Thanks!

supernintendo commented 6 years ago

@josevalim Here is an application that reproduces the issue https://github.com/supernintendo/ecto_deadlock_example

josevalim commented 6 years ago

@supernintendo thank you! It makes sense indeed. Queries are not guaranteed to be compile-time safe and it is actually important that we recompile modules when their query sources chance. Moving it to a function is the way to go.