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);
}