← Back to team overview

sts-sponsors team mailing list archive

[Merge] ~cgrabowski/maas:cleanup_rpc_disconnect_logging into maas:master

 

Christian Grabowski has proposed merging ~cgrabowski/maas:cleanup_rpc_disconnect_logging into maas:master.

Commit message:
only log that a Rack Controller has disconnected when all connections are gone



Requested reviews:
  MAAS Maintainers (maas-maintainers)

For more details, see:
https://code.launchpad.net/~cgrabowski/maas/+git/maas/+merge/441113
-- 
Your team MAAS Maintainers is requested to review the proposed merge of ~cgrabowski/maas:cleanup_rpc_disconnect_logging into maas:master.
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..ac5acbd 100644
--- a/src/maasserver/rpc/tests/test_regionservice.py
+++ b/src/maasserver/rpc/tests/test_regionservice.py
@@ -971,6 +971,19 @@ 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