Commit Graph
3007 Commits
Author SHA1 Message Date
Axel Uhl 27292bb2f5 Merge branch 'eclipse-main' into bug6241-opus-4.7 2026-07-20 16:02:55 +02:00
Axel Uhl eb098f8f7b also match sail numbers without nationality against only the sail number 2026-07-18 17:52:06 +02:00
Axel Uhl 35298e66a0 bug6241: per-race scheduleWindEstimationInstallation primitive
Introduces a single per-race primitive in RacingEventServiceImpl that
composes TrackedRace.runWhenPastLoading with
PolarDataService.runWhenPolarLoadingFinishedFor to install the
maneuver-based wind estimation on a race only once BOTH of these are
true: the race has reached a status strictly beyond LOADING (so
whatever loading was to happen has finished), AND the polar-data
mining pipeline has fully drained this race's loaded fixes.

The primitive is called from two places, replacing two separate
installation code paths with one:

 1. RaceAdditionListener.raceAdded, for races added while
    windEstimationFactoryService is already registered.
 2. setWindEstimationFactoryService (via
    setWindEstimationOnAllTrackedRaces), for races that were already
    present when the wind-factory service arrives later.

Under either arrival order the same guard applies: the install only
runs if the wind-factory reference is still the one we were scheduled
with, the race hasn't been removed or errored, and no other estimator
has been installed on it in the meantime. This removes the ordering
sensitivity between OSGi service arrival and race creation that
comment #17 on issue 6241 identified as a root cause.

PolarFixCacheUpdater simplifies dramatically: its only remaining job is
to trigger ingestion of the race's fixes into the polar-mining loading
pipeline on the first transition to a status past LOADING. It no longer
holds an installation callback, and it now also fires ingestion for
races that go directly PREPARED->TRACKING without ever entering
LOADING (previously that fallback branch fired only the install
callback, not the ingestion). This ensures the polar-loading gate in
PolarDataMiner always opens for such races, so any pending
runWhenPolarLoadingFinishedFor callbacks can proceed.

Also adds TrackedRace.getWindEstimation() so the installation
primitive can guard against duplicate installation (it was previously
write-only).
2026-07-14 15:50:55 +02:00
Axel Uhl 26ed05360a bug6241: add no-op runWhenPastLoading stub to MockedTrackedRace
MockedTrackedRace implements DynamicTrackedRace (which extends
TrackedRace), so it needs the same no-op stub the other two mock/dummy
classes got in the previous commit.
2026-07-14 14:09:26 +02:00
Axel Uhl 88efe298da bug6241: add TrackedRace.runWhenPastLoading primitive
Introduces a listener-based primitive that fires a callback exactly once
when a tracked race reaches a status strictly beyond LOADING (TRACKING,
FINISHED, ERROR, or REMOVED via status transition), provided the race is
still a member of its regatta at that moment. If the race is removed
from its regatta before the status condition is met, the callback is
never fired and both the status listener and the regatta-removal
listener are torn down.

