SEBA-353 Pull step should be resilient to missing PonPorts;
Delete OLTDevice if Voltha unreachable
Change-Id: I806eaa9f3bdd281ef3184ec5d6e76177199d5cad
diff --git a/xos/synchronizer/pull_steps/pull_onus.py b/xos/synchronizer/pull_steps/pull_onus.py
index d4c2d10..18f047c 100644
--- a/xos/synchronizer/pull_steps/pull_onus.py
+++ b/xos/synchronizer/pull_steps/pull_onus.py
@@ -82,7 +82,7 @@
log.debug("Skipping pull on ONUDevice %s as enacted < updated" % model.serial_number, serial_number=model.serial_number, id=model.id, enacted=model.enacted, updated=model.updated)
# if we are not updating the device we still need to pull ports
self.fetch_onu_ports(model)
- return
+ continue
except IndexError:
model = ONUDevice()
@@ -90,6 +90,18 @@
log.debug("ONUDevice is new, creating it", serial_number=onu["serial_number"])
+ try:
+ olt = OLTDevice.objects.get(device_id=onu["parent_id"])
+ except IndexError:
+ log.warning("Unable to find olt for ONUDevice", serial_number=onu["serial_number"], olt_device_id=onu["parent_id"])
+ continue
+
+ try:
+ pon_port = PONPort.objects.get(port_no=onu["parent_port_no"], olt_device_id=olt.id)
+ except IndexError:
+ log.warning("Unable to find pon_port for ONUDevice", serial_number=onu["serial_number"], olt_device_id=onu["parent_id"], port_no=onu["parent_port_no"])
+ continue
+
# Adding feedback state to the device
model.vendor = onu["vendor"]
model.device_type = onu["type"]
@@ -100,9 +112,6 @@
model.connect_status = onu["connect_status"]
model.xos_managed = False
- olt = OLTDevice.objects.get(device_id=onu["parent_id"])
- pon_port = PONPort.objects.get(port_no=onu["parent_port_no"], olt_device_id=olt.id)
-
model.pon_port = pon_port
model.pon_port_id = pon_port.id