From 7d728d3eb02622c0c7252722d52198b7206439af Mon Sep 17 00:00:00 2001 From: Alexander Ries Date: Tue, 24 Mar 2015 09:22:05 +0100 Subject: [PATCH 01/21] removed warnings from eventlogo --- .../com/sap/sailing/dashboards/gwt/client/EventLogo.java | 9 --------- 1 file changed, 9 deletions(-) diff --git a/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/EventLogo.java b/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/EventLogo.java index b01619d6d1d..cbe16625fae 100644 --- a/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/EventLogo.java +++ b/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/EventLogo.java @@ -4,8 +4,6 @@ import java.util.UUID; import java.util.logging.Level; import java.util.logging.Logger; -import com.google.gwt.core.client.Scheduler; -import com.google.gwt.core.client.Scheduler.ScheduledCommand; import com.google.gwt.dom.client.Style.Visibility; import com.google.gwt.user.client.rpc.AsyncCallback; import com.google.gwt.user.client.ui.Image; @@ -23,7 +21,6 @@ public class EventLogo extends Image { public static EventLogo getEventLogoFromEventId(SailingServiceAsync sailingServiceAsync, String eventId) { final EventLogo eventLogo = new EventLogo(); - eventLogo.getElement().setAttribute("src", "someURL"); try { final UUID eventUUID = UUID.fromString(eventId); sailingServiceAsync.getEventById(eventUUID, true, new AsyncCallback() { @@ -31,17 +28,11 @@ public class EventLogo extends Image { public void onSuccess(final EventDTO event) { logger.log(Level.INFO, "GOT EVENT: "); final String logoUrl = event.getLogoImageURL(); -// Scheduler.get().scheduleDeferred(new ScheduledCommand() { -// -// @Override -// public void execute() { if (logoUrl != null) { eventLogo.getElement().setAttribute("src", logoUrl); } else { eventLogo.getElement().getStyle().setVisibility(Visibility.HIDDEN); } -// } -// }); } @Override From 41fd9feda29a84bf845b050d5a0464f4dd1e014b Mon Sep 17 00:00:00 2001 From: Alexander Ries Date: Tue, 24 Mar 2015 13:34:18 +0100 Subject: [PATCH 02/21] removed possible null pointer at loading event logo --- .../gwt/client/RibDashboardPanel.java | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/RibDashboardPanel.java b/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/RibDashboardPanel.java index 25ea2480e49..6ef44cc1011 100644 --- a/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/RibDashboardPanel.java +++ b/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/RibDashboardPanel.java @@ -91,13 +91,7 @@ public class RibDashboardPanel extends Composite implements RibDashboardDataRetr windcharthint.getElement().setInnerText(stringConstants.dashboardWindChartHint()); windloadinghintleft.setInnerText(stringConstants.dashboardWindBotLoading()); windloadinghintright.setInnerText(stringConstants.dashboardWindBotLoading()); - - String eventId = Window.Location.getParameter(EVENT_ID_PARAMETER); - EventLogo eventLogo = EventLogo.getEventLogoFromEventId(sailingServiceAsync, eventId); - if(eventLogo != null){ - Document.get().getBody().appendChild(eventLogo.getElement()); - } - + loadAndDisplayEventLogo(sailingServiceAsync); } private void initLogos() { @@ -106,6 +100,16 @@ public class RibDashboardPanel extends Composite implements RibDashboardDataRetr logo.getElement().addClassName(style.logo()); Document.get().getBody().appendChild(logo.getElement()); } + + private void loadAndDisplayEventLogo(SailingServiceAsync sailingServiceAsync){ + String eventId = Window.Location.getParameter(EVENT_ID_PARAMETER); + if (eventId != null) { + EventLogo eventLogo = EventLogo.getEventLogoFromEventId(sailingServiceAsync, eventId); + if (eventLogo != null) { + Document.get().getBody().appendChild(eventLogo.getElement()); + } + } + } private void initWindBotComponents(List windBotIDs, WindBotDataRetrieverProvider windBotDataRetrieverProvider) { From 4f18c1c36666193fc909a0ebfd7f1479f33e1ae7 Mon Sep 17 00:00:00 2001 From: Axel Uhl Date: Mon, 30 Mar 2015 02:09:38 +0200 Subject: [PATCH 03/21] use any free server port for replication servlet in test mode --- .../test/TrackRaceReplicationTest.java | 4 ++-- .../src/com/sap/sse/common/Util.java | 2 +- .../AbstractMailServiceReplicationTest.java | 8 ------- .../AbstractServerReplicationTestSetUp.java | 24 ++++++++++--------- ...licationLeadingToEmailReplicationTest.java | 6 ----- 5 files changed, 16 insertions(+), 28 deletions(-) diff --git a/java/com.sap.sailing.server.replication.test/src/com/sap/sailing/server/replication/test/TrackRaceReplicationTest.java b/java/com.sap.sailing.server.replication.test/src/com/sap/sailing/server/replication/test/TrackRaceReplicationTest.java index 2d06abc838b..f5b3eb811e8 100755 --- a/java/com.sap.sailing.server.replication.test/src/com/sap/sailing/server/replication/test/TrackRaceReplicationTest.java +++ b/java/com.sap.sailing.server.replication.test/src/com/sap/sailing/server/replication/test/TrackRaceReplicationTest.java @@ -174,7 +174,7 @@ public class TrackRaceReplicationTest extends AbstractServerReplicationTest { MillisecondsTimePoint now = MillisecondsTimePoint.now(); assertFalse(now.equals(replicaTrackedRace.getStartOfRace())); ((DynamicTrackedRace) masterTrackedRace).setStartTimeReceived(now); - Thread.sleep(5000); + Thread.sleep(1000); assertEquals(now, replicaTrackedRace.getStartOfRace()); } @@ -188,7 +188,7 @@ public class TrackRaceReplicationTest extends AbstractServerReplicationTest { masterTrackedRace.setWindSourcesToExclude(Collections.singleton(new WindSourceImpl(WindSourceType.WEB))); assertEquals(1, Util.size(masterTrackedRace.getWindSourcesToExclude())); assertEquals(WindSourceType.WEB, masterTrackedRace.getWindSourcesToExclude().iterator().next().getType()); - Thread.sleep(5000); + Thread.sleep(1000); assertEquals(1, Util.size(replicaTrackedRace.getWindSourcesToExclude())); assertEquals(WindSourceType.WEB, replicaTrackedRace.getWindSourcesToExclude().iterator().next().getType()); } diff --git a/java/com.sap.sse.common/src/com/sap/sse/common/Util.java b/java/com.sap.sse.common/src/com/sap/sse/common/Util.java index 75230764cee..6a56acbdfbe 100755 --- a/java/com.sap.sse.common/src/com/sap/sse/common/Util.java +++ b/java/com.sap.sse.common/src/com/sap/sse/common/Util.java @@ -338,7 +338,7 @@ public class Util { } public static String join(String separator, Iterable nameds) { - return join(separator, toArray(nameds, new Named[size(nameds)])); + return join(separator, toArray(nameds, new Named[0])); } public static String join(String separator, Named... nameds) { diff --git a/java/com.sap.sse.mail.replication.testsupport/src/com/sap/sse/mail/replication/testsupport/AbstractMailServiceReplicationTest.java b/java/com.sap.sse.mail.replication.testsupport/src/com/sap/sse/mail/replication/testsupport/AbstractMailServiceReplicationTest.java index 835afedebab..054c8d2de39 100644 --- a/java/com.sap.sse.mail.replication.testsupport/src/com/sap/sse/mail/replication/testsupport/AbstractMailServiceReplicationTest.java +++ b/java/com.sap.sse.mail.replication.testsupport/src/com/sap/sse/mail/replication/testsupport/AbstractMailServiceReplicationTest.java @@ -37,14 +37,6 @@ public class AbstractMailServiceReplicationTest extends AbstractServerWithSingle } public static class MailServerReplicationTestSetUp extends AbstractServerReplicationTestSetUp { - public MailServerReplicationTestSetUp() { - super(); - } - - public MailServerReplicationTestSetUp(int servletPort) { - super(servletPort); - } - @Override protected MailServiceImpl createNewMaster() throws MailException { return createMailCountingService(true); diff --git a/java/com.sap.sse.replication.testsupport/src/com/sap/sse/replication/testsupport/AbstractServerReplicationTestSetUp.java b/java/com.sap.sse.replication.testsupport/src/com/sap/sse/replication/testsupport/AbstractServerReplicationTestSetUp.java index 912a95e821b..935a0058734 100644 --- a/java/com.sap.sse.replication.testsupport/src/com/sap/sse/replication/testsupport/AbstractServerReplicationTestSetUp.java +++ b/java/com.sap.sse.replication.testsupport/src/com/sap/sse/replication/testsupport/AbstractServerReplicationTestSetUp.java @@ -45,7 +45,7 @@ public abstract class AbstractServerReplicationTestSetUp replicaReplicator; @@ -54,7 +54,6 @@ public abstract class AbstractServerReplicationTestSetUp replicaReplicator = new ReplicationServiceTestImpl(exchangeName, exchangeHost, rim, replicaDescriptor, - this.replica, this.master, masterReplicator, masterDescriptor, servletPort); + this.replica, this.master, masterReplicator, masterDescriptor); + masterDescriptor = replicaReplicator.getMasterDescriptor(); + servletPort = masterDescriptor.getServletPort(); Pair, ReplicationMasterDescriptor> result = new Pair<>(replicaReplicator, masterDescriptor); logger.info("starting initial load transmission servlet for "+getClass().getName()); initialLoadTestServerThread = replicaReplicator.startInitialLoadTransmissionServlet(); @@ -197,28 +197,30 @@ public abstract class AbstractServerReplicationTestSetUp Date: Mon, 30 Mar 2015 10:10:07 +0200 Subject: [PATCH 04/21] partly reverting commit 21d5d33f781d1930942724a3732c63b6cce660d3 to see what is causing the issue in Hudson --- .../com/sap/sailing/server/impl/RacingEventServiceImpl.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/java/com.sap.sailing.server/src/com/sap/sailing/server/impl/RacingEventServiceImpl.java b/java/com.sap.sailing.server/src/com/sap/sailing/server/impl/RacingEventServiceImpl.java index 7f343217b74..982c00f6d03 100755 --- a/java/com.sap.sailing.server/src/com/sap/sailing/server/impl/RacingEventServiceImpl.java +++ b/java/com.sap.sailing.server/src/com/sap/sailing/server/impl/RacingEventServiceImpl.java @@ -2291,7 +2291,8 @@ public class RacingEventServiceImpl implements RacingEventService, ClearStateTes @Override public ClassLoader getDeserializationClassLoader() { - return getCombinedMasterDataClassLoader(); +// return getCombinedMasterDataClassLoader(); // FIXME bug 2743: tentatively going back to getClass().getClassLoader() to see which part of the commit was causing the two replication tests to fail + return getClass().getClassLoader(); } @Override From b8ef26800fef488bebef6575003c63ed2fb3ac3c Mon Sep 17 00:00:00 2001 From: Axel Uhl Date: Mon, 30 Mar 2015 10:44:08 +0200 Subject: [PATCH 05/21] improved replication test logging; improved Javadoc for RaceTracker.stop(...) --- .../sailing/domain/tracking/RaceTracker.java | 6 +++- .../test/TrackRaceReplicationTest.java | 31 ++++++++++++------- .../impl/ReplicationMasterDescriptorImpl.java | 6 +++- 3 files changed, 30 insertions(+), 13 deletions(-) diff --git a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/RaceTracker.java b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/RaceTracker.java index 983f46386e1..1b4294b5070 100755 --- a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/RaceTracker.java +++ b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/RaceTracker.java @@ -42,7 +42,11 @@ public interface RaceTracker { /** * Stops tracking the races. - * @param preemptive TODO + * + * @param preemptive + * if false, the tracker will continue to process data already received but will stop + * receiving new data. If true, the tracker will stop processing data immediately, ignoring + * (dropping) all data already received but not yet processed. */ void stop(boolean preemptive) throws MalformedURLException, IOException, InterruptedException; diff --git a/java/com.sap.sailing.server.replication.test/src/com/sap/sailing/server/replication/test/TrackRaceReplicationTest.java b/java/com.sap.sailing.server.replication.test/src/com/sap/sailing/server/replication/test/TrackRaceReplicationTest.java index f5b3eb811e8..970b2f27d40 100755 --- a/java/com.sap.sailing.server.replication.test/src/com/sap/sailing/server/replication/test/TrackRaceReplicationTest.java +++ b/java/com.sap.sailing.server.replication.test/src/com/sap/sailing/server/replication/test/TrackRaceReplicationTest.java @@ -129,6 +129,7 @@ public class TrackRaceReplicationTest extends AbstractServerReplicationTest { @Test public void testReassignmentToLeaderboardReplication() throws Exception { + logger.info("Running testReassignmentToLeaderboardReplication()"); final String leaderboardName = "Test Leaderboard"; Leaderboard masterLeaderboard = master.apply(new CreateFlexibleLeaderboard(leaderboardName, null, new int[0], new LowPoint(), null)); final String columnName = "R1"; @@ -153,10 +154,12 @@ public class TrackRaceReplicationTest extends AbstractServerReplicationTest { RaceColumn column = replicaLeaderboard.getRaceColumnByName(columnName); assertNotNull(column); assertSame(replicaTrackedRace, column.getTrackedRace(defaultFleet)); + logger.info("Done running testReassignmentToLeaderboardReplication()"); } @Test public void testRaceTimeReplication() throws InterruptedException, Exception { + logger.info("Running testRaceTimeReplication()"); startTracking(); // now wait at least until the start of tracking time has been received on the master copy boolean receivedStartAndEndOfTracking = master.getTrackedRace(raceIdentifier).getStartOfTracking() != null && @@ -176,21 +179,27 @@ public class TrackRaceReplicationTest extends AbstractServerReplicationTest { ((DynamicTrackedRace) masterTrackedRace).setStartTimeReceived(now); Thread.sleep(1000); assertEquals(now, replicaTrackedRace.getStartOfRace()); + logger.info("Done running testRaceTimeReplication()"); } @Test public void testWindSourcesToExcludeReplication() throws InterruptedException, Exception { - startTracking(); - Thread.sleep(1000); - TrackedRace replicaTrackedRace = replica.getTrackedRace(raceIdentifier); - assertTrue(Util.isEmpty(masterTrackedRace.getWindSourcesToExclude())); - assertTrue(Util.isEmpty(replicaTrackedRace.getWindSourcesToExclude())); - masterTrackedRace.setWindSourcesToExclude(Collections.singleton(new WindSourceImpl(WindSourceType.WEB))); - assertEquals(1, Util.size(masterTrackedRace.getWindSourcesToExclude())); - assertEquals(WindSourceType.WEB, masterTrackedRace.getWindSourcesToExclude().iterator().next().getType()); - Thread.sleep(1000); - assertEquals(1, Util.size(replicaTrackedRace.getWindSourcesToExclude())); - assertEquals(WindSourceType.WEB, replicaTrackedRace.getWindSourcesToExclude().iterator().next().getType()); + try { + logger.info("Running testWindSourcesToExcludeReplication()"); + startTracking(); + Thread.sleep(1000); + TrackedRace replicaTrackedRace = replica.getTrackedRace(raceIdentifier); + assertTrue(Util.isEmpty(masterTrackedRace.getWindSourcesToExclude())); + assertTrue(Util.isEmpty(replicaTrackedRace.getWindSourcesToExclude())); + masterTrackedRace.setWindSourcesToExclude(Collections.singleton(new WindSourceImpl(WindSourceType.WEB))); + assertEquals(1, Util.size(masterTrackedRace.getWindSourcesToExclude())); + assertEquals(WindSourceType.WEB, masterTrackedRace.getWindSourcesToExclude().iterator().next().getType()); + Thread.sleep(1000); + assertEquals(1, Util.size(replicaTrackedRace.getWindSourcesToExclude())); + assertEquals(WindSourceType.WEB, replicaTrackedRace.getWindSourcesToExclude().iterator().next().getType()); + } finally { + logger.info("Done running testWindSourcesToExcludeReplication()"); + } } @After diff --git a/java/com.sap.sse.replication/src/com/sap/sse/replication/impl/ReplicationMasterDescriptorImpl.java b/java/com.sap.sse.replication/src/com/sap/sse/replication/impl/ReplicationMasterDescriptorImpl.java index d199fcfc44e..c9248c9697c 100755 --- a/java/com.sap.sse.replication/src/com/sap/sse/replication/impl/ReplicationMasterDescriptorImpl.java +++ b/java/com.sap.sse.replication/src/com/sap/sse/replication/impl/ReplicationMasterDescriptorImpl.java @@ -7,6 +7,8 @@ import java.net.URL; import java.util.HashMap; import java.util.Map; import java.util.UUID; +import java.util.logging.Level; +import java.util.logging.Logger; import java.util.stream.Collectors; import java.util.stream.StreamSupport; @@ -19,6 +21,8 @@ import com.sap.sse.replication.Replicable; import com.sap.sse.replication.ReplicationMasterDescriptor; public class ReplicationMasterDescriptorImpl implements ReplicationMasterDescriptor { + private static final Logger logger = Logger.getLogger(ReplicationMasterDescriptorImpl.class.getName()); + private static final String REPLICATION_SERVLET = "/replication/replication"; private final String masterServletHostname; private final String exchangeName; @@ -161,7 +165,7 @@ public class ReplicationMasterDescriptorImpl implements ReplicationMasterDescrip } catch (Exception ex) { // ignore any exception during abort. close can yield a broad // number of exceptions that we don't want to know or to log. - ex.printStackTrace(); + logger.log(Level.SEVERE, "Exception while closing replication channel consumer", ex); } } From 9001649b9927dd86dc986a20c8053859615ceca5 Mon Sep 17 00:00:00 2001 From: Axel Uhl Date: Mon, 30 Mar 2015 11:50:48 +0200 Subject: [PATCH 06/21] fixed waiting on Replicator's queue to become empty; this avoids the AlreadyClosedExceptions, it seems, but the testWindSourcesToExcludeReplication test still fails locally --- .../sap/sailing/server/impl/RacingEventServiceImpl.java | 4 ++-- .../com/sap/sse/replication/impl/ReplicationReceiver.java | 8 +++++--- .../sap/sse/replication/impl/ReplicationServiceImpl.java | 7 ++++++- 3 files changed, 13 insertions(+), 6 deletions(-) diff --git a/java/com.sap.sailing.server/src/com/sap/sailing/server/impl/RacingEventServiceImpl.java b/java/com.sap.sailing.server/src/com/sap/sailing/server/impl/RacingEventServiceImpl.java index 982c00f6d03..461b36b8f73 100755 --- a/java/com.sap.sailing.server/src/com/sap/sailing/server/impl/RacingEventServiceImpl.java +++ b/java/com.sap.sailing.server/src/com/sap/sailing/server/impl/RacingEventServiceImpl.java @@ -2291,8 +2291,8 @@ public class RacingEventServiceImpl implements RacingEventService, ClearStateTes @Override public ClassLoader getDeserializationClassLoader() { -// return getCombinedMasterDataClassLoader(); // FIXME bug 2743: tentatively going back to getClass().getClassLoader() to see which part of the commit was causing the two replication tests to fail - return getClass().getClassLoader(); + return getCombinedMasterDataClassLoader(); // FIXME bug 2743: tentatively going back to getClass().getClassLoader() to see which part of the commit was causing the two replication tests to fail +// return getClass().getClassLoader(); } @Override diff --git a/java/com.sap.sse.replication/src/com/sap/sse/replication/impl/ReplicationReceiver.java b/java/com.sap.sse.replication/src/com/sap/sse/replication/impl/ReplicationReceiver.java index f391ea47be2..b3ae0cac747 100755 --- a/java/com.sap.sse.replication/src/com/sap/sse/replication/impl/ReplicationReceiver.java +++ b/java/com.sap.sse.replication/src/com/sap/sse/replication/impl/ReplicationReceiver.java @@ -156,6 +156,11 @@ public class ReplicationReceiver implements Runnable { Delivery delivery = consumer.nextDelivery(); messageCount++; if (_queue != null) { + synchronized (this) { + if (getInboundMessageQueue().isEmpty()) { + notifyAll(); // wake up anyone waiting for isQueueEmpty() + } + } if (logsFine || messageCount % 10l == 0) { try { logger.log(messageCount%10l==0 ? Level.INFO : Level.FINE, @@ -313,9 +318,6 @@ public class ReplicationReceiver implements Runnable { queue = new ArrayList<>(); queueByReplicableIdAsString.put(replicableIdAsString, queue); } - if (queue.isEmpty()) { - notifyAll(); - } queue.add(new Pair>(replicable.getId().toString(), operation)); assert !queue.isEmpty(); } diff --git a/java/com.sap.sse.replication/src/com/sap/sse/replication/impl/ReplicationServiceImpl.java b/java/com.sap.sse.replication/src/com/sap/sse/replication/impl/ReplicationServiceImpl.java index c47c5677ade..15f00691519 100755 --- a/java/com.sap.sse.replication/src/com/sap/sse/replication/impl/ReplicationServiceImpl.java +++ b/java/com.sap.sse.replication/src/com/sap/sse/replication/impl/ReplicationServiceImpl.java @@ -246,7 +246,12 @@ public class ReplicationServiceImpl implements ReplicationService { replicator = null; serverUUID = UUID.randomUUID(); logger.info("Setting " + serverUUID.toString() + " as unique replication identifier."); - + } + + @Override + protected void finalize() { + logger.info("terminating timer "+timer); + timer.cancel(); } protected ServiceTracker, Replicable> getReplicableTracker() { From 4034db48cce33edceefd92b3b53642faab5e1dd7 Mon Sep 17 00:00:00 2001 From: Alexander Ries Date: Mon, 30 Mar 2015 13:00:42 +0200 Subject: [PATCH 07/21] removed possible null pointer in ribdashboardservice when loading competitors from leaderboard --- .../StartlineAnalysisComponent.java | 2 +- .../gwt/server/RibDashboardServiceImpl.java | 21 ++++++++++++------- 2 files changed, 15 insertions(+), 8 deletions(-) diff --git a/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/startanalysis/StartlineAnalysisComponent.java b/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/startanalysis/StartlineAnalysisComponent.java index f85f6af909f..8f39b86ee28 100644 --- a/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/startanalysis/StartlineAnalysisComponent.java +++ b/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/startanalysis/StartlineAnalysisComponent.java @@ -240,7 +240,7 @@ public class StartlineAnalysisComponent extends Composite implements HasWidgets ribDashboardServiceAsync.getCompetitorsInLeaderboard(leaderboardName, new AsyncCallback>() { @Override public void onSuccess(List result) { - if (!competitorSelectionPopup.isShown()) + if (result != null && !competitorSelectionPopup.isShown()) competitorSelectionPopup.show(result); } diff --git a/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/server/RibDashboardServiceImpl.java b/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/server/RibDashboardServiceImpl.java index 69ab37d04f0..6a988f36ffd 100644 --- a/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/server/RibDashboardServiceImpl.java +++ b/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/server/RibDashboardServiceImpl.java @@ -236,13 +236,16 @@ public class RibDashboardServiceImpl extends RemoteServiceServlet implements Rib public List getStartAnalysisListForCompetitorIDAndLeaderboardName(String competitorIdAsString, String leaderboardName) { List startAnalysisDTOs = new ArrayList(); - Competitor competitor = baseDomainFactory.getCompetitorStore().getExistingCompetitorByIdAsString( - competitorIdAsString); - List trackedRacesForLeaderBoardName = getTrackedRacesFromLeaderboard(leaderboardName); - for (TrackedRace trackedRace : trackedRacesForLeaderBoardName) { - StartAnalysisDTO startAnalysisDTO = startAnalysisCreationController.checkStartAnalysisForCompetitorInTrackedRace(competitor, trackedRace); - if (startAnalysisDTO != null) - startAnalysisDTOs.add(startAnalysisDTO); + if (leaderboardName != null) { + Competitor competitor = baseDomainFactory.getCompetitorStore().getExistingCompetitorByIdAsString( + competitorIdAsString); + List trackedRacesForLeaderBoardName = getTrackedRacesFromLeaderboard(leaderboardName); + for (TrackedRace trackedRace : trackedRacesForLeaderBoardName) { + StartAnalysisDTO startAnalysisDTO = startAnalysisCreationController + .checkStartAnalysisForCompetitorInTrackedRace(competitor, trackedRace); + if (startAnalysisDTO != null) + startAnalysisDTOs.add(startAnalysisDTO); + } } return startAnalysisDTOs; } @@ -250,8 +253,12 @@ public class RibDashboardServiceImpl extends RemoteServiceServlet implements Rib @Override public List getCompetitorsInLeaderboard(String leaderboardName) { logger.log(Level.INFO, "getCompetitorsInLeaderboard(...) Request."); + if(leaderboardName != null){ Leaderboard lb = getRacingEventService().getLeaderboardByName(leaderboardName); return baseDomainFactory.getCompetitorDTOList(lb.getCompetitorsFromBestToWorst(new MillisecondsTimePoint( new Date()))); + }else{ + return null; + } } } \ No newline at end of file From b5ea0742172129d1f0a8973b76a94ba49968d00d Mon Sep 17 00:00:00 2001 From: Axel Uhl Date: Mon, 30 Mar 2015 13:16:38 +0200 Subject: [PATCH 08/21] fixing deserialization for new raceStates weak hash map in TrackedRaceImpl --- .../com/sap/sailing/domain/tracking/impl/TrackedRaceImpl.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/impl/TrackedRaceImpl.java b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/impl/TrackedRaceImpl.java index 165e6db62ea..7d2721240a2 100755 --- a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/impl/TrackedRaceImpl.java +++ b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/impl/TrackedRaceImpl.java @@ -257,7 +257,7 @@ public abstract class TrackedRaceImpl extends TrackedRaceWithWindEssentials impl * these race states can be garbage-collected when the race log is no longer attached. The race states are created * lazily, synchronizing on this weak hash map. */ - protected final transient WeakHashMap raceStates; + protected transient WeakHashMap raceStates; protected transient ConcurrentHashMap attachedRegattaLogs; @@ -494,6 +494,7 @@ public abstract class TrackedRaceImpl extends TrackedRaceWithWindEssentials impl */ private void readObject(ObjectInputStream ois) throws ClassNotFoundException, IOException, PatchFailedException { ois.defaultReadObject(); + raceStates = new WeakHashMap<>(); attachedRaceLogs = new ConcurrentHashMap<>(); markPassingsTimes = new ArrayList>>(); // The short time wind cache needs to be there before operations such as maneuver recalculation try to access it From ae53d23cc17cb3d356b535ce93496fb98e1c269a Mon Sep 17 00:00:00 2001 From: Axel Uhl Date: Mon, 30 Mar 2015 16:24:21 +0200 Subject: [PATCH 09/21] adjusted versions in feature.xml, particularly of mongodb.driver and gwt.osgi --- java/com.sap.sailing.feature/feature.xml | 902 +++++++++++------------ 1 file changed, 451 insertions(+), 451 deletions(-) diff --git a/java/com.sap.sailing.feature/feature.xml b/java/com.sap.sailing.feature/feature.xml index 94b606ebe74..9e8ec6fc004 100755 --- a/java/com.sap.sailing.feature/feature.xml +++ b/java/com.sap.sailing.feature/feature.xml @@ -1,454 +1,454 @@ - - - - + + + + The SAP Sailing Server. Provides connectivity to a TracTrac live GPS feed as well as a live feed from an Expedition system. -Computes leaderboard information for sailing races and offers RESTful APIs to all of this. - - - - [Enter Copyright Description here.] - - - - [Enter License Description here.] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Computes leaderboard information for sailing races and offers RESTful APIs to all of this. + + + + [Enter Copyright Description here.] + + + + [Enter License Description here.] + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + From c74a3092661236b13ff0b667e1f08cc3fac11d22 Mon Sep 17 00:00:00 2001 From: Axel Uhl Date: Mon, 30 Mar 2015 16:30:38 +0200 Subject: [PATCH 10/21] fixed bundle name for mongo driver in com.sap.sailing.feature's feature.xml --- java/com.sap.sailing.feature/feature.xml | 2 +- .../AbstractServerReplicationTestSetUp.java | 12 ++++++++++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/java/com.sap.sailing.feature/feature.xml b/java/com.sap.sailing.feature/feature.xml index 9e8ec6fc004..9991bd58a2e 100755 --- a/java/com.sap.sailing.feature/feature.xml +++ b/java/com.sap.sailing.feature/feature.xml @@ -24,7 +24,7 @@ Computes leaderboard information for sailing races and offers RESTful APIs to al - + diff --git a/java/com.sap.sse.replication.testsupport/src/com/sap/sse/replication/testsupport/AbstractServerReplicationTestSetUp.java b/java/com.sap.sse.replication.testsupport/src/com/sap/sse/replication/testsupport/AbstractServerReplicationTestSetUp.java index 935a0058734..ce6d8fcf286 100644 --- a/java/com.sap.sse.replication.testsupport/src/com/sap/sse/replication/testsupport/AbstractServerReplicationTestSetUp.java +++ b/java/com.sap.sse.replication.testsupport/src/com/sap/sse/replication/testsupport/AbstractServerReplicationTestSetUp.java @@ -179,6 +179,13 @@ public abstract class AbstractServerReplicationTestSetUp Date: Mon, 30 Mar 2015 16:33:12 +0200 Subject: [PATCH 11/21] removed obsolete com.sap.sse.gateway reference from sailing feature.xml --- java/com.sap.sailing.feature/feature.xml | 7 ------- 1 file changed, 7 deletions(-) diff --git a/java/com.sap.sailing.feature/feature.xml b/java/com.sap.sailing.feature/feature.xml index 9991bd58a2e..2aad440fdba 100755 --- a/java/com.sap.sailing.feature/feature.xml +++ b/java/com.sap.sailing.feature/feature.xml @@ -339,13 +339,6 @@ Computes leaderboard information for sailing races and offers RESTful APIs to al version="0.0.0" unpack="false"/> - - Date: Mon, 30 Mar 2015 16:38:21 +0200 Subject: [PATCH 12/21] fixing NPE in case polars for non-existing race are requested --- .../gwt/ui/server/SailingServiceImpl.java | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/server/SailingServiceImpl.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/server/SailingServiceImpl.java index 1b23ce39c06..03e2410f381 100755 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/server/SailingServiceImpl.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/server/SailingServiceImpl.java @@ -1424,12 +1424,18 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S @Override public Boolean getPolarResults(RegattaAndRaceIdentifier raceIdentifier) { + final Boolean result; TrackedRace trackedRace = getExistingTrackedRace(raceIdentifier); - BoatClass boatClass = trackedRace.getRace().getBoatClass(); - PolarDataService polarData = getService().getPolarDataService(); - PolarDiagram polarDiagram = new PolarDiagramGPS(boatClass, polarData); - return new Boolean(polarDiagram != null); - }; + if (trackedRace == null) { + result = false; + } else { + BoatClass boatClass = trackedRace.getRace().getBoatClass(); + PolarDataService polarData = getService().getPolarDataService(); + PolarDiagram polarDiagram = new PolarDiagramGPS(boatClass, polarData); + result = new Boolean(polarDiagram != null); + } + return result; + } @Override public SimulatorResultsDTO getSimulatorResults(RegattaAndRaceIdentifier raceIdentifier, Date from, Date prevStartTime) { From bc232925f10c5858206674e8436baf9315fe25ff Mon Sep 17 00:00:00 2001 From: Axel Uhl Date: Mon, 30 Mar 2015 16:41:11 +0200 Subject: [PATCH 13/21] use boolean instead of Boolean in getPolarResults --- .../java/com/sap/sailing/gwt/ui/client/SailingService.java | 2 +- .../com/sap/sailing/gwt/ui/server/SailingServiceImpl.java | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/SailingService.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/SailingService.java index 9dadbd5328d..98df542aab3 100755 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/SailingService.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/SailingService.java @@ -140,7 +140,7 @@ public interface SailingService extends RemoteService, FileStorageManagementGwtS WindInfoForRaceDTO getAveragedWindInfo(RegattaAndRaceIdentifier raceIdentifier, Date from, long millisecondsStepWidth, int numberOfFixes, double latDeg, double lngDeg, Collection windSources) throws NoWindException; - Boolean getPolarResults(RegattaAndRaceIdentifier raceIdentifier); + boolean getPolarResults(RegattaAndRaceIdentifier raceIdentifier); SimulatorResultsDTO getSimulatorResults(RegattaAndRaceIdentifier raceIdentifier, Date from, Date prevStartTime); diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/server/SailingServiceImpl.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/server/SailingServiceImpl.java index 03e2410f381..0f886bb2f75 100755 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/server/SailingServiceImpl.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/server/SailingServiceImpl.java @@ -1423,8 +1423,8 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S } @Override - public Boolean getPolarResults(RegattaAndRaceIdentifier raceIdentifier) { - final Boolean result; + public boolean getPolarResults(RegattaAndRaceIdentifier raceIdentifier) { + final boolean result; TrackedRace trackedRace = getExistingTrackedRace(raceIdentifier); if (trackedRace == null) { result = false; @@ -1432,7 +1432,7 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S BoatClass boatClass = trackedRace.getRace().getBoatClass(); PolarDataService polarData = getService().getPolarDataService(); PolarDiagram polarDiagram = new PolarDiagramGPS(boatClass, polarData); - result = new Boolean(polarDiagram != null); + result = polarDiagram != null; } return result; } From e8c6164f967f9ad2bc1497c1d2a07c2dc05f0b62 Mon Sep 17 00:00:00 2001 From: Axel Uhl Date: Mon, 30 Mar 2015 17:22:38 +0200 Subject: [PATCH 14/21] avoid NPE in TrackedRaceImpl.getLineMarksAndPositions in case the leg determining the direction in which to pass waypoint is not successfully obtained --- .../domain/tracking/impl/TrackedRaceImpl.java | 40 ++++++++++--------- 1 file changed, 22 insertions(+), 18 deletions(-) diff --git a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/impl/TrackedRaceImpl.java b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/impl/TrackedRaceImpl.java index 7d2721240a2..3a99253d461 100755 --- a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/impl/TrackedRaceImpl.java +++ b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/impl/TrackedRaceImpl.java @@ -3156,26 +3156,30 @@ public abstract class TrackedRaceImpl extends TrackedRaceWithWindEssentials impl if (!legs.isEmpty()) { if (allMarksHavePositions && numberOfMarks == 2) { final TrackedLeg legDeterminingDirection = getLegDeterminingDirectionInWhichToPassWaypoint(waypoint); - Distance crossTrackErrorOfMark0OnLineFromMark1ToNextWaypoint = markPositions.get(0) - .crossTrackError(markPositions.get(1), legDeterminingDirection.getLegBearing(timePoint)); - final Position portMarkPositionWhileApproachingLine; - final Position starboardMarkPositionWhileApproachingLine; - final Mark starboardMarkWhileApproachingLine; - final Mark portMarkWhileApproachingLine; - if (crossTrackErrorOfMark0OnLineFromMark1ToNextWaypoint.getMeters() < 0) { - portMarkWhileApproachingLine = Util.get(waypoint.getMarks(), 0); - portMarkPositionWhileApproachingLine = markPositions.get(0); - starboardMarkWhileApproachingLine = Util.get(waypoint.getMarks(), 1); - starboardMarkPositionWhileApproachingLine = markPositions.get(1); + if (legDeterminingDirection == null) { + result = null; } else { - portMarkWhileApproachingLine = Util.get(waypoint.getMarks(), 1); - portMarkPositionWhileApproachingLine = markPositions.get(1); - starboardMarkWhileApproachingLine = Util.get(waypoint.getMarks(), 0); - starboardMarkPositionWhileApproachingLine = markPositions.get(0); + Distance crossTrackErrorOfMark0OnLineFromMark1ToNextWaypoint = markPositions.get(0) + .crossTrackError(markPositions.get(1), legDeterminingDirection.getLegBearing(timePoint)); + final Position portMarkPositionWhileApproachingLine; + final Position starboardMarkPositionWhileApproachingLine; + final Mark starboardMarkWhileApproachingLine; + final Mark portMarkWhileApproachingLine; + if (crossTrackErrorOfMark0OnLineFromMark1ToNextWaypoint.getMeters() < 0) { + portMarkWhileApproachingLine = Util.get(waypoint.getMarks(), 0); + portMarkPositionWhileApproachingLine = markPositions.get(0); + starboardMarkWhileApproachingLine = Util.get(waypoint.getMarks(), 1); + starboardMarkPositionWhileApproachingLine = markPositions.get(1); + } else { + portMarkWhileApproachingLine = Util.get(waypoint.getMarks(), 1); + portMarkPositionWhileApproachingLine = markPositions.get(1); + starboardMarkWhileApproachingLine = Util.get(waypoint.getMarks(), 0); + starboardMarkPositionWhileApproachingLine = markPositions.get(0); + } + result = new LineMarksWithPositions(portMarkPositionWhileApproachingLine, + starboardMarkPositionWhileApproachingLine, starboardMarkWhileApproachingLine, + portMarkWhileApproachingLine); } - result = new LineMarksWithPositions(portMarkPositionWhileApproachingLine, - starboardMarkPositionWhileApproachingLine, starboardMarkWhileApproachingLine, - portMarkWhileApproachingLine); } else { result = null; // either the position(s) or one or more marks is/are unknown, or the waypoint is not a two-mark waypoint } From 273152b0b0ab436c64069202ac111fa567bcf9d0 Mon Sep 17 00:00:00 2001 From: Axel Uhl Date: Mon, 30 Mar 2015 18:27:04 +0200 Subject: [PATCH 15/21] temporarily taking back the pre-mature attempt to wait for replication queues to drain during test execution (c74a3092661236b13ff0b667e1f08cc3fac11d22) --- .../testsupport/AbstractServerReplicationTestSetUp.java | 7 ------- 1 file changed, 7 deletions(-) diff --git a/java/com.sap.sse.replication.testsupport/src/com/sap/sse/replication/testsupport/AbstractServerReplicationTestSetUp.java b/java/com.sap.sse.replication.testsupport/src/com/sap/sse/replication/testsupport/AbstractServerReplicationTestSetUp.java index ce6d8fcf286..3e381a61cf7 100644 --- a/java/com.sap.sse.replication.testsupport/src/com/sap/sse/replication/testsupport/AbstractServerReplicationTestSetUp.java +++ b/java/com.sap.sse.replication.testsupport/src/com/sap/sse/replication/testsupport/AbstractServerReplicationTestSetUp.java @@ -179,13 +179,6 @@ public abstract class AbstractServerReplicationTestSetUp Date: Mon, 30 Mar 2015 18:28:31 +0200 Subject: [PATCH 16/21] re-establishing the effects of c74a3092661236b13ff0b667e1f08cc3fac11d22; need to serve the replication service's monitor properly as queue drains --- .../testsupport/AbstractServerReplicationTestSetUp.java | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/java/com.sap.sse.replication.testsupport/src/com/sap/sse/replication/testsupport/AbstractServerReplicationTestSetUp.java b/java/com.sap.sse.replication.testsupport/src/com/sap/sse/replication/testsupport/AbstractServerReplicationTestSetUp.java index 3e381a61cf7..ce6d8fcf286 100644 --- a/java/com.sap.sse.replication.testsupport/src/com/sap/sse/replication/testsupport/AbstractServerReplicationTestSetUp.java +++ b/java/com.sap.sse.replication.testsupport/src/com/sap/sse/replication/testsupport/AbstractServerReplicationTestSetUp.java @@ -179,6 +179,13 @@ public abstract class AbstractServerReplicationTestSetUp Date: Mon, 30 Mar 2015 20:28:36 +0200 Subject: [PATCH 17/21] renamed isQueueEmpty to isQueueEmptyOrStopped; don't set thread context class loader in ReplicationReceiver: it's set in the replicable itself --- .../test/InitialLoadReplicationObjectIdentityTest.java | 2 +- .../test/PrematureOperationReceiptTest.java | 2 +- .../AbstractServerReplicationTestSetUp.java | 4 ++-- .../sap/sse/replication/impl/ReplicationReceiver.java | 10 ++++------ 4 files changed, 8 insertions(+), 10 deletions(-) diff --git a/java/com.sap.sailing.server.replication.test/src/com/sap/sailing/server/replication/test/InitialLoadReplicationObjectIdentityTest.java b/java/com.sap.sailing.server.replication.test/src/com/sap/sailing/server/replication/test/InitialLoadReplicationObjectIdentityTest.java index a2b082373bd..d7c330e03df 100755 --- a/java/com.sap.sailing.server.replication.test/src/com/sap/sailing/server/replication/test/InitialLoadReplicationObjectIdentityTest.java +++ b/java/com.sap.sailing.server.replication.test/src/com/sap/sailing/server/replication/test/InitialLoadReplicationObjectIdentityTest.java @@ -190,7 +190,7 @@ public class InitialLoadReplicationObjectIdentityTest extends AbstractServerRepl replicationDescriptorPair.getA().initialLoad(); replicator.setSuspended(false); synchronized (replicator) { - while (!replicator.isQueueEmpty()) { + while (!replicator.isQueueEmptyOrStopped()) { replicator.wait(); } } diff --git a/java/com.sap.sailing.server.replication.test/src/com/sap/sailing/server/replication/test/PrematureOperationReceiptTest.java b/java/com.sap.sailing.server.replication.test/src/com/sap/sailing/server/replication/test/PrematureOperationReceiptTest.java index 18d90dc0e82..5b34ef7f79a 100755 --- a/java/com.sap.sailing.server.replication.test/src/com/sap/sailing/server/replication/test/PrematureOperationReceiptTest.java +++ b/java/com.sap.sailing.server.replication.test/src/com/sap/sailing/server/replication/test/PrematureOperationReceiptTest.java @@ -60,7 +60,7 @@ public class PrematureOperationReceiptTest extends AbstractServerReplicationTest } replicator.setSuspended(false); synchronized (replicator) { - while (!replicator.isQueueEmpty()) { + while (!replicator.isQueueEmptyOrStopped()) { replicator.wait(); } } diff --git a/java/com.sap.sse.replication.testsupport/src/com/sap/sse/replication/testsupport/AbstractServerReplicationTestSetUp.java b/java/com.sap.sse.replication.testsupport/src/com/sap/sse/replication/testsupport/AbstractServerReplicationTestSetUp.java index ce6d8fcf286..c921f26b1c6 100644 --- a/java/com.sap.sse.replication.testsupport/src/com/sap/sse/replication/testsupport/AbstractServerReplicationTestSetUp.java +++ b/java/com.sap.sse.replication.testsupport/src/com/sap/sse/replication/testsupport/AbstractServerReplicationTestSetUp.java @@ -180,7 +180,7 @@ public abstract class AbstractServerReplicationTestSetUp replicable = replicableProvider.getReplicable(replicableIdAsString, /* wait */ false); if (replicable != null) { - Thread.currentThread().setContextClassLoader(replicable.getClass().getClassLoader()); ObjectInputStream ois = new ObjectInputStream(uncompressedInputStream); // no special stream required; only reading a generic byte[] int operationsInMessage = 0; try { @@ -253,8 +251,6 @@ public class ReplicationReceiver implements Runnable { } catch (Exception e) { logger.info("Exception while processing replica: "+e.getMessage()); logger.log(Level.SEVERE, "run", e); - } finally { - Thread.currentThread().setContextClassLoader(oldClassLoader); } } logger.info("Stopped replicator thread. This server will no longer receive events from a master."); @@ -361,6 +357,7 @@ public class ReplicationReceiver implements Runnable { logger.info("Signaled Replicator thread to stop asap."); stopped = true; master.stopConnection(); + notifyAll(); // notify those waiting for stopped } public synchronized boolean isBeingStopped() { @@ -376,8 +373,9 @@ public class ReplicationReceiver implements Runnable { /** * @return true if all queues for all replicables are empty */ - public boolean isQueueEmpty() throws IllegalAccessException { - return (_queue == null || getInboundMessageQueue().isEmpty()) && !queueByReplicableIdAsString.values().stream().anyMatch(q->!q.isEmpty()); + public boolean isQueueEmptyOrStopped() throws IllegalAccessException { + return isBeingStopped() || + (_queue == null || getInboundMessageQueue().isEmpty()) && !queueByReplicableIdAsString.values().stream().anyMatch(q->!q.isEmpty()); } } From 9c5978ba4fc550206db383335c35c2b8e4d86732 Mon Sep 17 00:00:00 2001 From: Axel Uhl Date: Mon, 30 Mar 2015 20:51:12 +0200 Subject: [PATCH 18/21] notify waiters if ReplicationReceiver is stopped for any reason, setting stopped to true; example: consumer closed exception --- .../src/com/sap/sse/replication/impl/ReplicationReceiver.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/java/com.sap.sse.replication/src/com/sap/sse/replication/impl/ReplicationReceiver.java b/java/com.sap.sse.replication/src/com/sap/sse/replication/impl/ReplicationReceiver.java index b2b976d441f..a0269415b74 100755 --- a/java/com.sap.sse.replication/src/com/sap/sse/replication/impl/ReplicationReceiver.java +++ b/java/com.sap.sse.replication/src/com/sap/sse/replication/impl/ReplicationReceiver.java @@ -254,6 +254,10 @@ public class ReplicationReceiver implements Runnable { } } logger.info("Stopped replicator thread. This server will no longer receive events from a master."); + synchronized (this) { + stopped = true; + notifyAll(); + } } /** From e75b2e1985f36249f1e9ebba786fec763aa48f5e Mon Sep 17 00:00:00 2001 From: Axel Uhl Date: Mon, 30 Mar 2015 20:56:11 +0200 Subject: [PATCH 19/21] it's important to always return the same classloader; otherwise, the classes and hence the objects won't be compatible / equal --- .../com/sap/sailing/server/impl/RacingEventServiceImpl.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/java/com.sap.sailing.server/src/com/sap/sailing/server/impl/RacingEventServiceImpl.java b/java/com.sap.sailing.server/src/com/sap/sailing/server/impl/RacingEventServiceImpl.java index 461b36b8f73..3e31806aea2 100755 --- a/java/com.sap.sailing.server/src/com/sap/sailing/server/impl/RacingEventServiceImpl.java +++ b/java/com.sap.sailing.server/src/com/sap/sailing/server/impl/RacingEventServiceImpl.java @@ -379,6 +379,8 @@ public class RacingEventServiceImpl implements RacingEventService, ClearStateTes .withInitial(() -> false); private final Set masterDataClassLoaders = new HashSet(); + + private final JoinedClassLoader joinedClassLoader; /** * Constructs a {@link DomainFactory base domain factory} that uses this object's {@link #competitorStore competitor @@ -457,6 +459,7 @@ public class RacingEventServiceImpl implements RacingEventService, ClearStateTes TypeBasedServiceFinderFactory serviceFinderFactory) { logger.info("Created " + this); this.masterDataClassLoaders.add(this.getClass().getClassLoader()); + joinedClassLoader = new JoinedClassLoader(masterDataClassLoaders); this.operationsSentToMasterForReplication = new HashSet<>(); if (windStore == null) { try { @@ -2291,8 +2294,7 @@ public class RacingEventServiceImpl implements RacingEventService, ClearStateTes @Override public ClassLoader getDeserializationClassLoader() { - return getCombinedMasterDataClassLoader(); // FIXME bug 2743: tentatively going back to getClass().getClassLoader() to see which part of the commit was causing the two replication tests to fail -// return getClass().getClassLoader(); + return joinedClassLoader; } @Override From 980f18914ffc1f9b5925cb548e726b45ee938900 Mon Sep 17 00:00:00 2001 From: Axel Uhl Date: Mon, 30 Mar 2015 21:43:28 +0200 Subject: [PATCH 20/21] make sure that if we have a replicator to wait for then we hold on to it in case it gets nulled out in between --- .../AbstractServerReplicationTestSetUp.java | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/java/com.sap.sse.replication.testsupport/src/com/sap/sse/replication/testsupport/AbstractServerReplicationTestSetUp.java b/java/com.sap.sse.replication.testsupport/src/com/sap/sse/replication/testsupport/AbstractServerReplicationTestSetUp.java index c921f26b1c6..5e4cefc1d59 100644 --- a/java/com.sap.sse.replication.testsupport/src/com/sap/sse/replication/testsupport/AbstractServerReplicationTestSetUp.java +++ b/java/com.sap.sse.replication.testsupport/src/com/sap/sse/replication/testsupport/AbstractServerReplicationTestSetUp.java @@ -179,10 +179,13 @@ public abstract class AbstractServerReplicationTestSetUp Date: Mon, 30 Mar 2015 21:55:02 +0200 Subject: [PATCH 21/21] made local variable final to express it will never change --- .../testsupport/AbstractServerReplicationTestSetUp.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java/com.sap.sse.replication.testsupport/src/com/sap/sse/replication/testsupport/AbstractServerReplicationTestSetUp.java b/java/com.sap.sse.replication.testsupport/src/com/sap/sse/replication/testsupport/AbstractServerReplicationTestSetUp.java index 5e4cefc1d59..137a383d16d 100644 --- a/java/com.sap.sse.replication.testsupport/src/com/sap/sse/replication/testsupport/AbstractServerReplicationTestSetUp.java +++ b/java/com.sap.sse.replication.testsupport/src/com/sap/sse/replication/testsupport/AbstractServerReplicationTestSetUp.java @@ -179,7 +179,7 @@ public abstract class AbstractServerReplicationTestSetUp