The 'strictly beyond LOADING' condition (rather than 'at or beyond
LOADING') is what makes this primitive work for RaceLogRaceTracker-tracked
races that transition directly from PREPARED to TRACKING without ever
entering the LOADING state.

This will be used to wait for the moment when a tracked race is ready
for maneuver-based wind estimation to be attached (i.e., loading is
done, whatever there was of it) without leaking listeners on races that
never make it there because the user removed them.

Implementations added on TrackedRaceImpl (real behavior), DummyTrackedRace
(no-op stub), and MockedTrackedRaceWithStartTimeAndRanks (no-op stub).
New test TrackedRaceRunWhenPastLoadingTest covers the fast path,
PREPARED->TRACKING skipping LOADING, exactly-once semantics across
multiple transitions, and the removal-before-firing cancellation path.
2026-07-14 13:50:49 +02:00
Axel Uhl 6e79fc9e40 bug6245: creating consistency for SmartFutureCache exception handling;
the get(key, waitForLatest) method now consistently throws a
RuntimeException, regardless of whether it originated from calling get()
on the FutureTask executing an ongoing re-calculation, or reading from
the cache instead of an ongoing re-calculation's FutureTask.
2026-05-06 15:13:19 +02:00
Axel Uhl ba91dd8e12 bug6245: added code comments describing the issue 2026-05-05 18:29:07 +02:00
Axel Uhl 4bba57d859 excluding ORC Light ("LITE") certificates from tests;
they don't contain values for GPH and long distance allowances which the
tests need
2026-04-21 18:52:33 +02:00
Axel Uhl d03014da14 logging SmartFutureCache result if unexpectedly no exception was thrown 2026-04-20 17:36:19 +02:00
Axel Uhl 751866568e adding synchronization to SmartFutureCacheTest, hoping to fix test;
see, e.g., https://hudson.sapsailing.com/job/SAPSailingAnalytics-master/8085/testReport/com.sap.sailing.domain.test/SmartFutureCacheTest/testExceptionInComputeCacheUpdate/
2026-04-14 20:24:29 +02:00
Axel Uhl 0ef42346d6 tractrac/tracapi_5.1.0: fixed compile errors (FINISH_CONFIRMED no longer exists) 2026-04-08 14:43:00 +02:00
Axel Uhl 0a8e0a1297 bug6229: added CourseArea observer pattern for FixLoaderAndTracker's event cache 2026-03-31 00:01:34 +02:00
Axel Uhl aeb8a56561 bug6222: finally constructed a failing test case 2026-03-22 23:12:51 +01:00
Axel Uhl 622f172b7c bug6222: renamed test case method 2026-03-21 23:30:20 +01:00
Axel Uhl 7d473f4404 bug6222: fix for FixWindow's COG delta aggregation for out-of-order delivery;
initial commit with a test case supposed to be failing but not failing yet
2026-03-20 19:00:30 +01:00
Axel Uhl 2d936a6455 bug6219: fixed SchoringScheme.compareByMedalRaceScore implementation 2026-03-13 18:26:11 +01:00
Axel Uhl f7c52b6cb2 bug6219: implementation that lets formerly failing test pass;
if tied on medal series points, apply compareByBetterScore to the
scoring medal race columns
2026-03-13 17:47:24 +01:00
Axel Uhl a6311066aa switching test launch config to JUnit5 2026-03-13 17:44:35 +01:00
Axel Uhl 95099c1197 bug6219: more test validations for two medal races 2026-03-13 16:17:00 +01:00
Axel Uhl 9b211b9228 bug6219: added failing test case 2026-03-13 16:00:55 +01:00
Axel Uhl b2e4e7298a Merge branch 'main' into bug5959 2026-03-07 22:45:42 +01:00
Axel Uhl 7ca8529be9 Merge branch 'bug6209' into bug5959 2026-03-04 23:56:49 +01:00
Axel Uhl fc7759120b Merge branch 'bug6209' into bug6215 2026-03-04 23:56:35 +01:00
Axel Uhl 2dd61987ab bug6209: fixing test case, restricting random competitor selection to those considered valid 2026-03-04 23:56:04 +01:00
Axel Uhl 0e7dbdc78e Merge branch 'bug6209' into bug5959 2026-03-04 18:41:47 +01:00
Axel Uhl 307b10d0e5 Merge branch 'bug6209' into bug6215 2026-03-04 18:41:15 +01:00
Axel Uhl 9f603d5ddd bug6209: exclude gappy Broise track and non-finishers from test; restrict to race duration 2026-03-04 18:37:15 +01:00
Axel Uhl 58d9b23603 Merge branch 'bug6209' into bug5959 2026-03-04 15:57:40 +01:00
Axel Uhl 1769ebfb1f bug6215: updated IncrementalLeaderboardDTO.ser after moving classes 2026-03-04 14:38:11 +01:00
Axel Uhl f961bdeaf1 Merge branch 'bug6209' into bug6215 2026-03-04 00:39:56 +01:00
Axel Uhl 91c570c245 Merge branch 'main' into bug6209 2026-03-03 23:31:06 +01:00
Axel Uhl b3e4dcf59e fixing output path and comment for producing .ser file from leaderboard 2026-03-03 23:30:41 +01:00
Axel Uhl 22f180cee1 bug6215: moving Speed, Position, Bearing, Weigher and others to SSE; GWT CFSs not done yet 2026-03-03 17:30:56 +01:00
Axel Uhl 67601b6cf1 Merge branch 'bug6209' into bug5959 2026-02-20 17:43:42 +01:00
Axel Uhl cb282f1e26 bug6209: fixing differences between early and late approximator initialization;
The key was to extend the queue length in FixWindow to the duration used
for validity/outlier detection. This uses the averaging interval in
*both* directions starting from a fix, other than COG/SOG estimation
which uses fixes only in half that interval in each direction.
2026-02-20 17:35:41 +01:00
Axel Uhl 6eeea82934 bug6209: swapped test verdict order again 2026-02-20 11:31:18 +01:00
Axel Uhl d6126636a0 Merge branch 'bug6209' into bug5959 2026-02-20 11:01:20 +01:00
Axel Uhl 9e8ced9635 bug6209: with the fix from d9818f86dc tests needs slight relaxation 2026-02-20 10:59:53 +01:00
Axel Uhl dcac700217 bug6209: logging fixes for test case; focusing on failing track 2026-02-19 16:56:20 +01:00
Axel Uhl fec2015f71 bug6209: removed debug output and cleaned up;
There are still sporadic test failures, with maneuver candidates being
at slightly different time points between early and late initialization.
Another puzzle to solve?
2026-02-19 16:16:18 +01:00
Axel Uhl d9818f86dc bug6209: interims commit: test passes by consistently using compacted cached speed of fix in getEstimatedSpeed 2026-02-19 16:05:30 +01:00
Axel Uhl 04e49ef7fc Merge branch 'bug6209' into bug5959 2026-02-18 10:27:06 +01:00
Axel Uhl d304ddbd8a bug6209: slight adjustment of gybe time in test 2026-02-18 10:26:41 +01:00
Axel Uhl 7a0a05e105 Merge branch 'bug6209' into bug5959 2026-02-17 18:30:30 +01:00
Axel Uhl 753892a2ba bug6209: adding a few fixes after the constructed maneuvers to ensure actual maneuver makes it into approximation 2026-02-17 13:59:38 +01:00
Axel Uhl 5d8a94dfad bug6209: EXPERIMENTAL: see comment #17; adding a queue to delay fix delivery 2026-02-13 18:08:16 +01:00
Axel Uhl 7473f0749e Merge branch 'bug6209' into bug5959 2026-02-13 17:26:09 +01:00
Axel Uhl b35c4134b6 bug6209: fix test CourseChangeBasedTrackApproximationTest.testTurningDirectionChangeInSameWindow;
the damping makes it necessary to turn to the opposite direction a bit
more than only 1.2 times the maneuver threshold when before that the
boat turned the other way. Damping reduces this to below the maneuver
threshold. Increasing this to 1.5 does the job for this test.
2026-02-13 16:47:19 +01:00
Axel Uhl 6411471085 bug6209: added KadaneSerializationTest, asserting instances of KadaneExtremeSubsequenceFinder are serializable 2026-02-10 10:57:18 +01:00
Axel Uhl d8899121d0 Merge branch 'bug6209' into bug5959 2026-02-09 17:01:23 +01:00