From 01481d2ce3eea31656363bcff980e85f1fd057bf Mon Sep 17 00:00:00 2001 From: Vladislav Chumak Date: Wed, 6 Feb 2019 17:49:40 +0100 Subject: [PATCH] Finished Replica/Non-Replica specific handling of MongoDB model management --- ...stHmmWindEstimationForTrackedRaceTest.java | 2 +- .../windestimation/integration/Activator.java | 20 ++++++++++++++----- .../WindEstimationFactoryServiceImpl.java | 6 ++---- 3 files changed, 18 insertions(+), 10 deletions(-) diff --git a/java/com.sap.sailing.windestimation.test/src/com/sap/sailing/windestimation/integration/IncrementalMstHmmWindEstimationForTrackedRaceTest.java b/java/com.sap.sailing.windestimation.test/src/com/sap/sailing/windestimation/integration/IncrementalMstHmmWindEstimationForTrackedRaceTest.java index b9b2418bc95..b4f331a70b8 100644 --- a/java/com.sap.sailing.windestimation.test/src/com/sap/sailing/windestimation/integration/IncrementalMstHmmWindEstimationForTrackedRaceTest.java +++ b/java/com.sap.sailing.windestimation.test/src/com/sap/sailing/windestimation/integration/IncrementalMstHmmWindEstimationForTrackedRaceTest.java @@ -81,7 +81,7 @@ public class IncrementalMstHmmWindEstimationForTrackedRaceTest extends OnlineTra throws MalformedURLException, URISyntaxException, ModelPersistenceException { dateFormat = new SimpleDateFormat("MM/dd/yyyy-HH:mm:ss"); dateFormat.setTimeZone(TimeZone.getTimeZone("GMT+2")); // will result in CEST - windEstimationFactoryService = new WindEstimationFactoryServiceImpl(false); + windEstimationFactoryService = new WindEstimationFactoryServiceImpl(); modelStore = new ClassPathReadOnlyModelStore("trained_wind_estimation_models", getClass().getClassLoader(), modelFilesNames); windEstimationFactoryService.importAllModelsFromModelStore(modelStore); diff --git a/java/com.sap.sailing.windestimation/src/com/sap/sailing/windestimation/integration/Activator.java b/java/com.sap.sailing.windestimation/src/com/sap/sailing/windestimation/integration/Activator.java index caaddfa459c..a39a95bdb8f 100644 --- a/java/com.sap.sailing.windestimation/src/com/sap/sailing/windestimation/integration/Activator.java +++ b/java/com.sap.sailing.windestimation/src/com/sap/sailing/windestimation/integration/Activator.java @@ -14,6 +14,8 @@ import com.sap.sailing.domain.windestimation.WindEstimationFactoryService; import com.sap.sailing.windestimation.model.exception.ModelLoadingException; import com.sap.sailing.windestimation.model.exception.ModelPersistenceException; import com.sap.sailing.windestimation.model.store.FileSystemModelStore; +import com.sap.sailing.windestimation.model.store.MongoDbModelStore; +import com.sap.sse.mongodb.MongoDBService; import com.sap.sse.replication.Replicable; import com.sap.sse.util.ClearStateTestSupport; @@ -35,9 +37,7 @@ public class Activator implements BundleActivator { @Override public void start(BundleContext context) throws Exception { logger.info("Registering WindEstimationFactoryService"); - //FIXME determine whether this is a replica or not - boolean replica = false; - service = new WindEstimationFactoryServiceImpl(replica); + service = new WindEstimationFactoryServiceImpl(); final String windEstimationModelDataSourceURL = System .getProperty(WIND_ESTIMATION_MODEL_DATA_SOURCE_URL_PROPERTY_NAME); final String windEstimationModelDataSourceFolder = System @@ -49,9 +49,10 @@ public class Activator implements BundleActivator { } if (windEstimationModelDataSourceURL != null) { importWindEstimationModelsFromUrl(windEstimationModelDataSourceURL); - } - if (windEstimationModelDataSourceFolder != null) { + } else if (windEstimationModelDataSourceFolder != null) { importWindEstimationModelsFromFolder(windEstimationModelDataSourceFolder); + } else { + importWindEstimationModelsFromMongoDb(); } final ServiceRegistration serviceRegistration = context .registerService(WindEstimationFactoryService.class, service, null); @@ -62,6 +63,15 @@ public class Activator implements BundleActivator { registrations.add(context.registerService(ClearStateTestSupport.class.getName(), service, null)); } + private void importWindEstimationModelsFromMongoDb() { + MongoDbModelStore modelStore = new MongoDbModelStore(MongoDBService.INSTANCE.getDB()); + try { + service.importAllModelsFromModelStore(modelStore); + } catch (ModelPersistenceException e) { + throw new ModelLoadingException("Could not import wind estimation models from MongoDB", e); + } + } + private void importWindEstimationModelsFromFolder(String windEstimationModelDataSourceFolder) { FileSystemModelStore modelStore = new FileSystemModelStore(windEstimationModelDataSourceFolder); try { diff --git a/java/com.sap.sailing.windestimation/src/com/sap/sailing/windestimation/integration/WindEstimationFactoryServiceImpl.java b/java/com.sap.sailing.windestimation/src/com/sap/sailing/windestimation/integration/WindEstimationFactoryServiceImpl.java index 10811d49e9a..c60273f7ecd 100644 --- a/java/com.sap.sailing.windestimation/src/com/sap/sailing/windestimation/integration/WindEstimationFactoryServiceImpl.java +++ b/java/com.sap.sailing.windestimation/src/com/sap/sailing/windestimation/integration/WindEstimationFactoryServiceImpl.java @@ -19,9 +19,7 @@ import com.sap.sailing.windestimation.model.exception.ModelPersistenceException; import com.sap.sailing.windestimation.model.regressor.twdtransition.GaussianBasedTwdTransitionDistributionCache; import com.sap.sailing.windestimation.model.store.InMemoryModelStore; import com.sap.sailing.windestimation.model.store.ModelStore; -import com.sap.sailing.windestimation.model.store.MongoDbModelStore; import com.sap.sailing.windestimation.model.store.PersistenceContextType; -import com.sap.sse.mongodb.MongoDBService; public class WindEstimationFactoryServiceImpl extends AbstractReplicableWithObjectInputStream> @@ -46,8 +44,8 @@ public class WindEstimationFactoryServiceImpl private boolean modelsReady = false; private boolean shutdown = false; - public WindEstimationFactoryServiceImpl(boolean replica) { - MODEL_STORE = replica ? new InMemoryModelStore() : new MongoDbModelStore(MongoDBService.INSTANCE.getDB()); + public WindEstimationFactoryServiceImpl() { + MODEL_STORE = new InMemoryModelStore(); maneuverClassifiersCache = new ManeuverClassifiersCache(MODEL_STORE, PRELOAD_ALL_MODELS, PRESERVE_LOADED_MODELS_MILLIS, MAX_MANEUVER_FEATURES); gaussianBasedTwdTransitionDistributionCache = new GaussianBasedTwdTransitionDistributionCache(MODEL_STORE,