Merge ~cgrabowski/maas:fix_missing_localIdent_on_burst_connections into maas:master

Proposed by Christian Grabowski
Status: Merged
Approved by: Christian Grabowski
Approved revision: 1437197d57b9d779fd5554c6659b3b9ffb35f6ab
Merge reported by: MAAS Lander
Merged at revision: not available
Proposed branch: ~cgrabowski/maas:fix_missing_localIdent_on_burst_connections
Merge into: maas:master
Diff against target: 120 lines (+33/-40)
3 files modified
src/provisioningserver/rpc/clusterservice.py (+1/-11)
src/provisioningserver/rpc/tests/test_clusterservice.py (+0/-29)
src/provisioningserver/rpc/tests/test_connectionpool.py (+32/-0)
Reviewer Review Type Date Requested Status
Alberto Donato (community) Approve
MAAS Lander Approve
Review via email: mp+428941@code.launchpad.net

Commit message

remove conditional to allow additional connections perform handshake

To post a comment you must log in.
Revision history for this message
MAAS Lander (maas-lander) wrote :

UNIT TESTS
-b fix_missing_localIdent_on_burst_connections lp:~cgrabowski/maas/+git/maas into -b master lp:~maas-committers/maas

STATUS: SUCCESS
COMMIT: 1437197d57b9d779fd5554c6659b3b9ffb35f6ab

review: Approve
Revision history for this message
Alberto Donato (ack) wrote :

+1

review: Approve

Update scan failed

