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.
*