From 533846e02656784b744639c7b81bcd7675a77fd7 Mon Sep 17 00:00:00 2001 From: Axel Uhl Date: Tue, 23 Feb 2021 23:45:17 +0100 Subject: [PATCH] bug4811: made extraction of start time and Expedition UDP port null-safe, thus backward-compatible --- .../src/com/sap/sailing/landscape/test/TestProcedures.java | 5 ++++- .../ui/server/LandscapeManagementWriteServiceImpl.java | 5 +++-- .../sailing/landscape/impl/SailingAnalyticsProcessImpl.java | 6 ++++-- .../com/sap/sailing/landscape/procedures/UpgradeAmi.java | 5 +++-- .../com/sap/sse/landscape/aws/impl/AwsLandscapeImpl.java | 4 +++- 5 files changed, 17 insertions(+), 8 deletions(-) diff --git a/java/com.sap.sailing.landscape.test/src/com/sap/sailing/landscape/test/TestProcedures.java b/java/com.sap.sailing.landscape.test/src/com/sap/sailing/landscape/test/TestProcedures.java index f0662620fe9..47f0cbc1471 100755 --- a/java/com.sap.sailing.landscape.test/src/com/sap/sailing/landscape/test/TestProcedures.java +++ b/java/com.sap.sailing.landscape.test/src/com/sap/sailing/landscape/test/TestProcedures.java @@ -33,6 +33,7 @@ import com.sap.sailing.landscape.impl.SailingAnalyticsProcessImpl; import com.sap.sailing.landscape.procedures.DeployProcessOnMultiServer; import com.sap.sailing.landscape.procedures.SailingAnalyticsApplicationConfiguration; import com.sap.sailing.landscape.procedures.SailingAnalyticsMasterConfiguration; +import com.sap.sailing.landscape.procedures.SailingProcessConfigurationVariables; import com.sap.sailing.landscape.procedures.StartMultiServer; import com.sap.sailing.landscape.procedures.StartSailingAnalyticsHost; import com.sap.sailing.landscape.procedures.StartSailingAnalyticsMasterHost; @@ -166,7 +167,9 @@ public class TestProcedures { ProcessFactory, SailingAnalyticsHost> processFactoryFromHostAndServerDirectory = (theHost, thePort, dir, telnetPort, serverName, additionalProperties)->{ try { - return new SailingAnalyticsProcessImpl(thePort, theHost, dir, telnetPort, serverName); + final Number expeditionUdpPort = (Number) additionalProperties.get(SailingProcessConfigurationVariables.EXPEDITION_PORT.name()); + return new SailingAnalyticsProcessImpl(thePort, theHost, dir, telnetPort, serverName, + expeditionUdpPort == null ? null : expeditionUdpPort.intValue()); } catch (Exception e) { throw new RuntimeException(e); } diff --git a/java/com.sap.sailing.landscape.ui/src/com/sap/sailing/landscape/ui/server/LandscapeManagementWriteServiceImpl.java b/java/com.sap.sailing.landscape.ui/src/com/sap/sailing/landscape/ui/server/LandscapeManagementWriteServiceImpl.java index 1da0a818dfb..d52ff6429ac 100755 --- a/java/com.sap.sailing.landscape.ui/src/com/sap/sailing/landscape/ui/server/LandscapeManagementWriteServiceImpl.java +++ b/java/com.sap.sailing.landscape.ui/src/com/sap/sailing/landscape/ui/server/LandscapeManagementWriteServiceImpl.java @@ -214,8 +214,9 @@ public class LandscapeManagementWriteServiceImpl extends ResultCachingProxiedRem final ProcessFactory, SailingAnalyticsHost> processFactoryFromHostAndServerDirectory = (host, port, serverDirectory, telnetPort, serverName, additionalProperties)->{ try { - return new SailingAnalyticsProcessImpl(port, host, serverDirectory, - ((Number) additionalProperties.get(SailingProcessConfigurationVariables.EXPEDITION_PORT.name())).intValue()); + final Number expeditionUdpPort = (Number) additionalProperties.get(SailingProcessConfigurationVariables.EXPEDITION_PORT.name()); + return new SailingAnalyticsProcessImpl(port, host, serverDirectory, telnetPort, serverName, + expeditionUdpPort == null ? null : expeditionUdpPort.intValue()); } catch (Exception e) { throw new RuntimeException(e); } diff --git a/java/com.sap.sailing.landscape/src/com/sap/sailing/landscape/impl/SailingAnalyticsProcessImpl.java b/java/com.sap.sailing.landscape/src/com/sap/sailing/landscape/impl/SailingAnalyticsProcessImpl.java index 901777d3986..7e7f44e1e04 100755 --- a/java/com.sap.sailing.landscape/src/com/sap/sailing/landscape/impl/SailingAnalyticsProcessImpl.java +++ b/java/com.sap.sailing.landscape/src/com/sap/sailing/landscape/impl/SailingAnalyticsProcessImpl.java @@ -56,8 +56,9 @@ implements SailingAnalyticsProcess { public SailingAnalyticsProcessImpl(int port, ApplicationProcessHost> host, - String serverDirectory, int telnetPort, String serverName) { + String serverDirectory, int telnetPort, String serverName, Integer expeditionUdpPort) { super(port, host, serverDirectory, telnetPort, serverName); + this.expeditionUdpPort = expeditionUdpPort; } @Override @@ -109,7 +110,8 @@ implements SailingAnalyticsProcess { @Override public TimePoint getStartTimePoint(Optional optionalTimeout) throws IOException, ParseException { final JSONObject status = getStatus(optionalTimeout); - return TimePoint.of(((Number) status.get("start_time_millis")).longValue()); + final Number startTimeMillis = (Number) status.get("start_time_millis"); + return startTimeMillis == null ? null : TimePoint.of(startTimeMillis.longValue()); } @Override diff --git a/java/com.sap.sailing.landscape/src/com/sap/sailing/landscape/procedures/UpgradeAmi.java b/java/com.sap.sailing.landscape/src/com/sap/sailing/landscape/procedures/UpgradeAmi.java index 156b53c1812..3b92125fd0c 100755 --- a/java/com.sap.sailing.landscape/src/com/sap/sailing/landscape/procedures/UpgradeAmi.java +++ b/java/com.sap.sailing.landscape/src/com/sap/sailing/landscape/procedures/UpgradeAmi.java @@ -253,8 +253,9 @@ implements Procedure, StartFromSailingAnalyticsImage { new ApplicationProcessHostImpl<>(instanceId, az, landscape, (host, port, serverDirectory, telnetPort, serverName, additionalProperties)->{ try { - // TODO add expedition UDP port from additional properties; requires using SailingAnalyticsHostImpl instead... - return new SailingAnalyticsProcessImpl(port, host, serverDirectory, telnetPort, serverName); + final Number expeditionUdpPort = (Number) additionalProperties.get(SailingProcessConfigurationVariables.EXPEDITION_PORT.name()); + return new SailingAnalyticsProcessImpl(port, host, serverDirectory, telnetPort, serverName, + expeditionUdpPort == null ? null : expeditionUdpPort.intValue()); } catch (Exception e) { throw new RuntimeException(e); } diff --git a/java/com.sap.sse.landscape.aws/src/com/sap/sse/landscape/aws/impl/AwsLandscapeImpl.java b/java/com.sap.sse.landscape.aws/src/com/sap/sse/landscape/aws/impl/AwsLandscapeImpl.java index 35e461768ec..b171a67c6b7 100755 --- a/java/com.sap.sse.landscape.aws/src/com/sap/sse/landscape/aws/impl/AwsLandscapeImpl.java +++ b/java/com.sap.sse.landscape.aws/src/com/sap/sse/landscape/aws/impl/AwsLandscapeImpl.java @@ -1096,7 +1096,9 @@ public class AwsLandscapeImpl implements AwsLandscape } else { // check if it's a new or else a newer master: if (!mastersByServerName.containsKey(serverName) - || mastersByServerName.get(serverName).getStartTimePoint(optionalTimeout).before(applicationProcess.getStartTimePoint(optionalTimeout))) { + || Comparator.nullsLast(Comparator.naturalOrder()).compare( + mastersByServerName.get(serverName).getStartTimePoint(optionalTimeout), + applicationProcess.getStartTimePoint(optionalTimeout)) < 0) { mastersByServerName.put(serverName, applicationProcess); } }