At least one of the branches involved have failed to scan. You can manually schedule a rescan if required.

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
diff --git a/src/provisioningserver/rpc/clusterservice.py b/src/provisioningserver/rpc/clusterservice.py
index d9baf8d..32d5ad4 100644
--- a/src/provisioningserver/rpc/clusterservice.py
+++ b/src/provisioningserver/rpc/clusterservice.py
@@ -1139,16 +1139,6 @@ class ClusterClient(Cluster):
1139 self.transport.loseConnection()1139 self.transport.loseConnection()
1140 self.authenticated.set(None)1140 self.authenticated.set(None)
1141 self.ready.fail(RuntimeError("Service not running."))1141 self.ready.fail(RuntimeError("Service not running."))
1142 elif self.eventloop in self.service.connections:
1143 log.msg(
1144 "Event-loop '%s' is already connected; "
1145 "dropping connection." % self.ident
1146 )
1147 self.transport.loseConnection()
1148 self.authenticated.set(None)
1149 self.ready.fail(
1150 KeyError("Event-loop '%s' already connected." % self.eventloop)
1151 )
1152 else:1142 else:
1153 return self.performHandshake().addCallbacks(1143 return self.performHandshake().addCallbacks(
1154 self.handshakeSucceeded, self.handshakeFailed1144 self.handshakeSucceeded, self.handshakeFailed
@@ -1275,7 +1265,7 @@ class ClusterClientService(TimerService):
1275 return self._tryUpdate().addCallback(call, self.getClient)1265 return self._tryUpdate().addCallback(call, self.getClient)
1276 except exceptions.AllConnectionsBusy:1266 except exceptions.AllConnectionsBusy:
1277 return self.connections.scale_up_connections().addCallback(1267 return self.connections.scale_up_connections().addCallback(
1278 call, self.getClient1268 call, self.getClient, busy_ok=True
1279 )1269 )
12801270
1281 def getAllClients(self):1271 def getAllClients(self):
diff --git a/src/provisioningserver/rpc/tests/test_clusterservice.py b/src/provisioningserver/rpc/tests/test_clusterservice.py
index 04b7d66..cd15e04 100644
--- a/src/provisioningserver/rpc/tests/test_clusterservice.py
+++ b/src/provisioningserver/rpc/tests/test_clusterservice.py
@@ -1624,35 +1624,6 @@ class TestClusterClient(MAASTestCase):
1624 {client.eventloop: [client]},1624 {client.eventloop: [client]},
1625 )1625 )
16261626
1627 def test_disconnects_when_there_is_an_existing_connection(self):
1628 client = self.make_running_client()
1629
1630 # Pretend that a connection already exists for this address.
1631 client.service.connections.connections[client.eventloop] = [
1632 sentinel.connection
1633 ]
1634
1635 # Connect via an in-memory transport.
1636 transport = StringTransportWithDisconnection()
1637 transport.protocol = client
1638 client.makeConnection(transport)
1639
1640 # authenticated was set to None to signify that authentication was not
1641 # attempted.
1642 self.assertIsNone(extract_result(client.authenticated.get()))
1643 # ready was set with KeyError to signify that a connection to the
1644 # same event-loop already existed.
1645 self.assertRaises(KeyError, extract_result, client.ready.get())
1646
1647 # The connections list is unchanged because the new connection
1648 # immediately disconnects.
1649 self.assertEqual(
1650 client.service.connections,
1651 {client.eventloop: [sentinel.connection]},
1652 )
1653 self.assertFalse(client.connected)
1654 self.assertIsNone(client.transport)
1655
1656 def test_disconnects_when_service_is_not_running(self):1627 def test_disconnects_when_service_is_not_running(self):
1657 client = self.make_running_client()1628 client = self.make_running_client()
1658 client.service.running = False1629 client.service.running = False
diff --git a/src/provisioningserver/rpc/tests/test_connectionpool.py b/src/provisioningserver/rpc/tests/test_connectionpool.py
index 692d5e6..dc06bd4 100644
--- a/src/provisioningserver/rpc/tests/test_connectionpool.py
+++ b/src/provisioningserver/rpc/tests/test_connectionpool.py
@@ -8,6 +8,7 @@ from twisted.internet.endpoints import TCP6ClientEndpoint
8from twisted.internet.task import Clock8from twisted.internet.task import Clock
99
10from maastesting import get_testing_timeout10from maastesting import get_testing_timeout
11from maastesting.factory import factory
11from maastesting.testcase import MAASTestCase, MAASTwistedRunTest12from maastesting.testcase import MAASTestCase, MAASTwistedRunTest
12from maastesting.twisted import extract_result13from maastesting.twisted import extract_result
13from provisioningserver.rpc import connectionpool as connectionpoolModule14from provisioningserver.rpc import connectionpool as connectionpoolModule
@@ -140,6 +141,37 @@ class TestConnectionPool(MAASTestCase):
140 cp.scale_up_connections(),141 cp.scale_up_connections(),
141 )142 )
142143
144 def test_scale_up_connections_registers_the_new_connection_with_the_region(
145 self,
146 ):
147 cp = ConnectionPool(Clock(), Mock(), max_conns=2)
148 eventloop = Mock()
149 address = (factory.make_ip_address(), 5240)
150 service = Mock()
151 connection1 = ClusterClient(address, eventloop, service)
152 connection2 = ClusterClient(address, eventloop, service)
153 connect = self.patch(cp, "connect")
154
155 def call_connectionMade(*args, **kwargs):
156 connection2.connectionMade()
157 return succeed(connection2)
158
159 connect.side_effect = call_connectionMade
160
161 authRegion = self.patch(connection2, "authenticateRegion")
162 authRegion.return_value = succeed(True)
163 register = self.patch(connection2, "registerRackWithRegion")
164
165 def set_ident(*args, **kwargs):
166 connection2.localIdent = factory.make_name()
167 return succeed(True)
168
169 register.side_effect = set_ident
170
171 cp[eventloop] = [connection1]
172 cp.scale_up_connections()
173 self.assertIsNotNone(connection2.localIdent)
174
143 def test_get_connection(self):175 def test_get_connection(self):
144 cp = ConnectionPool(Clock(), Mock(), max_idle_conns=2, max_conns=2)176 cp = ConnectionPool(Clock(), Mock(), max_idle_conns=2, max_conns=2)
145 eventloops = [Mock() for _ in range(3)]177 eventloops = [Mock() for _ in range(3)]

Subscribers

People subscribed via source and target branches