KNOX-2915 - Descriptors are reloaded before topology redeployment at startup (#760)
diff --git a/gateway-server/src/main/java/org/apache/knox/gateway/GatewayMessages.java b/gateway-server/src/main/java/org/apache/knox/gateway/GatewayMessages.java
index d7e3042..c5830bd 100644
--- a/gateway-server/src/main/java/org/apache/knox/gateway/GatewayMessages.java
+++ b/gateway-server/src/main/java/org/apache/knox/gateway/GatewayMessages.java
@@ -73,6 +73,9 @@
@Message( level = MessageLevel.INFO, text = "Loading topologies from directory: {0}" )
void loadingTopologiesFromDirectory( String topologiesDir );
+ @Message( level = MessageLevel.INFO, text = "Loading descriptors from directory: {0}" )
+ void loadingDescriptorsFromDirectory(String descriptorsDir);
+
@Message( level = MessageLevel.DEBUG, text = "Loading topology file: {0}" )
void loadingTopologyFile( String fileName );
diff --git a/gateway-server/src/main/java/org/apache/knox/gateway/GatewayServer.java b/gateway-server/src/main/java/org/apache/knox/gateway/GatewayServer.java
index dc5969b..65fefd5 100644
--- a/gateway-server/src/main/java/org/apache/knox/gateway/GatewayServer.java
+++ b/gateway-server/src/main/java/org/apache/knox/gateway/GatewayServer.java
@@ -623,9 +623,15 @@
// Load the current topologies.
// Redeploy autodeploy topologies.
File topologiesDir = calculateAbsoluteTopologiesDir();
- log.loadingTopologiesFromDirectory(topologiesDir.getAbsolutePath());
monitor = services.getService(ServiceType.TOPOLOGY_SERVICE);
+
+ // Descriptors should be reloaded before topology reloading at startup, so that any changes to descriptors
+ // will be realized before Knox deploys "old" topologies that would have re-deployed anyway in a matter of seconds
+ // by the descriptor monitor
+ monitor.reloadDescriptors();
+
monitor.addTopologyChangeListener(listener);
+ log.loadingTopologiesFromDirectory(topologiesDir.getAbsolutePath());
monitor.reloadTopologies();
List<String> autoDeploys = config.getAutoDeployTopologyNames();
if (autoDeploys != null) {
diff --git a/gateway-server/src/main/java/org/apache/knox/gateway/services/topology/impl/DefaultTopologyService.java b/gateway-server/src/main/java/org/apache/knox/gateway/services/topology/impl/DefaultTopologyService.java
index 0ab8a70..fba249e 100644
--- a/gateway-server/src/main/java/org/apache/knox/gateway/services/topology/impl/DefaultTopologyService.java
+++ b/gateway-server/src/main/java/org/apache/knox/gateway/services/topology/impl/DefaultTopologyService.java
@@ -549,12 +549,12 @@
log.remoteConfigurationMonitorStartFailure(remoteMonitor.getClass().getTypeName(), e.getLocalizedMessage());
}
}
-
- // Trigger descriptor discovery (KNOX-2301)
- triggerDescriptorDiscovery();
}
- private void triggerDescriptorDiscovery() {
+ // Trigger descriptor discovery (KNOX-2301)
+ @Override
+ public void reloadDescriptors() {
+ log.loadingDescriptorsFromDirectory(descriptorsDirectory.getAbsolutePath());
for (File descriptor : getDescriptors()) {
descriptorsMonitor.onFileChange(descriptor);
}
diff --git a/gateway-spi/src/main/java/org/apache/knox/gateway/services/topology/TopologyService.java b/gateway-spi/src/main/java/org/apache/knox/gateway/services/topology/TopologyService.java
index 6fb11fc..8fa65e4 100644
--- a/gateway-spi/src/main/java/org/apache/knox/gateway/services/topology/TopologyService.java
+++ b/gateway-spi/src/main/java/org/apache/knox/gateway/services/topology/TopologyService.java
@@ -56,6 +56,8 @@
Collection<File> getDescriptors();
+ void reloadDescriptors();
+
void deleteTopology(Topology t);
boolean deleteDescriptor(String name);