← Back to team overview

sts-sponsors team mailing list archive

[Merge] ~alexsander-souza/maas:lp1998615_to_3_3 into maas:3.3

 

Alexsander de Souza has proposed merging ~alexsander-souza/maas:lp1998615_to_3_3 into maas:3.3.

Commit message:
only log that a Rack Controller has disconnected when all connections are gone
    
(cherry picked from commit 459972b5ca45f0f0534c8a58a603e2300163728f)


Requested reviews:
  MAAS Maintainers (maas-maintainers)
Related bugs:
  Bug #1998615 in MAAS: "Rack controller status flapping when "ClusterClient connection lost" messages in rackd.log"
  https://bugs.launchpad.net/maas/+bug/1998615

For more details, see:
https://code.launchpad.net/~alexsander-souza/maas/+git/maas/+merge/444130
-- 
Your team MAAS Maintainers is requested to review the proposed merge of ~alexsander-souza/maas:lp1998615_to_3_3 into maas:3.3.
diff --git a/src/maasserver/rpc/regionservice.py b/src/maasserver/rpc/regionservice.py
index 16afafa..459c5b9 100644
--- a/src/maasserver/rpc/regionservice.py
+++ b/src/maasserver/rpc/regionservice.py
@@ -833,7 +833,8 @@ class RegionServer(Region):
                 log.err, "Failed to unregister the connection with the master."
             )
         self.factory.service._removeConnectionFor(self.ident, self)
-        log.msg("Rack controller '%s' disconnected." % self.ident)
+        if self.factory.service.rack_controller_is_disconnected(self.ident):
+            log.msg("Rack controller '%s' disconnected." % self.ident)
         super().connectionLost(reason)
 
 
@@ -985,6 +986,9 @@ class RegionService(service.Service):
                 self.waiters[ident].add(d)
             return d
 
+    def rack_controller_is_disconnected(self, ident):
+        return len(self.connections[ident]) == 0
+
     def _addConnectionFor(self, ident, connection):
         """Adds `connection` to the set of connections for `ident`.
 
diff --git a/src/maasserver/rpc/tests/test_regionservice.py b/src/maasserver/rpc/tests/test_regionservice.py
index f681620..48d44d3 100644
--- a/src/maasserver/rpc/tests/test_regionservice.py
+++ b/src/maasserver/rpc/tests/test_regionservice.py
@@ -971,6 +971,23 @@ class TestRegionService(MAASTestCase):
             ),
         )
 
+    def test_rack_controller_is_disconnected_returns_True_with_no_connections(
+        self,
+    ):
+        service = RegionService(sentinel.ipcWorker)
+        rack_ident = factory.make_UUID()
+        self.assertTrue(service.rack_controller_is_disconnected(rack_ident))
+
+    def test_rack_controller_is_disconnected_returns_False_with_connections(
+        self,
+    ):
+        service = RegionService(sentinel.ipcWorker)
+        rack_ident = factory.make_UUID()
+        c1 = DummyConnection()
+        c2 = DummyConnection()
+        service.connections[rack_ident].update({c1, c2})
+        self.assertFalse(service.rack_controller_is_disconnected(rack_ident))
+
     def test_addConnectionFor_adds_connection(self):
         service = RegionService(sentinel.ipcWorker)
         uuid = factory.make_UUID()

Follow ups