From 133685a466718a4195a039cdab136402b127105a Mon Sep 17 00:00:00 2001
From: zphrs <z@zephiris.dev>
Date: Thu, 13 Mar 2025 21:13:43 -0700
Subject: [PATCH] Fixed issue where a container's ip addr changes when getting
 assigned to a new network

---
 tests/helper.py     |  1 +
 utils/containers.py | 21 +++++++++++++++++++--
 2 files changed, 20 insertions(+), 2 deletions(-)

diff --git a/tests/helper.py b/tests/helper.py
index 18b31db..e8057e4 100644
--- a/tests/helper.py
+++ b/tests/helper.py
@@ -7,6 +7,7 @@ from ..utils.util import Logger
 
 class KVSTestFixture:  
     def __init__(self, conductor: ClusterConductor, dir, log: Logger, node_count: int):
+        conductor._parent = self
         self.conductor = conductor
         self.dir = dir
         self.node_count = node_count
diff --git a/utils/containers.py b/utils/containers.py
index 894dbd2..98ce328 100644
--- a/utils/containers.py
+++ b/utils/containers.py
@@ -412,7 +412,16 @@ class ClusterConductor:
             self.log(f"    node {node.name} ip in network {net_name}: {container_ip}")
 
             # update node ip
-            node.ip = container_ip
+
+            if container_ip != node.ip:
+                node.ip = container_ip
+                if hasattr(self, "_parent"):
+                    self._parent.clients[
+                        node.index
+                    ].base_url = self.node_external_endpoint(node.index)
+                view_changed = True
+        if view_changed and hasattr(self, "_parent"):
+            self._parent.broadcast_view(self.get_shard_view())
 
     def create_partition(self, node_ids: List[int], partition_id: str) -> None:
         net_name = f"kvs_{self.group_id}_net_{partition_id}"
@@ -463,7 +472,15 @@ class ClusterConductor:
             self.log(f"    node {node.name} ip in network {net_name}: {container_ip}")
 
             # update node ip
-            node.ip = container_ip
+            if container_ip != node.ip:
+                node.ip = container_ip
+                if hasattr(self, "_parent"):
+                    self._parent.clients[
+                        node.index
+                    ].base_url = self.node_external_endpoint(node.index)
+                view_changed = True
+        if view_changed and hasattr(self, "_parent"):
+            self._parent.broadcast_view(self.get_shard_view())
 
     DeprecationWarning("View is in updated format")
 
-- 
GitLab