Files
sailing-analytics/java/com.sap.sailing.domain
Axel Uhl 610df7c5a4 bug6241: two-round retype-and-store to actually see estimator wind fixes
The previous single-round retypeAndStoreAfterWindEstimationSettled was
incorrect: it called waitUntilDone on the estimator before any spots
had been re-emitted (the compute-path's initial detection ran with a
null WindEstimationInteraction because the estimator hadn't been
installed yet, so no spots were pushed). waitUntilDone then returned
immediately on an empty queue, and the subsequent recalculate emitted
spots but returned before the estimator could process them and produce
wind fixes. Net effect: stored maneuvers were still typed with null
wind (mostly UNKNOWN), reproducing the poisoned-DB pattern the fix was
supposed to prevent.

Split into two rounds:

  1. First recalculate + get per competitor. Since setWindEstimation
     cleared maneuverDetectorPerCompetitorCache, this builds a fresh
     detector with a non-null WindEstimationInteraction, runs a full
     scan, and *does* emit spots to the estimator during this pass.
  2. waitUntilDone -- now the estimator's queue has the spots from
     round 1 and this actually waits for the graph inference to
     produce wind fixes and flow them into the tracked race's
     MANEUVER_BASED_ESTIMATION track.
  3. Second recalculate + get per competitor. The detector's
     lastManeuverDetectionResult is now populated and no new raw fixes
     have arrived, so it takes the re-type branch of detectManeuverSpots
     -- which routes through determineManeuversFromManeuverCurve and
     types the spots using trackedRace.getWind(...), which now sees the
     estimator's fixes (bug6274 removed the MANEUVER_BASED_ESTIMATION
     exclusion). The isManeuverSpotWindNearlySame check correctly
     detects that the previous typing had null wind and the current
     has non-null, so it doesn't short-circuit to the UNKNOWN spot.
  4. Snapshot the classified maneuvers and store.

For W1 in 49erFX (5 competitors), pre-fix Mongo had 1 competitor with
362 typed maneuvers (whose detection happened to run after
setWindEstimation) and 1 with 628 all-UNKNOWN (whose detection ran
before setWindEstimation). Post-fix, both should be typed.
2026-07-26 23:39:36 +02:00
..
2025-09-24 16:08:59 +02:00
…