@Override public void postHandleAlarmSnapshot() { stateTracker.resetStateAndStopTrackingAlarms(); }
@Override public void preHandleAlarmSnapshot() { stateTracker.startTrackingAlarms(); }
@Override public void handleDeletedAlarm(int alarmId, String reductionKey) { if (!forwardAlarms) { // Ignore return; } handleDeletedAlarm(reductionKey); stateTracker.trackDeletedAlarm(alarmId, reductionKey); }
@Override public void handleNewOrUpdatedAlarm(OnmsAlarm alarm) { if (!forwardAlarms) { // Ignore return; } updateAlarm(alarm.getReductionKey(), alarm); stateTracker.trackNewOrUpdatedAlarm(alarm.getId(), alarm.getReductionKey()); }
.filter(reductionKey -> !stateTracker.wasAlarmWithReductionKeyUpdated(reductionKey)) .collect(Collectors.toSet()); reductionKeysNotInDb.forEach(rkey -> kafkaProducer.handleDeletedAlarm((int)alarmsInKtableByReductionKey.get(rkey).getId(), rkey)); .filter(reductionKey -> !stateTracker.wasAlarmWithReductionKeyDeleted(reductionKey)) .collect(Collectors.toSet()); reductionKeysNotInKtable.forEach(rkey -> kafkaProducer.handleNewOrUpdatedAlarm(alarmsInDbByReductionKey.get(rkey))); commonReductionKeys.forEach(rkey -> { if (stateTracker.wasAlarmWithReductionKeyUpdated(rkey)) { return;
.filter(alarmId -> !stateTracker.wasAlarmWithIdDeleted(alarmId)) .collect(Collectors.toSet()); final Set<Integer> alarmIdsToRemove = Sets.difference(alarmIdsInWorkingMem, alarmIdsInDb).stream() .filter(alarmId -> !stateTracker.wasAlarmWithIdUpdated(alarmId)) .collect(Collectors.toSet()); final Set<Integer> alarmIdsToUpdate = Sets.intersection(alarmIdsInWorkingMem, alarmIdsInDb).stream() final AlarmAndFact alarmAndFact = alarmsById.get(alarmId); if (stateTracker.wasAlarmWithIdUpdated(alarmId)) { return false;
@Override public void handleNewOrUpdatedAlarm(OnmsAlarm alarm) { if (!forwardAlarms) { // Ignore return; } updateAlarm(alarm.getReductionKey(), alarm); stateTracker.trackNewOrUpdatedAlarm(alarm.getId(), alarm.getReductionKey()); }
.filter(reductionKey -> !stateTracker.wasAlarmWithReductionKeyUpdated(reductionKey)) .collect(Collectors.toSet()); reductionKeysNotInDb.forEach(rkey -> kafkaProducer.handleDeletedAlarm((int)alarmsInKtableByReductionKey.get(rkey).getId(), rkey)); .filter(reductionKey -> !stateTracker.wasAlarmWithReductionKeyDeleted(reductionKey)) .collect(Collectors.toSet()); reductionKeysNotInKtable.forEach(rkey -> kafkaProducer.handleNewOrUpdatedAlarm(alarmsInDbByReductionKey.get(rkey))); commonReductionKeys.forEach(rkey -> { if (stateTracker.wasAlarmWithReductionKeyUpdated(rkey)) { return;
.filter(alarmId -> !stateTracker.wasAlarmWithIdDeleted(alarmId)) .collect(Collectors.toSet()); final Set<Integer> alarmIdsToRemove = Sets.difference(alarmIdsInWorkingMem, alarmIdsInDb).stream() .filter(alarmId -> !stateTracker.wasAlarmWithIdUpdated(alarmId)) .collect(Collectors.toSet()); final Set<Integer> alarmIdsToUpdate = Sets.intersection(alarmIdsInWorkingMem, alarmIdsInDb).stream() final AlarmAndFact alarmAndFact = alarmsById.get(alarmId); if (stateTracker.wasAlarmWithIdUpdated(alarmId)) { return false;
private void handleNewOrUpdatedAlarmNoLock(OnmsAlarm alarm) { final KieSession kieSession = getKieSession(); // Initialize any related objects that are needed for rule execution Hibernate.initialize(alarm.getRelatedAlarms()); if (alarm.getLastEvent() != null) { // The last event may be null in unit tests Hibernate.initialize(alarm.getLastEvent().getEventParameters()); } final AlarmAndFact alarmAndFact = alarmsById.get(alarm.getId()); if (alarmAndFact == null) { LOG.debug("Inserting alarm into session: {}", alarm); final FactHandle fact = getKieSession().insert(alarm); alarmsById.put(alarm.getId(), new AlarmAndFact(alarm, fact)); } else { // Updating the fact doesn't always give us to expected results so we resort to deleting it // and adding it again instead LOG.trace("Deleting alarm from session (for re-insertion): {}", alarm); kieSession.delete(alarmAndFact.getFact()); // Reinsert LOG.trace("Re-inserting alarm into session: {}", alarm); final FactHandle fact = kieSession.insert(alarm); alarmsById.put(alarm.getId(), new AlarmAndFact(alarm, fact)); } stateTracker.trackNewOrUpdatedAlarm(alarm.getId(), alarm.getReductionKey()); }
@Override public void handleDeletedAlarm(int alarmId, String reductionKey) { if (!forwardAlarms) { // Ignore return; } handleDeletedAlarm(reductionKey); stateTracker.trackDeletedAlarm(alarmId, reductionKey); }
@Override public void preHandleAlarmSnapshot() { stateTracker.startTrackingAlarms(); }
@Override public void postHandleAlarmSnapshot() { stateTracker.resetStateAndStopTrackingAlarms(); }
private void handleNewOrUpdatedAlarmNoLock(OnmsAlarm alarm) { final KieSession kieSession = getKieSession(); // Initialize any related objects that are needed for rule execution Hibernate.initialize(alarm.getAssociatedAlarms()); if (alarm.getLastEvent() != null) { // The last event may be null in unit tests Hibernate.initialize(alarm.getLastEvent().getEventParameters()); } final AlarmAndFact alarmAndFact = alarmsById.get(alarm.getId()); if (alarmAndFact == null) { LOG.debug("Inserting alarm into session: {}", alarm); final FactHandle fact = getKieSession().insert(alarm); alarmsById.put(alarm.getId(), new AlarmAndFact(alarm, fact)); } else { // Updating the fact doesn't always give us to expected results so we resort to deleting it // and adding it again instead LOG.trace("Deleting alarm from session (for re-insertion): {}", alarm); kieSession.delete(alarmAndFact.getFact()); // Reinsert LOG.trace("Re-inserting alarm into session: {}", alarm); final FactHandle fact = kieSession.insert(alarm); alarmsById.put(alarm.getId(), new AlarmAndFact(alarm, fact)); } handleRelatedAlarms(alarm); stateTracker.trackNewOrUpdatedAlarm(alarm.getId(), alarm.getReductionKey()); }
private void handleDeletedAlarmNoLock(int alarmId, String reductionKey) { final AlarmAndFact alarmAndFact = alarmsById.remove(alarmId); if (alarmAndFact != null) { LOG.debug("Deleting alarm from session: {}", alarmAndFact.getAlarm()); getKieSession().delete(alarmAndFact.getFact()); } stateTracker.trackDeletedAlarm(alarmId, reductionKey); }
@Override public void preHandleAlarmSnapshot() { getLock().lock(); try { // Start tracking alarm callbacks via the state tracker // Do this while holding on a lock to make sure that we don't miss a callback that's in flight stateTracker.startTrackingAlarms(); } finally { getLock().unlock(); } }
@Override public void postHandleAlarmSnapshot() { stateTracker.resetStateAndStopTrackingAlarms(); // If an error occurred while preparing the snapshot, it is possible that // this post function is called without having handled the snapshot. // To avoid an IllegalMonitorStateException in this case, we only // unlock the session if it was locked. final ReentrantLock lock = getLock(); if (lock.isHeldByCurrentThread()) { lock.unlock(); } }
private void handleDeletedAlarmNoLock(int alarmId, String reductionKey) { final AlarmAndFact alarmAndFact = alarmsById.remove(alarmId); if (alarmAndFact != null) { LOG.debug("Deleting alarm from session: {}", alarmAndFact.getAlarm()); getKieSession().delete(alarmAndFact.getFact()); } deleteAlarmAcknowledgement(alarmId); deleteAlarmAssociations(alarmId); stateTracker.trackDeletedAlarm(alarmId, reductionKey); }
@Override public void preHandleAlarmSnapshot() { getLock().lock(); try { // Start tracking alarm callbacks via the state tracker // Do this while holding on a lock to make sure that we don't miss a callback that's in flight stateTracker.startTrackingAlarms(); } finally { getLock().unlock(); } }
@Override public void postHandleAlarmSnapshot() { stateTracker.resetStateAndStopTrackingAlarms(); // If an error occurred while preparing the snapshot, it is possible that // this post function is called without having handled the snapshot. // To avoid an IllegalMonitorStateException in this case, we only // unlock the session if it was locked. final ReentrantLock lock = getLock(); if (lock.isHeldByCurrentThread()) { lock.unlock(); } }