From eee2d39c4db4cf244d5877a1884fe2b29c01f1f0 Mon Sep 17 00:00:00 2001 From: James Harton Date: Fri, 10 Jul 2020 17:57:39 +1200 Subject: [PATCH] Add libcluster and swarm to jumpstart clustering, rather than invent something. --- config/config.exs | 17 +++++++++++++++++ lib/wopr/application.ex | 7 +++++-- mix.exs | 4 +++- mix.lock | 4 ++++ 4 files changed, 29 insertions(+), 3 deletions(-) create mode 100644 config/config.exs diff --git a/config/config.exs b/config/config.exs new file mode 100644 index 0000000..599ad02 --- /dev/null +++ b/config/config.exs @@ -0,0 +1,17 @@ +use Mix.Config + +config :wopr, + topologies: [ + nearby: [ + strategy: Cluster.Strategy.Gossip, + config: [ + port: 1983, + if_addr: "0.0.0.0", + multicast_addr: "255.255.255.255", + broadcast_only: true + ] + ] + ] + +config :swarm, + distribution_strategy: Swarm.Distribution.Ring diff --git a/lib/wopr/application.ex b/lib/wopr/application.ex index 2820c82..d8e7720 100644 --- a/lib/wopr/application.ex +++ b/lib/wopr/application.ex @@ -6,9 +6,12 @@ defmodule WOPR.Application do use Application def start(_type, _args) do + topologies = + :wopr + |> Application.get_env(:topologies) + children = [ - # Starts a worker by calling: WOPR.Worker.start_link(arg) - # {WOPR.Worker, arg} + {Cluster.Supervisor, [topologies, [name: WOPR.ClusterSupervisor]]} ] # See https://hexdocs.pm/elixir/Supervisor.html diff --git a/mix.exs b/mix.exs index 2757c98..6e9b1e5 100644 --- a/mix.exs +++ b/mix.exs @@ -35,7 +35,9 @@ defmodule WOPR.MixProject do [ {:credo, "~> 1.1", only: [:dev, :test], runtime: false}, {:earmark, ">= 0.0.0", only: [:dev, :test]}, - {:ex_doc, ">= 0.0.0", only: [:dev, :test]} + {:ex_doc, ">= 0.0.0", only: [:dev, :test]}, + {:libcluster, "~> 3.2"}, + {:swarm, "~> 3.4"} ] end end diff --git a/mix.lock b/mix.lock index 788197e..0762413 100644 --- a/mix.lock +++ b/mix.lock @@ -4,8 +4,12 @@ "earmark": {:hex, :earmark, "1.4.9", "837e4c1c5302b3135e9955f2bbf52c6c52e950c383983942b68b03909356c0d9", [:mix], [{:earmark_parser, ">= 1.4.9", [hex: :earmark_parser, repo: "hexpm", optional: false]}], "hexpm", "0d72df7d13a3dc8422882bed5263fdec5a773f56f7baeb02379361cb9e5b0d8e"}, "earmark_parser": {:hex, :earmark_parser, "1.4.9", "819bda2049e6ee1365424e4ced1ba65806eacf0d2867415f19f3f80047f8037b", [:mix], [], "hexpm", "8bf54fddabf2d7e137a0c22660e71b49d5a0a82d1fb05b5af62f2761cd6485c4"}, "ex_doc": {:hex, :ex_doc, "0.22.1", "9bb6d51508778193a4ea90fa16eac47f8b67934f33f8271d5e1edec2dc0eee4c", [:mix], [{:earmark, "~> 1.4.0", [hex: :earmark, repo: "hexpm", optional: false]}, {:makeup_elixir, "~> 0.14", [hex: :makeup_elixir, repo: "hexpm", optional: false]}], "hexpm", "d957de1b75cb9f78d3ee17820733dc4460114d8b1e11f7ee4fd6546e69b1db60"}, + "gen_state_machine": {:hex, :gen_state_machine, "2.1.0", "a38b0e53fad812d29ec149f0d354da5d1bc0d7222c3711f3a0bd5aa608b42992", [:mix], [], "hexpm", "ae367038808db25cee2f2c4b8d0531522ea587c4995eb6f96ee73410a60fa06b"}, "jason": {:hex, :jason, "1.2.1", "12b22825e22f468c02eb3e4b9985f3d0cb8dc40b9bd704730efa11abd2708c44", [:mix], [{:decimal, "~> 1.0", [hex: :decimal, repo: "hexpm", optional: true]}], "hexpm", "b659b8571deedf60f79c5a608e15414085fa141344e2716fbd6988a084b5f993"}, + "libcluster": {:hex, :libcluster, "3.2.1", "b2cd5b447cde25d5897749bee6f7aaeb6c96ac379481024e9b6ba495dabeb97d", [:mix], [{:jason, "~> 1.1", [hex: :jason, repo: "hexpm", optional: false]}], "hexpm", "89f225612d135edce9def56f43bf18d575d88ac4680e3f6161283f2e55cadca4"}, + "libring": {:hex, :libring, "1.5.0", "44313eb6862f5c9168594a061e9d5f556a9819da7c6444706a9e2da533396d70", [:mix], [], "hexpm", "04e843d4fdcff49a62d8e03778d17c6cb2a03fe2d14020d3825a1761b55bd6cc"}, "makeup": {:hex, :makeup, "1.0.3", "e339e2f766d12e7260e6672dd4047405963c5ec99661abdc432e6ec67d29ef95", [:mix], [{:nimble_parsec, "~> 0.5", [hex: :nimble_parsec, repo: "hexpm", optional: false]}], "hexpm", "2e9b4996d11832947731f7608fed7ad2f9443011b3b479ae288011265cdd3dad"}, "makeup_elixir": {:hex, :makeup_elixir, "0.14.1", "4f0e96847c63c17841d42c08107405a005a2680eb9c7ccadfd757bd31dabccfb", [:mix], [{:makeup, "~> 1.0", [hex: :makeup, repo: "hexpm", optional: false]}], "hexpm", "f2438b1a80eaec9ede832b5c41cd4f373b38fd7aa33e3b22d9db79e640cbde11"}, "nimble_parsec": {:hex, :nimble_parsec, "0.6.0", "32111b3bf39137144abd7ba1cce0914533b2d16ef35e8abc5ec8be6122944263", [:mix], [], "hexpm", "27eac315a94909d4dc68bc07a4a83e06c8379237c5ea528a9acff4ca1c873c52"}, + "swarm": {:hex, :swarm, "3.4.0", "64f8b30055d74640d2186c66354b33b999438692a91be275bb89cdc7e401f448", [:mix], [{:gen_state_machine, "~> 2.0", [hex: :gen_state_machine, repo: "hexpm", optional: false]}, {:libring, "~> 1.0", [hex: :libring, repo: "hexpm", optional: false]}], "hexpm", "94884f84783fc1ba027aba8fe8a7dae4aad78c98e9f9c76667ec3471585c08c6"}, }