diff --git a/docker/Dockerfile.tpl b/docker/Dockerfile.tpl index 1312e1b7ac5..325eb680513 100755 --- a/docker/Dockerfile.tpl +++ b/docker/Dockerfile.tpl @@ -12,6 +12,7 @@ RUN wget -O /tmp/RELEASE.tar.gz http://releases.sapsailing.com/RELEASE/RELEASE.t && tar xzvpf /tmp/RELEASE.tar.gz \ && rm /tmp/RELEASE.tar.gz COPY env.sh . +RUN cat env-default-rules.sh >>env.sh COPY start . COPY JavaSE-11.profile . EXPOSE 8888 14888 8000 7091 6666 diff --git a/java/com.sap.sailing.domain.persistence/src/com/sap/sailing/domain/persistence/racelog/tracking/MongoSensorFixStoreFactory.java b/java/com.sap.sailing.domain.persistence/src/com/sap/sailing/domain/persistence/racelog/tracking/MongoSensorFixStoreFactory.java index 1c5ba98c4de..182a89f56cf 100644 --- a/java/com.sap.sailing.domain.persistence/src/com/sap/sailing/domain/persistence/racelog/tracking/MongoSensorFixStoreFactory.java +++ b/java/com.sap.sailing.domain.persistence/src/com/sap/sailing/domain/persistence/racelog/tracking/MongoSensorFixStoreFactory.java @@ -3,6 +3,7 @@ package com.sap.sailing.domain.persistence.racelog.tracking; import java.net.UnknownHostException; import com.mongodb.MongoException; +import com.mongodb.ReadConcern; import com.mongodb.WriteConcern; import com.sap.sailing.domain.persistence.DomainObjectFactory; import com.sap.sailing.domain.persistence.MongoObjectFactory; @@ -24,9 +25,10 @@ public interface MongoSensorFixStoreFactory { * Like {@link #getMongoGPSFixStore(MongoObjectFactory, DomainObjectFactory, TypeBasedServiceFinderFactory)}, but * additionally the write concern for the MongoDB writes can be controlled which otherwise usually defaults * to {@link WriteConcern#UNACKNOWLEDGED} for the fixes as well as the metadata. + * @param readConcern TODO */ MongoSensorFixStore getMongoGPSFixStore(MongoObjectFactory mongoObjectFactory, DomainObjectFactory domainObjectFactory, - TypeBasedServiceFinderFactory serviceFinderFactory, WriteConcern writeConcern) + TypeBasedServiceFinderFactory serviceFinderFactory, ReadConcern readConcern, WriteConcern writeConcern) throws UnknownHostException, MongoException; } \ No newline at end of file diff --git a/java/com.sap.sailing.domain.persistence/src/com/sap/sailing/domain/persistence/racelog/tracking/impl/MetadataCollection.java b/java/com.sap.sailing.domain.persistence/src/com/sap/sailing/domain/persistence/racelog/tracking/impl/MetadataCollection.java index 6a2390fb6da..73f0f9dc0dc 100755 --- a/java/com.sap.sailing.domain.persistence/src/com/sap/sailing/domain/persistence/racelog/tracking/impl/MetadataCollection.java +++ b/java/com.sap.sailing.domain.persistence/src/com/sap/sailing/domain/persistence/racelog/tracking/impl/MetadataCollection.java @@ -48,13 +48,15 @@ public class MetadataCollection extends MongoFixHandler { private final MongoCollection metadataCollection; private final ConcurrentHashMap metadataUpdaters; private final WriteConcern writeConcern; + private final ReadConcern readConcern; public MetadataCollection(MongoObjectFactoryImpl mongoOF, TypeBasedServiceFinder> fixServiceFinder, - TypeBasedServiceFinder deviceServiceFinder, WriteConcern writeConcern) { + TypeBasedServiceFinder deviceServiceFinder, ReadConcern readConcern, WriteConcern writeConcern) { super(fixServiceFinder, deviceServiceFinder); this.metadataCollection = mongoOF.getGPSFixMetadataCollection(); this.metadataUpdaters = new ConcurrentHashMap<>(); + this.readConcern = readConcern; this.writeConcern = writeConcern; } @@ -74,7 +76,7 @@ public class MetadataCollection extends MongoFixHandler { */ private Document findMetadataObjectInternal(DeviceIdentifier device) throws TransformationException { Bson query = getDeviceQuery(device); - Document result = metadataCollection.withReadConcern(ReadConcern.MAJORITY).find(query).first(); + Document result = metadataCollection.withReadConcern(readConcern).find(query).first(); return result; } diff --git a/java/com.sap.sailing.domain.persistence/src/com/sap/sailing/domain/persistence/racelog/tracking/impl/MongoSensorFixStoreFactoryImpl.java b/java/com.sap.sailing.domain.persistence/src/com/sap/sailing/domain/persistence/racelog/tracking/impl/MongoSensorFixStoreFactoryImpl.java index 3d107366420..6920b3b7820 100644 --- a/java/com.sap.sailing.domain.persistence/src/com/sap/sailing/domain/persistence/racelog/tracking/impl/MongoSensorFixStoreFactoryImpl.java +++ b/java/com.sap.sailing.domain.persistence/src/com/sap/sailing/domain/persistence/racelog/tracking/impl/MongoSensorFixStoreFactoryImpl.java @@ -3,6 +3,7 @@ package com.sap.sailing.domain.persistence.racelog.tracking.impl; import java.net.UnknownHostException; import com.mongodb.MongoException; +import com.mongodb.ReadConcern; import com.mongodb.WriteConcern; import com.sap.sailing.domain.persistence.DomainObjectFactory; import com.sap.sailing.domain.persistence.MongoObjectFactory; @@ -21,7 +22,7 @@ public class MongoSensorFixStoreFactoryImpl implements MongoSensorFixStoreFactor @Override public MongoSensorFixStore getMongoGPSFixStore(MongoObjectFactory mongoObjectFactory, DomainObjectFactory domainObjectFactory, TypeBasedServiceFinderFactory serviceFinderFactory, - WriteConcern writeConcern) throws UnknownHostException, MongoException { - return new MongoSensorFixStoreImpl(mongoObjectFactory, domainObjectFactory, serviceFinderFactory, writeConcern); + ReadConcern readConcern, WriteConcern writeConcern) throws UnknownHostException, MongoException { + return new MongoSensorFixStoreImpl(mongoObjectFactory, domainObjectFactory, serviceFinderFactory, readConcern, writeConcern); } } diff --git a/java/com.sap.sailing.domain.persistence/src/com/sap/sailing/domain/persistence/racelog/tracking/impl/MongoSensorFixStoreImpl.java b/java/com.sap.sailing.domain.persistence/src/com/sap/sailing/domain/persistence/racelog/tracking/impl/MongoSensorFixStoreImpl.java index 08f906f5f8b..a3e80f70f48 100644 --- a/java/com.sap.sailing.domain.persistence/src/com/sap/sailing/domain/persistence/racelog/tracking/impl/MongoSensorFixStoreImpl.java +++ b/java/com.sap.sailing.domain.persistence/src/com/sap/sailing/domain/persistence/racelog/tracking/impl/MongoSensorFixStoreImpl.java @@ -17,6 +17,7 @@ import java.util.logging.Logger; import org.bson.Document; import org.bson.conversions.Bson; +import com.mongodb.ReadConcern; import com.mongodb.WriteConcern; import com.mongodb.client.FindIterable; import com.mongodb.client.MongoCollection; @@ -72,16 +73,16 @@ public class MongoSensorFixStoreImpl extends MongoFixHandler implements MongoSen public MongoSensorFixStoreImpl(MongoObjectFactory mongoObjectFactory, DomainObjectFactory domainObjectFactory, TypeBasedServiceFinderFactory serviceFinderFactory) { - this(mongoObjectFactory, domainObjectFactory, serviceFinderFactory, WriteConcern.UNACKNOWLEDGED); + this(mongoObjectFactory, domainObjectFactory, serviceFinderFactory, ReadConcern.DEFAULT, WriteConcern.UNACKNOWLEDGED); } public MongoSensorFixStoreImpl(MongoObjectFactory mongoObjectFactory, DomainObjectFactory domainObjectFactory, - TypeBasedServiceFinderFactory serviceFinderFactory, WriteConcern writeConcern) { + TypeBasedServiceFinderFactory serviceFinderFactory, ReadConcern readConcern, WriteConcern writeConcern) { super(serviceFinderFactory != null ? createFixServiceFinder(serviceFinderFactory) : null, serviceFinderFactory != null ? serviceFinderFactory.createServiceFinder(DeviceIdentifierMongoHandler.class) : null); mongoOF = (MongoObjectFactoryImpl) mongoObjectFactory; fixesCollection = mongoOF.getGPSFixCollection(); - metadataCollection = new MetadataCollection(mongoOF, fixServiceFinder, deviceServiceFinder, writeConcern); + metadataCollection = new MetadataCollection(mongoOF, fixServiceFinder, deviceServiceFinder, readConcern, writeConcern); this.writeConcern = writeConcern; } diff --git a/java/com.sap.sailing.domain.racelogtrackingadapter.test/src/com/sap/sailing/domain/racelogtracking/test/AbstractGPSFixStoreTest.java b/java/com.sap.sailing.domain.racelogtrackingadapter.test/src/com/sap/sailing/domain/racelogtracking/test/AbstractGPSFixStoreTest.java index 54953ccee2e..6e076cc0d08 100644 --- a/java/com.sap.sailing.domain.racelogtrackingadapter.test/src/com/sap/sailing/domain/racelogtracking/test/AbstractGPSFixStoreTest.java +++ b/java/com.sap.sailing.domain.racelogtrackingadapter.test/src/com/sap/sailing/domain/racelogtracking/test/AbstractGPSFixStoreTest.java @@ -10,6 +10,7 @@ import java.util.UUID; import org.junit.After; import org.junit.Before; +import com.mongodb.ReadConcern; import com.mongodb.WriteConcern; import com.sap.sailing.domain.abstractlog.race.impl.RaceLogImpl; import com.sap.sailing.domain.abstractlog.regatta.RegattaLog; @@ -84,7 +85,7 @@ public class AbstractGPSFixStoreTest extends RaceLogTrackingTestHelper { regattaLog = new RegattaLogImpl("regattalog"); dropPersistedData(); store = new MongoSensorFixStoreImpl(service.getMongoObjectFactory(), service.getDomainObjectFactory(), - serviceFinderFactory, WriteConcern.MAJORITY); + serviceFinderFactory, ReadConcern.MAJORITY, WriteConcern.MAJORITY); } @After diff --git a/java/com.sap.sailing.domain.racelogtrackingadapter.test/src/com/sap/sailing/domain/racelogtracking/test/impl/RaceLogFixTrackerManagerTest.java b/java/com.sap.sailing.domain.racelogtrackingadapter.test/src/com/sap/sailing/domain/racelogtracking/test/impl/RaceLogFixTrackerManagerTest.java index 72b961dff3a..c01fef85c57 100644 --- a/java/com.sap.sailing.domain.racelogtrackingadapter.test/src/com/sap/sailing/domain/racelogtracking/test/impl/RaceLogFixTrackerManagerTest.java +++ b/java/com.sap.sailing.domain.racelogtrackingadapter.test/src/com/sap/sailing/domain/racelogtracking/test/impl/RaceLogFixTrackerManagerTest.java @@ -14,6 +14,7 @@ import org.junit.Before; import org.junit.Test; import com.mongodb.MongoException; +import com.mongodb.ReadConcern; import com.mongodb.WriteConcern; import com.sap.sailing.domain.abstractlog.AbstractLogEventAuthor; import com.sap.sailing.domain.abstractlog.impl.LogEventAuthorImpl; @@ -93,7 +94,7 @@ public class RaceLogFixTrackerManagerTest { raceLog2 = new RaceLogImpl("racelog2"); regattaLog = new RegattaLogImpl("regattalog"); store = new MongoSensorFixStoreImpl(PersistenceFactory.INSTANCE.getDefaultMongoObjectFactory(), - PersistenceFactory.INSTANCE.getDefaultDomainObjectFactory(), serviceFinderFactory, WriteConcern.MAJORITY); + PersistenceFactory.INSTANCE.getDefaultDomainObjectFactory(), serviceFinderFactory, ReadConcern.MAJORITY, WriteConcern.MAJORITY); Course course = new CourseImpl("course", Arrays.asList(new Waypoint[] { new WaypointImpl(mark), new WaypointImpl(mark2) })); Map competitorsAndBoats = new HashMap<>(); diff --git a/java/com.sap.sailing.domain.racelogtrackingadapter.test/src/com/sap/sailing/domain/racelogtracking/test/impl/SensorFixStoreAndLoadTest.java b/java/com.sap.sailing.domain.racelogtrackingadapter.test/src/com/sap/sailing/domain/racelogtracking/test/impl/SensorFixStoreAndLoadTest.java index 233eb215926..2541d56e3a9 100644 --- a/java/com.sap.sailing.domain.racelogtrackingadapter.test/src/com/sap/sailing/domain/racelogtracking/test/impl/SensorFixStoreAndLoadTest.java +++ b/java/com.sap.sailing.domain.racelogtrackingadapter.test/src/com/sap/sailing/domain/racelogtracking/test/impl/SensorFixStoreAndLoadTest.java @@ -24,6 +24,7 @@ import org.junit.Before; import org.junit.Test; import com.mongodb.MongoException; +import com.mongodb.ReadConcern; import com.mongodb.WriteConcern; import com.mongodb.client.MongoDatabase; import com.sap.sailing.domain.abstractlog.AbstractLogEventAuthor; @@ -153,7 +154,7 @@ public class SensorFixStoreAndLoadTest { raceLog.add(new RaceLogEndOfTrackingEventImpl(new MillisecondsTimePoint(END_OF_TRACKING), author, 0)); regattaLog = new RegattaLogImpl("regattalog"); store = new MongoSensorFixStoreImpl(PersistenceFactory.INSTANCE.getDefaultMongoObjectFactory(), - PersistenceFactory.INSTANCE.getDefaultDomainObjectFactory(), serviceFinderFactory, WriteConcern.MAJORITY); + PersistenceFactory.INSTANCE.getDefaultDomainObjectFactory(), serviceFinderFactory, ReadConcern.MAJORITY, WriteConcern.MAJORITY); regattaLog.add(new RegattaLogDefineMarkEventImpl(new MillisecondsTimePoint(1), author, new MillisecondsTimePoint(1), 0, mark)); regattaLog.add(new RegattaLogDefineMarkEventImpl(new MillisecondsTimePoint(2), author, diff --git a/java/com.sap.sailing.domain.racelogtrackingadapter.test/src/com/sap/sailing/domain/racelogtracking/test/impl/SensorFixStoreTest.java b/java/com.sap.sailing.domain.racelogtrackingadapter.test/src/com/sap/sailing/domain/racelogtracking/test/impl/SensorFixStoreTest.java index e2dd2e47b0c..941312782e9 100644 --- a/java/com.sap.sailing.domain.racelogtrackingadapter.test/src/com/sap/sailing/domain/racelogtracking/test/impl/SensorFixStoreTest.java +++ b/java/com.sap.sailing.domain.racelogtrackingadapter.test/src/com/sap/sailing/domain/racelogtracking/test/impl/SensorFixStoreTest.java @@ -8,11 +8,13 @@ import java.util.List; import java.util.function.Consumer; import org.junit.After; +import org.junit.Assert; import org.junit.Before; import org.junit.Test; import org.mockito.Mockito; import com.mongodb.MongoException; +import com.mongodb.ReadConcern; import com.mongodb.WriteConcern; import com.mongodb.client.MongoDatabase; import com.sap.sailing.domain.common.DeviceIdentifier; @@ -37,8 +39,6 @@ import com.sap.sse.common.impl.DegreeBearingImpl; import com.sap.sse.common.impl.MillisecondsTimePoint; import com.sap.sse.common.impl.TimeRangeImpl; -import org.junit.Assert; - public class SensorFixStoreTest { private static final long FIX_TIMESTAMP = 110; private static final long FIX_TIMESTAMP2 = 120; @@ -63,7 +63,7 @@ public class SensorFixStoreTest { private void newStore() { store = new MongoSensorFixStoreImpl(PersistenceFactory.INSTANCE.getDefaultMongoObjectFactory(), - PersistenceFactory.INSTANCE.getDefaultDomainObjectFactory(), serviceFinderFactory, WriteConcern.MAJORITY); + PersistenceFactory.INSTANCE.getDefaultDomainObjectFactory(), serviceFinderFactory, ReadConcern.MAJORITY, WriteConcern.MAJORITY); } @After diff --git a/java/com.sap.sailing.hanaexport/resources/createtables.sql b/java/com.sap.sailing.hanaexport/resources/createtables.sql index 11c55022a73..ee1c1d31605 100755 --- a/java/com.sap.sailing.hanaexport/resources/createtables.sql +++ b/java/com.sap.sailing.hanaexport/resources/createtables.sql @@ -49,14 +49,14 @@ CREATE COLUMN TABLE SAILING."Race" ( FOREIGN KEY ("regatta") REFERENCES SAILING."Regatta" ("name") ); CREATE TABLE SAILING."Competitor" ( - "id" NVARCHAR(36) PRIMARY KEY, + "id" NVARCHAR(255) PRIMARY KEY, "name" NVARCHAR(255) NOT NULL, "shortName" NVARCHAR(20), "nationality" NVARCHAR(3) NOT NULL, "sailNumber" NVARCHAR(255) ); CREATE TABLE SAILING."CompetitorRace" ( - "competitorId" NVARCHAR(36), + "competitorId" NVARCHAR(255), "race" NVARCHAR(255), "regatta" NVARCHAR(255), PRIMARY KEY ("competitorId", "race"), @@ -66,7 +66,7 @@ CREATE TABLE SAILING."CompetitorRace" ( CREATE TABLE SAILING."RaceResult" ( "regatta" NVARCHAR(255) NOT NULL, "raceColumn" NVARCHAR(255) NOT NULL, - "competitorId" NVARCHAR(36) NOT NULL, + "competitorId" NVARCHAR(255) NOT NULL, "points" DOUBLE, "discarded" BOOLEAN, "irm" NVARCHAR(4), @@ -76,7 +76,7 @@ CREATE TABLE SAILING."RaceResult" ( CREATE TABLE SAILING."RaceStats" ( "race" NVARCHAR(255) NOT NULL, "regatta" NVARCHAR(255) NOT NULL, - "competitorId" NVARCHAR(36) NOT NULL, + "competitorId" NVARCHAR(255) NOT NULL, "rankOneBased" INTEGER, "distanceSailedInMeters" DOUBLE, "elapsedTimeInSeconds" DOUBLE, @@ -105,7 +105,7 @@ CREATE TABLE SAILING."LegStats" ( "race" NVARCHAR(255) NOT NULL, "regatta" NVARCHAR(255) NOT NULL, "number" INTEGER NOT NULL, - "competitorId" NVARCHAR(36) NOT NULL, + "competitorId" NVARCHAR(255) NOT NULL, "rankOneBased" INTEGER, "distanceSailedInMeters" DOUBLE, "elapsedTimeInSeconds" DOUBLE, @@ -123,7 +123,7 @@ CREATE TABLE SAILING."LegStats" ( CREATE TABLE SAILING."Maneuver" ( "race" NVARCHAR(255) NOT NULL, "regatta" NVARCHAR(255) NOT NULL, - "competitorId" NVARCHAR(36) NOT NULL, + "competitorId" NVARCHAR(255) NOT NULL, "timepoint" TIMESTAMP NOT NULL, "type" NVARCHAR(20) NOT NULL, "newTack" NVARCHAR(20), diff --git a/java/com.sap.sailing.hanaexport/src/com/sap/sailing/hanaexport/jaxrs/api/HanaCloudSacExportResource.java b/java/com.sap.sailing.hanaexport/src/com/sap/sailing/hanaexport/jaxrs/api/HanaCloudSacExportResource.java index 6c392df3933..a70b91e7f50 100755 --- a/java/com.sap.sailing.hanaexport/src/com/sap/sailing/hanaexport/jaxrs/api/HanaCloudSacExportResource.java +++ b/java/com.sap.sailing.hanaexport/src/com/sap/sailing/hanaexport/jaxrs/api/HanaCloudSacExportResource.java @@ -210,49 +210,51 @@ public class HanaCloudSacExportResource extends SharedAbstractSailingServerResou final Leaderboard leaderboard = racingEventService.getLeaderboardByName(regatta.getName()); if (leaderboard != null) { final Event event = racingEventService.findEventContainingLeaderboardAndMatchingAtLeastOneCourseArea(leaderboard); - alreadyInsertedContent.ensureEventIsInserted(event); - insertRegattas.insert(new RegattaAndEvent(regatta, event)); - if (leaderboard != null) { - for (final RaceColumn raceColumn : leaderboard.getRaceColumns()) { - for (final Competitor competitor : raceColumn.getAllCompetitors()) { - alreadyInsertedContent.ensureCompetitorIsInserted(competitor); - insertRaceResults.insertBatch(new InsertRaceResultStatement.RaceResult(regatta, leaderboard, competitor, raceColumn, now)); - } - insertRaceResults.executeBatch(); - for (final Fleet fleet : raceColumn.getFleets()) { - final TrackedRace trackedRace = raceColumn.getTrackedRace(fleet); - if (trackedRace != null) { - final RankingInfo rankingInfo = trackedRace.getRankingMetric().getRankingInfo(now); - final WindLegTypeAndLegBearingAndORCPerformanceCurveCache cache = new LeaderboardDTOCalculationReuseCache(now); - insertRaces.insertBatch(new InsertRaceStatement.TrackedRaceWithRaceColumnAndFleet(trackedRace, raceColumn, fleet)); - for (final TrackedLeg trackedLeg : trackedRace.getTrackedLegs()) { - insertLegs.insertBatch(new InsertLegStatement.TrackedLegAndNow(now, trackedLeg)); - for (final Competitor competitor : trackedRace.getRace().getCompetitors()) { - insertLegStats.insertBatch(new InsertLegStatsStatement.TrackedLegOfCompetitorRankingInfoCacheAndNow(now, rankingInfo, cache, trackedLeg.getTrackedLeg(competitor))); - } - } + if (event != null) { + alreadyInsertedContent.ensureEventIsInserted(event); + insertRegattas.insert(new RegattaAndEvent(regatta, event)); + if (leaderboard != null) { + for (final RaceColumn raceColumn : leaderboard.getRaceColumns()) { + for (final Competitor competitor : raceColumn.getAllCompetitors()) { + alreadyInsertedContent.ensureCompetitorIsInserted(competitor); + insertRaceResults.insertBatch(new InsertRaceResultStatement.RaceResult(regatta, leaderboard, competitor, raceColumn, now)); } - final Waypoint startWaypoint = trackedRace == null ? null : trackedRace.getRace().getCourse().getFirstWaypoint(); - if (trackedRace != null) { - for (final Competitor competitor : trackedRace.getRace().getCompetitors()) { - insertRaceStats.insertBatch(new InsertRaceStatsStatement.TrackedRaceWithCompetitorAndStartWaypoint(now, startWaypoint, competitor, trackedRace)); - final LinkedHashMap timepointUniqueManeuvers = new LinkedHashMap<>(); - for (final Maneuver maneuver : trackedRace.getManeuvers(competitor, /* waitForLatest */ false)) { - if (maneuver.getType() == ManeuverType.TACK || maneuver.getType() == ManeuverType.JIBE || maneuver.getType() == ManeuverType.PENALTY_CIRCLE) { - timepointUniqueManeuvers.put(maneuver.getTimePoint(), maneuver); + insertRaceResults.executeBatch(); + for (final Fleet fleet : raceColumn.getFleets()) { + final TrackedRace trackedRace = raceColumn.getTrackedRace(fleet); + if (trackedRace != null) { + final RankingInfo rankingInfo = trackedRace.getRankingMetric().getRankingInfo(now); + final WindLegTypeAndLegBearingAndORCPerformanceCurveCache cache = new LeaderboardDTOCalculationReuseCache(now); + insertRaces.insertBatch(new InsertRaceStatement.TrackedRaceWithRaceColumnAndFleet(trackedRace, raceColumn, fleet)); + for (final TrackedLeg trackedLeg : trackedRace.getTrackedLegs()) { + insertLegs.insertBatch(new InsertLegStatement.TrackedLegAndNow(now, trackedLeg)); + for (final Competitor competitor : trackedRace.getRace().getCompetitors()) { + insertLegStats.insertBatch(new InsertLegStatsStatement.TrackedLegOfCompetitorRankingInfoCacheAndNow(now, rankingInfo, cache, trackedLeg.getTrackedLeg(competitor))); } } - for (final Maneuver maneuver : timepointUniqueManeuvers.values()) { - insertManeuvers.insertBatch(new InsertManeuverStatement.ManeuverTrackedRaceAndCompetitor(maneuver, trackedRace, competitor)); + } + final Waypoint startWaypoint = trackedRace == null ? null : trackedRace.getRace().getCourse().getFirstWaypoint(); + if (trackedRace != null) { + for (final Competitor competitor : trackedRace.getRace().getCompetitors()) { + insertRaceStats.insertBatch(new InsertRaceStatsStatement.TrackedRaceWithCompetitorAndStartWaypoint(now, startWaypoint, competitor, trackedRace)); + final LinkedHashMap timepointUniqueManeuvers = new LinkedHashMap<>(); + for (final Maneuver maneuver : trackedRace.getManeuvers(competitor, /* waitForLatest */ false)) { + if (maneuver.getType() == ManeuverType.TACK || maneuver.getType() == ManeuverType.JIBE || maneuver.getType() == ManeuverType.PENALTY_CIRCLE) { + timepointUniqueManeuvers.put(maneuver.getTimePoint(), maneuver); + } + } + for (final Maneuver maneuver : timepointUniqueManeuvers.values()) { + insertManeuvers.insertBatch(new InsertManeuverStatement.ManeuverTrackedRaceAndCompetitor(maneuver, trackedRace, competitor)); + } } } } + insertRaces.executeBatch(); + insertLegs.executeBatch(); + insertLegStats.executeBatch(); + insertRaceStats.executeBatch(); + insertManeuvers.executeBatch(); } - insertRaces.executeBatch(); - insertLegs.executeBatch(); - insertLegStats.executeBatch(); - insertRaceStats.executeBatch(); - insertManeuvers.executeBatch(); } } } diff --git a/java/com.sap.sailing.server.test/src/com/sap/sailing/server/test/MasterDataImportTest.java b/java/com.sap.sailing.server.test/src/com/sap/sailing/server/test/MasterDataImportTest.java index e322dbaa99a..3e82f634a59 100644 --- a/java/com.sap.sailing.server.test/src/com/sap/sailing/server/test/MasterDataImportTest.java +++ b/java/com.sap.sailing.server.test/src/com/sap/sailing/server/test/MasterDataImportTest.java @@ -43,6 +43,7 @@ import org.mockito.Matchers; import org.mockito.Mockito; import com.mongodb.MongoException; +import com.mongodb.ReadConcern; import com.mongodb.WriteConcern; import com.sap.sailing.domain.abstractlog.AbstractLogEventAuthor; import com.sap.sailing.domain.abstractlog.impl.LogEventAuthorImpl; @@ -264,7 +265,7 @@ public class MasterDataImportTest { .spy(new RacingEventServiceImpl(null, MongoSensorFixStoreFactory.INSTANCE.getMongoGPSFixStore( PersistenceFactory.INSTANCE .getDefaultMongoObjectFactory(serviceFinderFactory), PersistenceFactory.INSTANCE - .getDefaultDomainObjectFactory(), serviceFinderFactory, WriteConcern.MAJORITY), serviceFinderFactory)); + .getDefaultDomainObjectFactory(), serviceFinderFactory, ReadConcern.MAJORITY, WriteConcern.MAJORITY), serviceFinderFactory)); Mockito.doReturn(securityService).when(sourceService).getSecurityService(); Event event = sourceService.addEvent(TEST_EVENT_NAME, /* eventDescription */null, eventStartDate, eventEndDate, "testVenue", false, eventUUID); diff --git a/java/com.sap.sailing.server.testsupport/src/com/sap/sailing/server/testsupport/RacingEventServiceImplMock.java b/java/com.sap.sailing.server.testsupport/src/com/sap/sailing/server/testsupport/RacingEventServiceImplMock.java index d40b27f7142..707f8d3b167 100644 --- a/java/com.sap.sailing.server.testsupport/src/com/sap/sailing/server/testsupport/RacingEventServiceImplMock.java +++ b/java/com.sap.sailing.server.testsupport/src/com/sap/sailing/server/testsupport/RacingEventServiceImplMock.java @@ -5,6 +5,7 @@ import java.util.Map; import java.util.Set; import com.mongodb.MongoException; +import com.mongodb.ReadConcern; import com.mongodb.WriteConcern; import com.sap.sailing.domain.base.Regatta; import com.sap.sailing.domain.common.impl.DataImportProgressImpl; @@ -36,7 +37,7 @@ public abstract class RacingEventServiceImplMock extends RacingEventServiceImpl super(null, MongoSensorFixStoreFactory.INSTANCE.getMongoGPSFixStore( PersistenceFactory.INSTANCE .getDefaultMongoObjectFactory(serviceFinderFactory), PersistenceFactory.INSTANCE - .getDefaultDomainObjectFactory(), serviceFinderFactory, WriteConcern.MAJORITY), serviceFinderFactory); + .getDefaultDomainObjectFactory(), serviceFinderFactory, ReadConcern.MAJORITY, WriteConcern.MAJORITY), serviceFinderFactory); lock = new DataImportLockWithProgress(); lock.addProgress(dataImportProgressImpl.getOperationId(), dataImportProgressImpl); } diff --git a/java/pom.xml b/java/pom.xml index 6695afb4c3c..743c80d41c2 100755 --- a/java/pom.xml +++ b/java/pom.xml @@ -536,7 +536,7 @@ - -Dgwt.persistentunitcache=false -Xmx2560m -Djava.io.tmpdir=${env.TMP} -Dgwt.watchFileChanges=false + -Dgwt.persistentunitcache=false -Xmx4g -Djava.io.tmpdir=${env.TMP} -Dgwt.watchFileChanges=false 4