Violation of the Swarm.Distribution.Strategy definition is actually accepted
- Dominant language
- Elixir
- Stars
- 1.3k
- Forks
- 110
- PR merge metrics
- No merged PRs in 30d
Description
https://github.com/bitwalker/swarm/blob/4aee63d83ad5ee6ee095b38b3ff93a4dbb7c3400/lib/swarm/tracker/tracker.ex#L1187
By definition, `Swarm.Distribution.Strategy.key_to_node/2` can return `node() | :undefined`. However this exact line is actually accepting `{:error, {:invalid_ring, :no_nodes}}` as a valid return value, which is actually what `HashRing.key_to_node/2` returns in case of error.
So `Swarm.Distribution.Ring.key_to_node/2` should actually return `:undefined` instead of `{:error, reason}` to honour the strategy definition:
```
defmodule Swarm.Distribution.Ring do
...
def key_to_node(ring, key) do
case HashRing.key_to_node(ring, key) do
{:error, _reason} -> :undefined
node -> node
end
end
end
```
Contributor guide
No contributing guide indexed for this repository
Research direction
Start in lib/swarm/tracker/tracker.ex at line 1187 and inspect the Swarm.Distribution.Strategy.key_to_node/2 contract alongside Swarm.Distribution.Ring.key_to_node/2. Check the HashRing.key_to_node/2 error result, and consider the issue complete when Ring.key_to_node/2 returns :undefined for that error while preserving valid node results.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- elixir
- Domain
- distributed-systems
- Issue type
- Bug
- Difficulty
- 2/5
- Estimated time
- 1-3 hours
- Activity status
- Stale
- Clarity
- Clearly specified
- Newbie friendliness
- 55/100