Add an event to reload the category configuration. When the RTC receives uei.opennms.org/internal/rtc/reload it triggers a reload of categories.xml. --- opennms-daemon/src/main/filtered/bin/opennms | 3 ++- opennms-daemon/src/main/filtered/etc/eventconf.xml | 13 ++++++++++++ .../netmgt/rtc/BroadcastEventProcessor.java | 10 ++++++++++ .../java/org/opennms/netmgt/rtc/RTCManager.java | 22 +++++++++++++++++----- 4 files changed, 42 insertions(+), 6 deletions(-) diff --git a/opennms-daemon/src/main/filtered/bin/opennms b/opennms-daemon/src/main/filtered/bin/opennms index ad7798e..fb6f62d 100644 --- a/opennms-daemon/src/main/filtered/bin/opennms +++ b/opennms-daemon/src/main/filtered/bin/opennms @@ -583,7 +583,8 @@ case "$COMMAND" in uei.opennms.org/internal/eventsConfigChange \ uei.opennms.org/internal/reloadScriptConfig \ uei.opennms.org/internal/reloadVacuumdConfig \ - uei.opennms.org/internal/importer/reloadImport + uei.opennms.org/internal/importer/reloadImport \ + uei.opennms.org/internal/rtc/reloadCategories do $OPENNMS_HOME/bin/send-event.pl "$uei" done diff --git a/opennms-daemon/src/main/filtered/etc/eventconf.xml b/opennms-daemon/src/main/filtered/etc/eventconf.xml index fe9b11b..864272c 100644 --- a/opennms-daemon/src/main/filtered/etc/eventconf.xml +++ b/opennms-daemon/src/main/filtered/etc/eventconf.xml @@ -565,6 +565,19 @@ Warning + uei.opennms.org/internal/rtc/reloadCategories + OpenNMS-defined internal event: rtc reload + + <p>This event will cause the RTC to reload + its category configuration.</p> + + + <p>A request has been made to reload the RTC + category configuration.</p> + + Normal + + uei.opennms.org/internal/serviceManaged OpenNMS-defined internal event: serviceManaged diff --git a/opennms-services/src/main/java/org/opennms/netmgt/rtc/BroadcastEventProcessor.java b/opennms-services/src/main/java/org/opennms/netmgt/rtc/BroadcastEventProcessor.java index 0c4afda..405425a 100644 --- a/opennms-services/src/main/java/org/opennms/netmgt/rtc/BroadcastEventProcessor.java +++ b/opennms-services/src/main/java/org/opennms/netmgt/rtc/BroadcastEventProcessor.java @@ -74,6 +74,9 @@ final class BroadcastEventProcessor implements EventListener { m_updaterQ = updaterQ; } + public static final String RELOAD_RTC_UEI + = "uei.opennms.org/internal/rtc/reloadCategories"; + /** * Create a list of UEIs of interest to the RTC and subscribe to eventd */ @@ -119,6 +122,8 @@ final class BroadcastEventProcessor implements EventListener { // add the asset info changed event ueisOfInterest.add(EventConstants.ASSET_INFO_CHANGED_EVENT_UEI); + ueisOfInterest.add(RELOAD_RTC_UEI); + EventIpcManagerFactory.init(); EventIpcManagerFactory.getIpcManager().addEventListener(this, ueisOfInterest); } @@ -155,6 +160,11 @@ final class BroadcastEventProcessor implements EventListener { if (uei == null) return; + if (uei.equals(RELOAD_RTC_UEI)) { + RTCManager.getInstance().reload(); + return; + } + m_updaterQ.add(new DataUpdater(event)); if (log.isDebugEnabled()) diff --git a/opennms-services/src/main/java/org/opennms/netmgt/rtc/RTCManager.java b/opennms-services/src/main/java/org/opennms/netmgt/rtc/RTCManager.java index 0ca0b72..e872ced 100644 --- a/opennms-services/src/main/java/org/opennms/netmgt/rtc/RTCManager.java +++ b/opennms-services/src/main/java/org/opennms/netmgt/rtc/RTCManager.java @@ -48,6 +48,7 @@ import org.exolab.castor.xml.MarshalException; import org.exolab.castor.xml.ValidationException; import org.opennms.core.concurrent.RunnableConsumerThreadPool; import org.opennms.core.utils.ThreadCategory; +import org.opennms.netmgt.config.CategoryFactory; import org.opennms.netmgt.config.RTCConfigFactory; import org.opennms.netmgt.daemon.AbstractServiceDaemon; import org.opennms.netmgt.rtc.datablock.RTCCategory; @@ -509,11 +510,7 @@ public final class RTCManager extends AbstractServiceDaemon { log().info("User Refresh Interval: " + m_userRefreshInterval + "(milliseconds)"); // Intialize the data from the database - try { - m_dataMgr = new DataManager(); - } catch (Exception ex) { - throw new UndeclaredThrowableException(ex); - } + reload(); m_updaterPool = new RunnableConsumerThreadPool("RTC Updater Pool", 0.6f, 1.0f, rFactory.getUpdaters()); @@ -647,6 +644,21 @@ public final class RTCManager extends AbstractServiceDaemon { m_counter++; } + + /** + * Reloads the RTC. It would be unwise to reload the entire RTC - + * we'd lose all the subscriptions - so just reload categories.xml. + */ + public synchronized void reload() { + try { + CategoryFactory.reload(); + m_dataMgr = new DataManager(); + } catch (Exception ex) { + throw new UndeclaredThrowableException(ex); + } + } + + /** * Get the data sender. *