Skip to content

recompile fails with invalid options during a phoenix app recompile #12013

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
Sinc63 opened this issue Jul 26, 2022 · 3 comments
Closed

recompile fails with invalid options during a phoenix app recompile #12013

Sinc63 opened this issue Jul 26, 2022 · 3 comments

Comments

@Sinc63
Copy link

Sinc63 commented Jul 26, 2022

Elixir and Erlang/OTP versions

Erlang/OTP 24 [erts-12.3] [source] [64-bit] [smp:20:20] [ds:20:20:10] [async-threads:1]

Elixir 1.13.3 (compiled with Erlang/OTP 24)

Operating system

Linux ucx.emetrotel.net 4.18.0-372.9.1.el8.x86_64 #1 SMP Wed May 11 19:58:59 PDT 2022 x86_64 x86_64 x86_64 GNU/Linux

Current behavior

Trying to do a recompile in a Phoenix app I often get errors from the compiler. There are variations on exactly what messages I get, and in what order, but most of them seem to include something like the following.

** (ArgumentError) errors were found at the given arguments:

  • 2nd argument: invalid options

    (stdlib 3.17.1) :ets.new(Mix.Compilers.ApplicationTracer, [:public, :named_table, :set, {:read_concurrency, true}])
    (mix 1.13.3) lib/mix/compilers/application_tracer.ex:208: Mix.Compilers.ApplicationTracer.build_manifest/1
    (mix 1.13.3) lib/mix/compilers/application_tracer.ex:40: Mix.Compilers.ApplicationTracer.prepare/2
    (mix 1.13.3) lib/mix/compilers/elixir.ex:142: Mix.Compilers.Elixir.compile/7
    (mix 1.13.3) lib/mix/task.ex:397: anonymous fn/3 in Mix.Task.run_task/3
    (elixir 1.13.3) lib/enum.ex:1593: Enum."-map/2-lists^map/1-0-"/2
    (elixir 1.13.3) lib/enum.ex:1593: Enum."-map/2-lists^map/1-0-"/2
    (phoenix 1.5.9) lib/phoenix/code_reloader/server.ex:245: Phoenix.CodeReloader.Server.mix_compile/1
    (phoenix 1.5.9) lib/phoenix/code_reloader/server.ex:217: Phoenix.CodeReloader.Server.mix_compile_unless_stale_config/2
    (phoenix 1.5.9) lib/phoenix/code_reloader/server.ex:176: Phoenix.CodeReloader.Server.mix_compile/3
    (phoenix 1.5.9) lib/phoenix/code_reloader/server.ex:75: anonymous fn/2 in Phoenix.CodeReloader.Server.handle_call/3
    (phoenix 1.5.9) lib/phoenix/code_reloader/server.ex:289: Phoenix.CodeReloader.Server.proxy_io/1
    (phoenix 1.5.9) lib/phoenix/code_reloader/server.ex:73: Phoenix.CodeReloader.Server.handle_call/3
    (stdlib 3.17.1) gen_server.erl:721: :gen_server.try_handle_call/4
    (stdlib 3.17.1) gen_server.erl:750: :gen_server.handle_msg/6
    (stdlib 3.17.1) proc_lib.erl:226: :proc_lib.init_p_do_apply/3

In the current instance this was followed, when doing the second set of files (why is there a second set of files?) by:

== Compilation error in file my_dir/proxy.ex ==
** (ArgumentError) errors were found at the given arguments:

  • 1st argument: the table identifier does not refer to an existing ETS table

    (stdlib 3.17.1) :ets.member(Mix.Compilers.ApplicationTracer, Kernel)
    (mix 1.13.3) lib/mix/compilers/application_tracer.ex:89: Mix.Compilers.ApplicationTracer.trace/2
    (elixir 1.13.3) src/elixir_env.erl:32: :elixir_env."-trace/2-lc$^0/1-0-"/3
    (elixir 1.13.3) src/elixir_env.erl:32: :elixir_env.trace/2
    (elixir 1.13.3) src/elixir_dispatch.erl:163: :elixir_dispatch.do_expand_import/7
    (elixir 1.13.3) src/elixir_dispatch.erl:92: :elixir_dispatch.dispatch_import/6
    (elixir 1.13.3) lib/kernel/parallel_compiler.ex:346: anonymous fn/5 in Kernel.ParallelCompiler.spawn_workers/7
    ** (exit) shutdown: 1
    (mix 1.13.3) lib/mix/tasks/compile.all.ex:78: Mix.Tasks.Compile.All.compile/4
    (mix 1.13.3) lib/mix/tasks/compile.all.ex:59: Mix.Tasks.Compile.All.with_logger_app/2
    (mix 1.13.3) lib/mix/tasks/compile.all.ex:36: Mix.Tasks.Compile.All.run/1
    (mix 1.13.3) lib/mix/task.ex:397: anonymous fn/3 in Mix.Task.run_task/3
    (mix 1.13.3) lib/mix/tasks/compile.ex:131: Mix.Tasks.Compile.run/1
    (mix 1.13.3) lib/mix/task.ex:397: anonymous fn/3 in Mix.Task.run_task/3
    (iex 1.13.3) lib/iex/helpers.ex:107: IEx.Helpers.recompile/1

Expected behavior

Recompile works without forcing me to stop iex and compile externally.

@josevalim
Copy link
Member

Based on your report, I am pretty sure a race condition is happening. recompile() is trying to run at the same time at recompile was triggered by the browser. We will likely need to add a lock around the compile task.

@Sinc63
Copy link
Author

Sinc63 commented Jul 28, 2022

Speedy response. Thanks.

What sort of cadence is there to releases, i.e. how soon might this fix actually get built in a 1.13.5? A rough estimate is all I'm wondering.

@josevalim
Copy link
Member

It will be part of v1.14 which will have a RC coming out this or next week.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Development

No branches or pull requests

2 participants