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
1=== modified file 'src/maasserver/triggers/tests/test_websocket_listener.py'
2--- src/maasserver/triggers/tests/test_websocket_listener.py 2016-10-12 15:26:17 +0000
3+++ src/maasserver/triggers/tests/test_websocket_listener.py 2016-12-07 15:52:40 +0000
4@@ -162,6 +162,27 @@
5 finally:
6 yield listener.stopService()
7
8+ @wait_for_reactor
9+ @inlineCallbacks
10+ def test__calls_handler_on_domain_name_change(self):
11+ yield deferToDatabase(register_websocket_triggers)
12+ listener = self.make_listener_without_delay()
13+ dv = DeferredValue()
14+ domain = yield deferToDatabase(self.create_domain, {})
15+ params = self.params.copy()
16+ params['domain'] = domain
17+ yield deferToDatabase(self.create_node, params)
18+ listener.register(self.listener, lambda *args: dv.set(args))
19+ yield listener.startService()
20+ try:
21+ yield deferToDatabase(
22+ self.update_domain,
23+ domain.id,
24+ {'name': factory.make_name('name')})
25+ yield dv.get(timeout=2)
26+ finally:
27+ yield listener.stopService()
28+
29
30 class TestDeviceWithParentListener(
31 MAASTransactionServerTestCase, TransactionalHelpersMixin):
32
33=== modified file 'src/maasserver/triggers/websocket.py'
34--- src/maasserver/triggers/websocket.py 2016-10-19 05:59:50 +0000
35+++ src/maasserver/triggers/websocket.py 2016-12-07 15:52:40 +0000
36@@ -795,6 +795,41 @@
37 """)
38
39
40+# Procedure that is called when a domain is updated. Sends a notify message
41+# for node_update.
42+DOMAIN_NODE_NOTIFY = dedent("""\
43+ CREATE OR REPLACE FUNCTION %s() RETURNS trigger AS $$
44+ DECLARE
45+ node RECORD;
46+ pnode RECORD;
47+ BEGIN
48+ IF OLD.name != NEW.name THEN
49+ SELECT system_id, node_type, parent_id INTO node
50+ FROM maasserver_node
51+ WHERE maasserver_node.domain_id = NEW.id;
52+
53+ IF node.system_id IS NOT NULL THEN
54+ IF node.node_type = %d THEN
55+ PERFORM pg_notify('machine_update',CAST(node.system_id AS text));
56+ ELSIF node.node_type IN (%d, %d, %d) THEN
57+ PERFORM pg_notify(
58+ 'controller_update',CAST(node.system_id AS text));
59+ ELSIF node.parent_id IS NOT NULL THEN
60+ SELECT system_id INTO pnode
61+ FROM maasserver_node
62+ WHERE id = node.parent_id;
63+ PERFORM pg_notify('machine_update',CAST(pnode.system_id AS text));
64+ ELSE
65+ PERFORM pg_notify('device_update',CAST(node.system_id AS text));
66+ END IF;
67+ END IF;
68+ END IF;
69+ RETURN NEW;
70+ END;
71+ $$ LANGUAGE plpgsql;
72+ """)
73+
74+
75 def render_notification_procedure(proc_name, event_name, cast):
76 return dedent("""\
77 CREATE OR REPLACE FUNCTION %s() RETURNS trigger AS $$
78@@ -1254,6 +1289,11 @@
79
80 # Domain table
81 register_procedure(
82+ DOMAIN_NODE_NOTIFY % (
83+ 'domain_node_update_notify',
84+ NODE_TYPE.MACHINE, NODE_TYPE.RACK_CONTROLLER,
85+ NODE_TYPE.REGION_CONTROLLER, NODE_TYPE.REGION_AND_RACK_CONTROLLER))
86+ register_procedure(
87 render_notification_procedure(
88 'domain_create_notify', 'domain_create', 'NEW.id'))
89 register_procedure(
90@@ -1263,6 +1303,8 @@
91 render_notification_procedure(
92 'domain_delete_notify', 'domain_delete', 'OLD.id'))
93 register_trigger(
94+ "maasserver_domain", "domain_node_update_notify", "update")
95+ register_trigger(
96 "maasserver_domain", "domain_create_notify", "insert")
97 register_trigger(
98 "maasserver_domain", "domain_update_notify", "update")

Subscribers

People subscribed via source and target branches

to all changes: