From de404471b7fc67c8a8abea6485491cafa8b7c4c5 Mon Sep 17 00:00:00 2001 From: Tomasz Grabiec Date: Fri, 26 Jul 2024 15:53:18 +0200 Subject: [PATCH] locator: load_sketch: Introduce get_least_loaded_shard() --- locator/load_sketch.hh | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/locator/load_sketch.hh b/locator/load_sketch.hh index b298311a02..7a584bb513 100644 --- a/locator/load_sketch.hh +++ b/locator/load_sketch.hh @@ -130,8 +130,14 @@ public: } shard_id next_shard(host_id node) { - const topology& topo = _tm->get_topology(); + auto shard = get_least_loaded_shard(node); + pick(node, shard); + return shard; + } + + node_load& ensure_node(host_id node) { if (!_nodes.contains(node)) { + const topology& topo = _tm->get_topology(); auto shard_count = topo.find_node(node)->get_shard_count(); if (shard_count == 0) { throw std::runtime_error(format("Shard count not known for node {}", node)); @@ -139,11 +145,13 @@ public: auto [i, _] = _nodes.emplace(node, node_load{shard_count}); i->second.populate_shards_by_load(); } - auto& n = _nodes.at(node); + return _nodes.at(node); + } + + shard_id get_least_loaded_shard(host_id node) { + auto& n = ensure_node(node); const shard_load& s = *n._shards_by_load.begin(); - auto shard = s.id; - n.update_shard_load(shard, 1); - return shard; + return s.id; } void unload(host_id node, shard_id shard) {