From 57d1928aa7afb701fff54866d8246740892ef0dc Mon Sep 17 00:00:00 2001 From: Axel Uhl Date: Thu, 4 May 2017 18:01:13 +0200 Subject: [PATCH] don't wait for latest analyses that could block Jetty threads if background executor is slow to respond Change-Id: Ibe7f965d6fe110e7f8980dc1d3a52b626b38a869 --- .../impl/AbstractSimpleLeaderboardImpl.java | 4 +- .../impl/ManeuversJsonSerializer.java | 118 +++++++++--------- 2 files changed, 62 insertions(+), 60 deletions(-) diff --git a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/leaderboard/impl/AbstractSimpleLeaderboardImpl.java b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/leaderboard/impl/AbstractSimpleLeaderboardImpl.java index 51497d42743..4b648896853 100644 --- a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/leaderboard/impl/AbstractSimpleLeaderboardImpl.java +++ b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/leaderboard/impl/AbstractSimpleLeaderboardImpl.java @@ -1972,7 +1972,9 @@ public abstract class AbstractSimpleLeaderboardImpl implements Leaderboard, Race if (timePoint != null) { if (fillTotalPointsUncorrected) { // explicitly filling the uncorrected total points requires uncached recalculation - result = computeDTO(timePoint, namesOfRaceColumnsForWhichToLoadLegDetails, addOverallDetails, /* waitForLatestAnalyses */ true, + result = computeDTO(timePoint, namesOfRaceColumnsForWhichToLoadLegDetails, addOverallDetails, + /* waitForLatestAnalyses=false because otherwise this may block, e.g., for background tasks + such as maneuver and mark passing calculations */ false, trackedRegattaRegistry, baseDomainFactory, fillTotalPointsUncorrected); } else { // in replay we'd like up-to-date results; they are still cached diff --git a/java/com.sap.sailing.server.gateway.serialization/src/com/sap/sailing/server/gateway/serialization/impl/ManeuversJsonSerializer.java b/java/com.sap.sailing.server.gateway.serialization/src/com/sap/sailing/server/gateway/serialization/impl/ManeuversJsonSerializer.java index 2a2ee0331e3..8259f3528cb 100755 --- a/java/com.sap.sailing.server.gateway.serialization/src/com/sap/sailing/server/gateway/serialization/impl/ManeuversJsonSerializer.java +++ b/java/com.sap.sailing.server.gateway.serialization/src/com/sap/sailing/server/gateway/serialization/impl/ManeuversJsonSerializer.java @@ -1,59 +1,59 @@ -package com.sap.sailing.server.gateway.serialization.impl; - -import org.json.simple.JSONArray; -import org.json.simple.JSONObject; - -import com.sap.sailing.domain.base.Competitor; -import com.sap.sailing.domain.tracking.Maneuver; -import com.sap.sailing.domain.tracking.TrackedRace; -import com.sap.sse.common.TimePoint; -import com.sap.sse.common.impl.MillisecondsTimePoint; - -public class ManeuversJsonSerializer extends AbstractTrackedRaceDataJsonSerializer { - public final static String MANEUVERS = "maneuvers"; - - private final CompetitorJsonSerializer competitorSerializer; - private final ManeuverJsonSerializer maneuverSerializer; - - public ManeuversJsonSerializer(CompetitorJsonSerializer competitorSerializer, ManeuverJsonSerializer maneuverSerializer) { - super(); - this.competitorSerializer = competitorSerializer; - this.maneuverSerializer = maneuverSerializer; - } - - @Override - public JSONObject serialize(TrackedRace trackedRace) { - final JSONObject result = new JSONObject(); - JSONArray byCompetitorJson = new JSONArray(); - result.put(BYCOMPETITOR, byCompetitorJson); - for (Competitor competitor : trackedRace.getRace().getCompetitors()) { - final JSONObject forCompetitorJson = new JSONObject(); - byCompetitorJson.add(forCompetitorJson); - forCompetitorJson.put(COMPETITOR, competitorSerializer.serialize(competitor)); - final JSONArray maneuvers = new JSONArray(); - forCompetitorJson.put(MANEUVERS, maneuvers); - for (final Maneuver maneuver : getManeuversDuringRace(trackedRace, competitor)) { - maneuvers.add(maneuverSerializer.serialize(maneuver)); - } - } - return result; - } - - private Iterable getManeuversDuringRace(TrackedRace trackedRace, Competitor competitor) { - final TimePoint startTime = trackedRace.getStartOfRace(); - final TimePoint endOfRace = trackedRace.getEndOfRace(); - final TimePoint endTime; - if (endOfRace != null) { - endTime = endOfRace; - } else { - final TimePoint endOfTracking = trackedRace.getEndOfTracking(); - if (endOfTracking == null || endOfTracking.after(MillisecondsTimePoint.now())) { - endTime = MillisecondsTimePoint.now(); - } else { - endTime = endOfTracking; - } - } - return trackedRace.getManeuvers(competitor, startTime, endTime, /* waitForLatest */ true); - } - -} +package com.sap.sailing.server.gateway.serialization.impl; + +import org.json.simple.JSONArray; +import org.json.simple.JSONObject; + +import com.sap.sailing.domain.base.Competitor; +import com.sap.sailing.domain.tracking.Maneuver; +import com.sap.sailing.domain.tracking.TrackedRace; +import com.sap.sse.common.TimePoint; +import com.sap.sse.common.impl.MillisecondsTimePoint; + +public class ManeuversJsonSerializer extends AbstractTrackedRaceDataJsonSerializer { + public final static String MANEUVERS = "maneuvers"; + + private final CompetitorJsonSerializer competitorSerializer; + private final ManeuverJsonSerializer maneuverSerializer; + + public ManeuversJsonSerializer(CompetitorJsonSerializer competitorSerializer, ManeuverJsonSerializer maneuverSerializer) { + super(); + this.competitorSerializer = competitorSerializer; + this.maneuverSerializer = maneuverSerializer; + } + + @Override + public JSONObject serialize(TrackedRace trackedRace) { + final JSONObject result = new JSONObject(); + JSONArray byCompetitorJson = new JSONArray(); + result.put(BYCOMPETITOR, byCompetitorJson); + for (Competitor competitor : trackedRace.getRace().getCompetitors()) { + final JSONObject forCompetitorJson = new JSONObject(); + byCompetitorJson.add(forCompetitorJson); + forCompetitorJson.put(COMPETITOR, competitorSerializer.serialize(competitor)); + final JSONArray maneuvers = new JSONArray(); + forCompetitorJson.put(MANEUVERS, maneuvers); + for (final Maneuver maneuver : getManeuversDuringRace(trackedRace, competitor)) { + maneuvers.add(maneuverSerializer.serialize(maneuver)); + } + } + return result; + } + + private Iterable getManeuversDuringRace(TrackedRace trackedRace, Competitor competitor) { + final TimePoint startTime = trackedRace.getStartOfRace(); + final TimePoint endOfRace = trackedRace.getEndOfRace(); + final TimePoint endTime; + if (endOfRace != null) { + endTime = endOfRace; + } else { + final TimePoint endOfTracking = trackedRace.getEndOfTracking(); + if (endOfTracking == null || endOfTracking.after(MillisecondsTimePoint.now())) { + endTime = MillisecondsTimePoint.now(); + } else { + endTime = endOfTracking; + } + } + return trackedRace.getManeuvers(competitor, startTime, endTime, /* waitForLatest */ false); + } + +}