don't wait for latest analyses that could block Jetty threads if background executor is slow to respond

Change-Id: Ibe7f965d6fe110e7f8980dc1d3a52b626b38a869
This commit is contained in:
Axel Uhl committed 2017-05-04 18:01:13 +02:00
1 parent 2e284468ad
commit 57d1928aa7
2 files changed
+62 -60

No files matched your search

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