- Added optional TTL to Horde.DynamicSupervisor's
:proxy_operationmessages. The Time-to-Live defaults to :infinity for full backwards compatibility. This TTL helps prevent potential issues where messages could loop forever between a set of nodes which disagree on which node should execute the task. - [BREAKING] Horde.DynamicSupervisor's new
:proxy_message_ttloption configures the maximum TTL for proxy messages. It takes an integer denoting the maximum number of hops a message can travel, or the atom :infinity (default). This can be a breaking change: when upgrading do not set this option to an integer. You can explicity set it to :infinity or leave it default. If this is set to an integer, upgraded nodes won't be able to proxy to non-upgrade nodes.
- Fix race condition in registry when node disconnects
- Pass
extra_argumentsflag to the ProcessSupervisor - Updating libring dependency to ~> 1.7. Needed for upgrade to OTP 27. See this PR to libring for details.
- Bugfixes for scenarios causing Horde to crash. See #266 and #263.
- [BREAKING] The first parameter of
Horde.DistributionStrategy.choose_node/2has changed from the identifier to the full child spec. See #239. - Use
:erpcinstead of:rpc. See #265. - Stop eagerly registering processes in Horde.Registry. This solves #250.
- Add
Horde.UniformRandomDistributionprocess distribution strategy. See #252.
- Tweak dependency on
:telemetry
- Fix an issue with
members: :auto
- Add support for telemetry version 1.0.0
- Upgrade to delta_crdt 0.6.0
- Fix a deadlock that occurred if a process was being restarted while
Horde.DynamicSupervisor.start_child/2was being called. #218 - Respect
max_restartsandmax_secondswhen given as options toHorde.DynamicSupervisor.child_spec/1. #216
- Bump version of
telemetry_pollerdependency. #212
Horde.Registry.delete_meta/2has been added to reflect its addition inElixir.Registryin upcoming release 1.11.0 #208
Horde.DynamicSupervisorbehaviour in a netsplit has changed. Previously, when a netsplit heals,Horde.DynamicSupervisorwould try to clean up any duplicate processes. It no longer does this, leaving that responsibility toHorde.Registry. #196Horde.DynamicSupervisorandHorde.Registrynow support the optionmembers: :autoto automatically detect other identically-named supervisors or registries. #184Horde.DynamicSupervisornow supports the optionprocess_redistribution: :activeto rebalance processes actively (aka, when a node joins or leaves the cluster). The default is:passive, which only redistributes processes when a node dies or loses quorum. #164.
- Use MFA for
on_diffinstead of anonymous function, avoids passing around functions (which can be error-prone). #167.
Horde.Supervisorhas been renamed toHorde.DynamicSupervisor.Horde.RegistryandHorde.Supervisornow follow the api ofElixir.DynamicSupervisormore closely (specificallyinit/1callback and module-based Supervisor / Registry). #152.Horde.Registry.lookup/2returns[]instead of:undefinedwhen no match. #145child_spec/1can be overridden inHorde.RegistryandHorde.Supervisor#135 #143- Implement
:listenersoption for Horde.Registry. #142 - Fix via tuple usage with meta. #139
- Module-based
Horde.Supervisorcan overridechild_spec/1. #135 - Added guides for handling clustering, process state handoff (during deploys), and special considerations for eventual consistency to the documentation.
Horde.Supervisornow uses libring to distribute processes over nodes. #130Horde.Supervisorpublishes metrics with:telemetry([:horde, :supervisor, :supervised_process_count]). #132Horde.SupervisorandHorde.Registrynow support optiondelta_crdt_options, which you can use to tune your cluster. Also updated to the most recent DeltaCRDT. #100
Horde.Supervisornow behaves more likeDynamicSupervisor. #122Horde.Registrysends an exit signal to the process that "loses" when a conflict is resolved. #118Horde.Registry.register/3returns{:error, {:already_registered, pid}}when applicable. This improves compatibility withElixir.Registry. #115- Adds
Horde.Registry.select/2, which works the same asElixir.Registry.select/2, which will land in Elixir 1.9. #110 - Fixes a bug causing
Horde.Supervisorto crash if a child process was restarting whenHorde.Supervisor.delete_child/2was called. #114