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

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1diff --git a/src/provisioningserver/rpc/clusterservice.py b/src/provisioningserver/rpc/clusterservice.py
2index d9baf8d..32d5ad4 100644
3--- a/src/provisioningserver/rpc/clusterservice.py
4+++ b/src/provisioningserver/rpc/clusterservice.py
5@@ -1139,16 +1139,6 @@ class ClusterClient(Cluster):
6 self.transport.loseConnection()
7 self.authenticated.set(None)
8 self.ready.fail(RuntimeError("Service not running."))
9- elif self.eventloop in self.service.connections:
10- log.msg(
11- "Event-loop '%s' is already connected; "
12- "dropping connection." % self.ident
13- )
14- self.transport.loseConnection()
15- self.authenticated.set(None)
16- self.ready.fail(
17- KeyError("Event-loop '%s' already connected." % self.eventloop)
18- )
19 else:
20 return self.performHandshake().addCallbacks(
21 self.handshakeSucceeded, self.handshakeFailed
22@@ -1275,7 +1265,7 @@ class ClusterClientService(TimerService):
23 return self._tryUpdate().addCallback(call, self.getClient)
24 except exceptions.AllConnectionsBusy:
25 return self.connections.scale_up_connections().addCallback(
26- call, self.getClient
27+ call, self.getClient, busy_ok=True
28 )
29
30 def getAllClients(self):
31diff --git a/src/provisioningserver/rpc/tests/test_clusterservice.py b/src/provisioningserver/rpc/tests/test_clusterservice.py
32index 04b7d66..cd15e04 100644
33--- a/src/provisioningserver/rpc/tests/test_clusterservice.py
34+++ b/src/provisioningserver/rpc/tests/test_clusterservice.py
35@@ -1624,35 +1624,6 @@ class TestClusterClient(MAASTestCase):
36 {client.eventloop: [client]},
37 )
38
39- def test_disconnects_when_there_is_an_existing_connection(self):
40- client = self.make_running_client()
41-
42- # Pretend that a connection already exists for this address.
43- client.service.connections.connections[client.eventloop] = [
44- sentinel.connection
45- ]
46-
47- # Connect via an in-memory transport.
48- transport = StringTransportWithDisconnection()
49- transport.protocol = client
50- client.makeConnection(transport)
51-
52- # authenticated was set to None to signify that authentication was not
53- # attempted.
54- self.assertIsNone(extract_result(client.authenticated.get()))
55- # ready was set with KeyError to signify that a connection to the
56- # same event-loop already existed.
57- self.assertRaises(KeyError, extract_result, client.ready.get())
58-
59- # The connections list is unchanged because the new connection
60- # immediately disconnects.
61- self.assertEqual(
62- client.service.connections,
63- {client.eventloop: [sentinel.connection]},
64- )
65- self.assertFalse(client.connected)
66- self.assertIsNone(client.transport)
67-
68 def test_disconnects_when_service_is_not_running(self):
69 client = self.make_running_client()
70 client.service.running = False
71diff --git a/src/provisioningserver/rpc/tests/test_connectionpool.py b/src/provisioningserver/rpc/tests/test_connectionpool.py
72index 692d5e6..dc06bd4 100644
73--- a/src/provisioningserver/rpc/tests/test_connectionpool.py
74+++ b/src/provisioningserver/rpc/tests/test_connectionpool.py
75@@ -8,6 +8,7 @@ from twisted.internet.endpoints import TCP6ClientEndpoint
76 from twisted.internet.task import Clock
77
78 from maastesting import get_testing_timeout
79+from maastesting.factory import factory
80 from maastesting.testcase import MAASTestCase, MAASTwistedRunTest
81 from maastesting.twisted import extract_result
82 from provisioningserver.rpc import connectionpool as connectionpoolModule
83@@ -140,6 +141,37 @@ class TestConnectionPool(MAASTestCase):
84 cp.scale_up_connections(),
85 )
86
87+ def test_scale_up_connections_registers_the_new_connection_with_the_region(
88+ self,
89+ ):
90+ cp = ConnectionPool(Clock(), Mock(), max_conns=2)
91+ eventloop = Mock()
92+ address = (factory.make_ip_address(), 5240)
93+ service = Mock()
94+ connection1 = ClusterClient(address, eventloop, service)
95+ connection2 = ClusterClient(address, eventloop, service)
96+ connect = self.patch(cp, "connect")
97+
98+ def call_connectionMade(*args, **kwargs):
99+ connection2.connectionMade()
100+ return succeed(connection2)
101+
102+ connect.side_effect = call_connectionMade
103+
104+ authRegion = self.patch(connection2, "authenticateRegion")
105+ authRegion.return_value = succeed(True)
106+ register = self.patch(connection2, "registerRackWithRegion")
107+
108+ def set_ident(*args, **kwargs):
109+ connection2.localIdent = factory.make_name()
110+ return succeed(True)
111+
112+ register.side_effect = set_ident
113+
114+ cp[eventloop] = [connection1]
115+ cp.scale_up_connections()
116+ self.assertIsNotNone(connection2.localIdent)
117+
118 def test_get_connection(self):
119 cp = ConnectionPool(Clock(), Mock(), max_idle_conns=2, max_conns=2)
120 eventloops = [Mock() for _ in range(3)]

Subscribers

People subscribed via source and target branches