This is an automated email from the ASF dual-hosted git repository.

smolnar pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/knox.git


The following commit(s) were added to refs/heads/master by this push:
     new c04efbe  KNOX-2693 - Redeploying a topology if it was changed 
regardless of its timestamp (#531)
c04efbe is described below

commit c04efbeecc4831ec1b7075cfc7ca06527ef67897
Author: Sandor Molnar <[email protected]>
AuthorDate: Mon Jan 17 08:37:54 2022 +0100

    KNOX-2693 - Redeploying a topology if it was changed regardless of its 
timestamp (#531)
---
 .../topology/impl/DefaultTopologyService.java      |  9 ++++++-
 .../topology/DefaultTopologyServiceTest.java       | 31 ++++++++++++++++++----
 2 files changed, 34 insertions(+), 6 deletions(-)

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 3e8392b..2359817 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
@@ -230,7 +230,14 @@ public class DefaultTopologyService extends 
FileAlterationListenerAdaptor implem
 
   private boolean shouldMarkTopologyUpdated(Topology newTopology, Topology 
oldTopology) {
     final boolean timestampUpdated = newTopology.getTimestamp() > 
oldTopology.getTimestamp();
-    return config.topologyRedeploymentRequiresChanges() ? timestampUpdated && 
!oldTopology.equals(newTopology) : timestampUpdated;
+    final boolean topologyChanged = !oldTopology.equals(newTopology);
+    if (topologyChanged) {
+      // if topology is changed, an UPDATE event has to be triggered no matter 
what
+      return true;
+    } else {
+      // topology is not changed
+      return config.topologyRedeploymentRequiresChanges() ? false : 
timestampUpdated;
+    }
   }
 
   private File calculateAbsoluteTopologiesDir(GatewayConfig config) {
diff --git 
a/gateway-server/src/test/java/org/apache/knox/gateway/services/topology/DefaultTopologyServiceTest.java
 
b/gateway-server/src/test/java/org/apache/knox/gateway/services/topology/DefaultTopologyServiceTest.java
index 86903b2..5dc769b 100644
--- 
a/gateway-server/src/test/java/org/apache/knox/gateway/services/topology/DefaultTopologyServiceTest.java
+++ 
b/gateway-server/src/test/java/org/apache/knox/gateway/services/topology/DefaultTopologyServiceTest.java
@@ -712,16 +712,26 @@ public class DefaultTopologyServiceTest {
   }
 
   @Test
-  public void testTopologyRedeployedIfChangeNotRequired() throws Exception {
-    testTopologyRedeployment(false);
+  public void testTopologyRedeployedIfChangeNotRequiredAndNoChangesMade() 
throws Exception {
+    testTopologyRedeployment(false, false);
   }
 
   @Test
-  public void testTopologyNotRedeployedIfNotChangedAndChangeRequired() throws 
Exception {
-    testTopologyRedeployment(true);
+  public void testTopologyRedeployedIfChangeNotRequiredAndChangesWereMade() 
throws Exception {
+    testTopologyRedeployment(false, true);
   }
 
-  private void testTopologyRedeployment(boolean requiresChange) throws 
Exception {
+  @Test
+  public void 
testTopologyNotRedeployedIfNotChangedAndChangeRequiredAndNoChangesMade() throws 
Exception {
+    testTopologyRedeployment(true, false);
+  }
+
+  @Test
+  public void 
testTopologyNotRedeployedIfNotChangedAndChangeRequiredAndChangesWereMade() 
throws Exception {
+    testTopologyRedeployment(true, true);
+  }
+
+  private void testTopologyRedeployment(boolean requiresChange, boolean 
doChange) throws Exception {
     final File dir = createDir();
     try {
       final String topologyFileName = "one.xml";
@@ -762,6 +772,17 @@ public class DefaultTopologyServiceTest {
         topologyService.reloadTopologies();
         assertThat(topoListener.events.size(), is(0));
       }
+
+      if (doChange) {
+        // if topology is updated, even if change is not required or timestamp 
is older
+        // (due to previous topology processing) -> an update event must be 
triggered
+        TestUtils.updateFile(topologyDir, topologyFileName, requiresChange ? 
"host-one-b" : "host-one", "host-one-c");
+        topologyService.reloadTopologies();
+        assertThat(topoListener.events.size(), is(1));
+        events = topoListener.events.get(0);
+        assertThat(events.size(), is(1));
+        assertThat(events.get(0).getType(), is(TopologyEvent.Type.UPDATED));
+      }
     } finally {
       FileUtils.deleteQuietly(dir);
     }

Reply via email to