From 798569bae6e4ac0af0a40f0534ebff2248cde4da Mon Sep 17 00:00:00 2001 From: Mikhail Koviazin Date: Wed, 4 Sep 2024 12:23:17 +0200 Subject: [PATCH] cluster: don't leak IndexError in `NodesManager.initialize` If the cluster has just been started, `CLUSTER SLOTS` returns an empty array. `NodesManager.initialize` did not take this into account and took the first element unconditionally causing `IndexError`. This commit makes it raise `ValkeyClusterException` with a clear error message instead. Signed-off-by: Mikhail Koviazin --- valkey/cluster.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/valkey/cluster.py b/valkey/cluster.py index 453482b8..bb62f3c7 100644 --- a/valkey/cluster.py +++ b/valkey/cluster.py @@ -1648,7 +1648,10 @@ def initialize(self): self.nodes_cache = tmp_nodes_cache self.slots_cache = tmp_slots # Set the default node - self.default_node = self.get_nodes_by_server_type(PRIMARY)[0] + try: + self.default_node = self.get_nodes_by_server_type(PRIMARY)[0] + except IndexError: + raise ValkeyClusterException("No primary nodes found in the cluster") if self._dynamic_startup_nodes: # Populate the startup nodes with all discovered nodes self.startup_nodes = tmp_nodes_cache