Merge lp:~lamont/maas/bug-1647703-2.1 into lp:maas/2.1

Proposed by LaMont Jones
Status: Merged
Approved by: LaMont Jones
Approved revision: no longer in the source branch.
Merged at revision: 5564
Proposed branch: lp:~lamont/maas/bug-1647703-2.1
Merge into: lp:maas/2.1
Diff against target: 98 lines (+63/-0)
2 files modified
src/maasserver/triggers/tests/test_websocket_listener.py (+21/-0)
src/maasserver/triggers/websocket.py (+42/-0)
To merge this branch: bzr merge lp:~lamont/maas/bug-1647703-2.1
Reviewer Review Type Date Requested Status
LaMont Jones (community) Approve
Review via email: mp+312688@code.launchpad.net

Commit message

Update the websocket node when the domain name changes.

Description of the change

Update the websocket node when the domain name changes.

To post a comment you must log in.
Revision history for this message
LaMont Jones (lamont) wrote :

Trivial backport.

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== modified file 'src/maasserver/triggers/tests/test_websocket_listener.py'
--- src/maasserver/triggers/tests/test_websocket_listener.py 2016-10-12 15:26:17 +0000
+++ src/maasserver/triggers/tests/test_websocket_listener.py 2016-12-07 15:52:40 +0000
@@ -162,6 +162,27 @@
162 finally:162 finally:
163 yield listener.stopService()163 yield listener.stopService()
164164
165 @wait_for_reactor
166 @inlineCallbacks
167 def test__calls_handler_on_domain_name_change(self):
168 yield deferToDatabase(register_websocket_triggers)
169 listener = self.make_listener_without_delay()
170 dv = DeferredValue()
171 domain = yield deferToDatabase(self.create_domain, {})
172 params = self.params.copy()
173 params['domain'] = domain
174 yield deferToDatabase(self.create_node, params)
175 listener.register(self.listener, lambda *args: dv.set(args))
176 yield listener.startService()
177 try:
178 yield deferToDatabase(
179 self.update_domain,
180 domain.id,
181 {'name': factory.make_name('name')})
182 yield dv.get(timeout=2)
183 finally:
184 yield listener.stopService()
185
165186
166class TestDeviceWithParentListener(187class TestDeviceWithParentListener(
167 MAASTransactionServerTestCase, TransactionalHelpersMixin):188 MAASTransactionServerTestCase, TransactionalHelpersMixin):
168189
=== modified file 'src/maasserver/triggers/websocket.py'
--- src/maasserver/triggers/websocket.py 2016-10-19 05:59:50 +0000
+++ src/maasserver/triggers/websocket.py 2016-12-07 15:52:40 +0000
@@ -795,6 +795,41 @@
795 """)795 """)
796796
797797
798# Procedure that is called when a domain is updated. Sends a notify message
799# for node_update.
800DOMAIN_NODE_NOTIFY = dedent("""\
801 CREATE OR REPLACE FUNCTION %s() RETURNS trigger AS $$
802 DECLARE
803 node RECORD;
804 pnode RECORD;
805 BEGIN
806 IF OLD.name != NEW.name THEN
807 SELECT system_id, node_type, parent_id INTO node
808 FROM maasserver_node
809 WHERE maasserver_node.domain_id = NEW.id;
810
811 IF node.system_id IS NOT NULL THEN
812 IF node.node_type = %d THEN
813 PERFORM pg_notify('machine_update',CAST(node.system_id AS text));
814 ELSIF node.node_type IN (%d, %d, %d) THEN
815 PERFORM pg_notify(
816 'controller_update',CAST(node.system_id AS text));
817 ELSIF node.parent_id IS NOT NULL THEN
818 SELECT system_id INTO pnode
819 FROM maasserver_node
820 WHERE id = node.parent_id;
821 PERFORM pg_notify('machine_update',CAST(pnode.system_id AS text));
822 ELSE
823 PERFORM pg_notify('device_update',CAST(node.system_id AS text));
824 END IF;
825 END IF;
826 END IF;
827 RETURN NEW;
828 END;
829 $$ LANGUAGE plpgsql;
830 """)
831
832
798def render_notification_procedure(proc_name, event_name, cast):833def render_notification_procedure(proc_name, event_name, cast):
799 return dedent("""\834 return dedent("""\
800 CREATE OR REPLACE FUNCTION %s() RETURNS trigger AS $$835 CREATE OR REPLACE FUNCTION %s() RETURNS trigger AS $$
@@ -1254,6 +1289,11 @@
12541289
1255 # Domain table1290 # Domain table
1256 register_procedure(1291 register_procedure(
1292 DOMAIN_NODE_NOTIFY % (
1293 'domain_node_update_notify',
1294 NODE_TYPE.MACHINE, NODE_TYPE.RACK_CONTROLLER,
1295 NODE_TYPE.REGION_CONTROLLER, NODE_TYPE.REGION_AND_RACK_CONTROLLER))
1296 register_procedure(
1257 render_notification_procedure(1297 render_notification_procedure(
1258 'domain_create_notify', 'domain_create', 'NEW.id'))1298 'domain_create_notify', 'domain_create', 'NEW.id'))
1259 register_procedure(1299 register_procedure(
@@ -1263,6 +1303,8 @@
1263 render_notification_procedure(1303 render_notification_procedure(
1264 'domain_delete_notify', 'domain_delete', 'OLD.id'))1304 'domain_delete_notify', 'domain_delete', 'OLD.id'))
1265 register_trigger(1305 register_trigger(
1306 "maasserver_domain", "domain_node_update_notify", "update")
1307 register_trigger(
1266 "maasserver_domain", "domain_create_notify", "insert")1308 "maasserver_domain", "domain_create_notify", "insert")
1267 register_trigger(1309 register_trigger(
1268 "maasserver_domain", "domain_update_notify", "update")1310 "maasserver_domain", "domain_update_notify", "update")

Subscribers

People subscribed via source and target branches

to all changes: