/** {@inheritDoc} */ @Override public void openOutage(final PollableService svc, final PollEvent svcLostEvent) { // Open the outage immediately final Integer outageId = getQueryManager().openOutagePendingLostEventId(svc.getNodeId(), svc.getIpAddr(), svc.getSvcName(), svcLostEvent.getDate()); // Defer updating the outage with the event id until we receive back // from the event bus final Runnable r = new Runnable() { @Override public void run() { final int eventId = svcLostEvent.getEventId(); if (eventId > 0) { getQueryManager().updateOpenOutageWithEventId(outageId, eventId); } else { LOG.warn("run: Failed to determine an eventId for service lost for: {} with event: {}", svc, svcLostEvent); } } }; if (svcLostEvent instanceof PendingPollEvent) { ((PendingPollEvent)svcLostEvent).addPending(r); } else { r.run(); } LOG.debug("openOutage: sending outageCreated event for: {} on {}", svc.getSvcName(), svc.getIpAddr()); sendEvent(createEvent(EventConstants.OUTAGE_CREATED_EVENT_UEI, svc.getNodeId(), svc.getAddress(), svc.getSvcName(), svcLostEvent.getDate(), null)); }