Hi,
I am trying to migrate an application from Elixir 1.14.5 to 1.15.7.
All my tests pass but they trigger additional errors related to commanded and eventstore:
Most of the errors are: unknown registry: MyApp.EventStore.EventStore.PubSub
as shown here:
16:05:55.218 [error] GenServer {MyApp.EventStore.EventStore.Subscriptions.Registry, {"$all", "MyProcessManager"}} terminating
** (ArgumentError) unknown registry: MyApp.EventStore.EventStore.PubSub
(elixir 1.15.7) lib/registry.ex:1391: Registry.info!/1
(elixir 1.15.7) lib/registry.ex:1007: Registry.register/3
(eventstore 1.4.7) lib/event_store/pubsub.ex:38: EventStore.PubSub.subscribe/3
(eventstore 1.4.7) lib/event_store/subscriptions/subscription_fsm.ex:70: EventStore.Subscriptions.SubscriptionFsm.transition/3
(eventstore 1.4.7) lib/event_store/subscriptions/subscription.ex:221: EventStore.Subscriptions.Subscription.handle_call/3
(stdlib 4.3.1.6) gen_server.erl:1149: :gen_server.try_handle_call/4
(stdlib 4.3.1.6) gen_server.erl:1178: :gen_server.handle_msg/6
(stdlib 4.3.1.6) proc_lib.erl:240: :proc_lib.init_p_do_apply/3
Last message (from #PID<0.16668.1>): {:connect, #PID<0.16668.1>, [retry_interval: 60000, hibernate_after: 15000, partition_by: nil, concurrency_limit: 1, name: MyApp.EventStore, mapper: &Commanded.EventStore.Adapters.EventStore.Mapper.from_recorded_event/1, conn: MyApp.EventStore.Postgrex, event_store: MyApp.EventStore, query_timeout: 15000, schema: "public", serializer: Commanded.Serialization.JsonSerializer, stream_uuid: "$all", subscription_name: "MyProcessManager", start_from: 0]}
domain=otp file=gen_server.erl line=1402 mfa=:gen_server.error_info/8 pid=<0.16687.1>
Less often I also have: 1st argument: the table identifier does not refer to an existing ETS table
as shown here:
16:05:56.398 [error] GenServer {MyApp.EventStore.EventStore.Subscriptions.Registry, {"$all", "MyProcessManager"}} terminating
** (ArgumentError) errors were found at the given arguments:
* 1st argument: the table identifier does not refer to an existing ETS table
(stdlib 4.3.1.6) :ets.insert(#Reference<0.4090088613.484835331.67685>, {#PID<0.17183.1>, "$all", #Reference<0.4090088613.484835331.67684>, -576460752299835900})
(elixir 1.15.7) lib/registry.ex:1018: Registry.register/3
(eventstore 1.4.7) lib/event_store/pubsub.ex:38: EventStore.PubSub.subscribe/3
(eventstore 1.4.7) lib/event_store/subscriptions/subscription_fsm.ex:70: EventStore.Subscriptions.SubscriptionFsm.transition/3
(eventstore 1.4.7) lib/event_store/subscriptions/subscription.ex:221: EventStore.Subscriptions.Subscription.handle_call/3
(stdlib 4.3.1.6) gen_server.erl:1149: :gen_server.try_handle_call/4
(stdlib 4.3.1.6) gen_server.erl:1178: :gen_server.handle_msg/6
(stdlib 4.3.1.6) proc_lib.erl:240: :proc_lib.init_p_do_apply/3
Last message (from #PID<0.17166.1>): {:connect, #PID<0.17166.1>, [retry_interval: 60000, hibernate_after: 15000, partition_by: nil, concurrency_limit: 1, name: MyApp.EventStore, mapper: &Commanded.EventStore.Adapters.EventStore.Mapper.from_recorded_event/1, conn: MyApp.EventStore.Postgrex, event_store: MyApp.EventStore, query_timeout: 15000, schema: "public", serializer: Commanded.Serialization.JsonSerializer, stream_uuid: "$all", subscription_name: "MyProcessManager", start_from: 0]}
domain=otp file=gen_server.erl line=1402 mfa=:gen_server.error_info/8 pid=<0.17183.1>
The 2 error stacks have a lot in common. Somehow eventstore
is trying to do something with what appears to be a registry linked to a dead process.
I have a lot of tests that run in parallel. If I try to run 1 test file at the time, no error occur. But if I run 2 test files in parallel, error sometime occur. It is difficult to reproduce because it is not predictable.
I do not know how to troubleshoot this. I have re-read the Commanded documentation in particular regarding Application and Process managers and I believe I do what the documentation recommends.
Any idea? @slashdotdash perhaps?