Merge ~mpontillo/maas:fix-duplicate-node-event-log--bug-1804551 into maas:master

Proposed by Mike Pontillo
Status: Merged
Approved by: Mike Pontillo
Approved revision: 424aac8c68323a20cbddb98b1f9cd5b38e5da0ae
Merge reported by: MAAS Lander
Merged at revision: not available
Proposed branch: ~mpontillo/maas:fix-duplicate-node-event-log--bug-1804551
Merge into: maas:master
Diff against target: 55 lines (+25/-4)
2 files modified
src/maasserver/rpc/events.py (+3/-4)
src/maasserver/rpc/tests/test_events.py (+22/-0)
Reviewer Review Type Date Requested Status
Andres Rodriguez (community) Approve
Review via email: mp+359163@code.launchpad.net

Commit message

LP: #1804551 - Fix case where an IP is linked to multiple interfaces when logging events

To post a comment you must log in.
424aac8... by Mike Pontillo

Format imports.

Revision history for this message
Andres Rodriguez (andreserl) wrote :

lgtm!

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1diff --git a/src/maasserver/rpc/events.py b/src/maasserver/rpc/events.py
2index b41e8fb..4eef69c 100644
3--- a/src/maasserver/rpc/events.py
4+++ b/src/maasserver/rpc/events.py
5@@ -107,10 +107,9 @@ def send_event_ip_address(ip_address, type_name, description, timestamp):
6 except EventType.DoesNotExist:
7 raise NoSuchEventType.from_name(type_name)
8
9- try:
10- node = Node.objects.get(
11- interface__ip_addresses__ip=ip_address)
12- except Node.DoesNotExist:
13+ node = Node.objects.filter(
14+ interface__ip_addresses__ip=ip_address).first()
15+ if node is None:
16 # The node doesn't exist, but we don't raise an exception - it's
17 # entirely possible the cluster has started sending events for a node
18 # that we don't know about yet. This is most likely to happen when a
19diff --git a/src/maasserver/rpc/tests/test_events.py b/src/maasserver/rpc/tests/test_events.py
20index 5229f03..796fa66 100644
21--- a/src/maasserver/rpc/tests/test_events.py
22+++ b/src/maasserver/rpc/tests/test_events.py
23@@ -9,6 +9,7 @@ __all__ = []
24 import datetime
25 import logging
26
27+from maasserver.enum import INTERFACE_TYPE
28 from maasserver.models.event import Event
29 from maasserver.models.eventtype import EventType
30 from maasserver.rpc import events
31@@ -125,3 +126,24 @@ class TestSendEventIPAddress(MAASServerTestCase):
32 Event.objects.get(
33 node=node, type=event_type, description=description,
34 created=timestamp)
35+
36+ def test__creates_event_for_node_with_bridge_interface(self):
37+ event_type = factory.make_EventType()
38+ node = factory.make_Node(interface=True)
39+ eth0 = node.get_boot_interface()
40+ # Create a bridge with the same MAC as the boot interface.
41+ factory.make_Interface(
42+ INTERFACE_TYPE.BRIDGE, node=node, mac_address=eth0.mac_address,
43+ parents=[node.get_boot_interface()])
44+ description = factory.make_name('description')
45+ timestamp = datetime.datetime.utcnow()
46+ ip = factory.make_StaticIPAddress()
47+ for interface in node.interface_set.all():
48+ ip.interface_set.add(interface)
49+ events.send_event_ip_address(
50+ ip.ip, event_type.name,
51+ description, timestamp)
52+ # Doesn't raise a DoesNotExist error.
53+ Event.objects.get(
54+ node=node, type=event_type, description=description,
55+ created=timestamp)

Subscribers

People subscribed via source and target branches