aboutsummaryrefslogtreecommitdiffstats
path: root/spec
diff options
context:
space:
mode:
authorMatthew Wild <mwild1@gmail.com>2022-12-02 20:32:36 +0000
committerMatthew Wild <mwild1@gmail.com>2022-12-02 20:32:36 +0000
commitae84717255cb196013c1b0fe0a625b2b443e7dc4 (patch)
tree828f1a4ea294c9bd4da20cc4809ef91a46d128e4 /spec
parentd33904f7e96bbc4d1ea4e5dec544bad82d2be15f (diff)
downloadprosody-ae84717255cb196013c1b0fe0a625b2b443e7dc4.tar.gz
prosody-ae84717255cb196013c1b0fe0a625b2b443e7dc4.zip
util.hashring: Support associating arbitrary data with nodes
In this API, a 'node' is always a simple text string. Sometimes the caller may have a more complex structure representing a node, but the hash ring is really only concerned with the node's name. This API change allows :add_nodes() to take a table of `node_name = value` pairs, as well as the simple array of node names previously accepted. The 'value' of the selected node is returned as a new second result from :get_node(). If no value is passed when a node is added, it defaults to `true` (as before, but this was never previously exposed).
Diffstat (limited to 'spec')
-rw-r--r--spec/util_hashring_spec.lua7
1 files changed, 7 insertions, 0 deletions
diff --git a/spec/util_hashring_spec.lua b/spec/util_hashring_spec.lua
index 05f053e4..4f6ec3a3 100644
--- a/spec/util_hashring_spec.lua
+++ b/spec/util_hashring_spec.lua
@@ -83,4 +83,11 @@ describe("util.hashring", function ()
end
end);
+ it("should support values associated with nodes", function ()
+ local r = hashring.new(128, sha256);
+ r:add_node("node1", { a = 1 });
+ local node, value = r:get_node("foo");
+ assert.is_equal("node1", node);
+ assert.same({ a = 1 }, value);
+ end);
end);