diff spec/util_hashring_spec.lua @ 12795:87424cbedc55

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).
author Matthew Wild <mwild1@gmail.com>
date Fri, 02 Dec 2022 20:32:36 +0000
parents 249b01adc54a
children
line wrap: on
line diff
--- a/spec/util_hashring_spec.lua	Fri Dec 02 20:27:32 2022 +0000
+++ b/spec/util_hashring_spec.lua	Fri Dec 02 20:32:36 2022 +0000
@@ -83,4 +83,11 @@
 		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);