bitwalker/libcluster

:erpc.multicast/4 not working with Cluster.Strategy.Gossip strategy

spencerdcarlson opened this issue · 1 comments

Steps to reproduce

  • Configuration Used
config :libcluster,
  topologies: [
    gossip: [
      strategy: Cluster.Strategy.Gossip,
      config: [
        port: 45892,
        if_addr: {0, 0, 0, 0},
        multicast_addr: {230, 1, 1, 251},
        multicast_ttl: 1,
        secret: "mysecret"
      ]
    ]
  ]

config :slab, MyApp.Cache,
  local_opts: [],
  levels: [
    {MyApp.Cache.Partitioned, []},
  ]
defmodule MyApp.Cache do
  use Nebulex.Cache,
    otp_app: :slab,
    adapter: NebulexLocalMultilevelAdapter
end

defmodule MyApp.Cache.Partitioned do
  use Nebulex.Cache,
    otp_app: :slab,
    adapter: Nebulex.Adapters.Partitioned
end
  • Strategy Used
    Cluster.Strategy.Gossip

  • Errors/Incorrect Behaviour Encountered
    Nebulex cache entries are updated on the Node where they are affected, but they are not broadcasted to other nodes.

Description of issue

I think :erpc.multicast/4 might not be working with Cluster.Strategy.Gossip strategy. While using NebulexLocalMultilevelAdapter with the Partitioned adapter as my L2 I can see my Nodes clustered by printing out Node.list() but the Nebulex call to :erpc.multicast/4 doesn't seem to be working. If I switch to using a Elixir.Cluster.Strategy.LocalEpmd topology, everything seems to be working as expected.

  • What are the expected results?
    Nebulex cache entries be synchronized

🤔 I am not sure if this is related to libcluster. I modified nebulex_local_multilevel_adapter.ex#L202 locally to use :erpc.multicall/4 and it seems to work correctly returning appropriately and syncing the Nebulex cache on each node.