mirror of
https://github.com/eclipse-sailing-analytics/sailing-analytics.git
synced 2026-11-14 22:43:57 +00:00
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:
1 parent
2e284468ad
commit
57d1928aa7
2 files changed
+62
-60
No files matched your search
+3
-1
@@ -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
|
||||
|
||||
+59
-59
@@ -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);
|
||||
}
|
||||
|
||||
}
|
||||
Reference in new issue
Block a user